精华内容
下载资源
问答
  • 常见的三维点云数据格式,包括斯坦福兔子,马,大象,人头等,数据格式已经整理成规则的X坐标空格Y坐标空格Z坐标,方便数据读取与后处理。 注意,这是只带XYZ坐标的txt文档,如果不符合需求请绕道,别瞎说不能用。
  • 常见格式测试视频

    热门讨论 2015-11-11 16:26:04
    常见的12种测试视频文件,视频文件主要为常见的12种格式(avi、3gp、flv、mkv、mov、MP4、mpg、rmvb、swf、vob、wmv)
  • Spring常见面试题总结(超详细回答)

    万次阅读 多人点赞 2018-07-08 15:36:08
    1、Spring是什么? Spring是一个轻量级的IoC和...常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提...

    1、Spring是什么?

    Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。主要包括以下七个模块:

    • Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);
    • Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务;
    • Spring AOP:AOP服务;
    • Spring Web:提供了基本的面向Web的综合特性,提供对常见框架如Struts2的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器;
    • Spring MVC:提供面向Web应用的Model-View-Controller,即MVC实现。
    • Spring DAO:对JDBC的抽象封装,简化了数据访问异常的处理,并能统一管理JDBC事务;
    • Spring ORM:对现有的ORM框架的支持;

    下图对应的是Spring 4.x的版本,5.x版本中Web模块的Portlet组件已经被废弃

    2、Spring 的优点?

    (1)spring属于低侵入式设计,代码的污染极低;

    (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;

    (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。

    (4)spring对于主流的应用框架提供了集成支持。

    3、Spring的IoC理解:

    (1)IOC就是控制反转,指创建对象的控制权转移给Spring框架进行管理,并由Spring根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。DI依赖注入,和控制反转是同一个概念的不同角度的描述,即 应用程序在运行时依赖IoC容器来动态注入对象需要的外部依赖。

    (2)最直观的表达就是,以前创建对象的主动权和时机都是由自己把控的,IOC让对象的创建不用去new了,可以由spring自动生产,使用java的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法的。

    (3)Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。

    4、Spring的AOP理解:

    OOP面向对象,允许开发者定义纵向的关系,但并不适用于定义横向的关系,会导致大量代码的重复,而不利于各个模块的重用。

    AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证、日志、事务处理。

    AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。

    (1)AspectJ是静态代理,也称为编译时增强,AOP框架会在编译阶段生成AOP代理类,并将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象。

    (2)Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:

            ① JDK动态代理只提供接口的代理,不支持类的代理,要求被代理类实现接口。JDK动态代理的核心是InvocationHandler接口和Proxy类,在获取代理对象时,使用Proxy类来动态创建目标类的代理类(即最终真正的代理类,这个类继承自Proxy并实现了我们定义的接口),当代理对象调用真实对象的方法时, InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;

     InvocationHandler 的 invoke(Object  proxy,Method  method,Object[] args):proxy是最终生成的代理对象;  method 是被代理目标实例的某个具体方法;  args 是被代理目标实例某个方法的具体入参, 在方法反射调用时使用。

            ② 如果被代理类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。

    (3)静态代理与动态代理区别在于生成AOP代理对象的时机不同,相对来说AspectJ的静态代理方式具有更好的性能,但是AspectJ需要特定的编译器进行处理,而Spring AOP则无需特定的编译器处理。

    IoC让相互协作的组件保持松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件。

    5、Spring AOP里面的几个名词的概念:

    (1)连接点(Join point):指程序运行过程中所执行的方法。在Spring AOP中,一个连接点总代表一个方法的执行。 

    (2)切面(Aspect):被抽取出来的公共模块,可以用来会横切多个对象。Aspect切面可以看成 Pointcut切点 和 Advice通知 的结合,一个切面可以由多个切点和通知组成。

    在Spring AOP中,切面可以在类上使用 @AspectJ 注解来实现。

    (3)切点(Pointcut):切点用于定义 要对哪些Join point进行拦截。

    切点分为execution方式和annotation方式。execution方式可以用路径表达式指定对哪些方法拦截,比如指定拦截add*、search*。annotation方式可以指定被哪些注解修饰的代码进行拦截。

    (4)通知(Advice):指要在连接点(Join Point)上执行的动作,即增强的逻辑,比如权限校验和、日志记录等。通知有各种类型,包括Around、Before、After、After returning、After throwing。

    (5)目标对象(Target):包含连接点的对象,也称作被通知(Advice)的对象。 由于Spring AOP是通过动态代理实现的,所以这个对象永远是一个代理对象。

    (6)织入(Weaving):通过动态代理,在目标对象(Target)的方法(即连接点Join point)中执行增强逻辑(Advice)的过程。

    (7)引入(Introduction):添加额外的方法或者字段到被通知的类。Spring允许引入新的接口(以及对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。

    几个概念的关系图可以参考下图:

    网上有张非常形象的图,描述了各个概念所处的场景和作用,贴在这里供大家理解:

    6、Spring通知(Advice)有哪些类型?

    (1)前置通知(Before Advice):在连接点(Join point)之前执行的通知。

    (2)后置通知(After Advice):当连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 

    (3)环绕通知(Around Advice):包围一个连接点的通知,这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也可以选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行

    (4)返回后通知(AfterReturning Advice):在连接点正常完成后执行的通知(如果连接点抛出异常,则不执行)

    (5)抛出异常后通知(AfterThrowing advice):在方法抛出异常退出时执行的通知

    同一个Aspect,不同advice的执行顺序:

    (1)没有异常情况下的执行顺序:

    • around before advice
    • before advice
    • target method 执行
    • around after advice
    • after advice
    • afterReturning

    (2)有异常情况下的执行顺序:

    • around before advice
    • before advice
    • target method 执行
    • around after advice
    • after advice
    • afterThrowing
    • java.lang.RuntimeException: 异常发生

    7、Spring容器的启动流程:

    详细内容可以阅读这篇文章:Spring容器的启动流程_张维鹏的博客-CSDN博客

    (1)初始化Spring容器,注册内置的BeanPostProcessor的BeanDefinition到容器中:

    • ① 实例化BeanFactory【DefaultListableBeanFactory】工厂,用于生成Bean对象
    • ② 实例化BeanDefinitionReader注解配置读取器,用于对特定注解(如@Service、@Repository)的类进行读取转化成  BeanDefinition 对象,(BeanDefinition 是 Spring 中极其重要的一个概念,它存储了 bean 对象的所有特征信息,如是否单例,是否懒加载,factoryBeanName 等)
    • ③ 实例化ClassPathBeanDefinitionScanner路径扫描器,用于对指定的包目录进行扫描查找 bean 对象

    (2)将配置类的BeanDefinition注册到容器中:

    (3)调用refresh()方法刷新容器:

    • ① prepareRefresh()刷新前的预处理:
    • ② obtainFreshBeanFactory():获取在容器初始化时创建的BeanFactory:
    • ③ prepareBeanFactory(beanFactory):BeanFactory的预处理工作,向容器中添加一些组件:
    • ④ postProcessBeanFactory(beanFactory):子类重写该方法,可以实现在BeanFactory创建并预处理完成以后做进一步的设置
    • ⑤ invokeBeanFactoryPostProcessors(beanFactory):在BeanFactory标准初始化之后执行BeanFactoryPostProcessor的方法,即BeanFactory的后置处理器:
    • ⑥ registerBeanPostProcessors(beanFactory):向容器中注册Bean的后置处理器BeanPostProcessor,它的主要作用是干预Spring初始化bean的流程,从而完成代理、自动注入、循环依赖等功能
    • ⑦ initMessageSource():初始化MessageSource组件,主要用于做国际化功能,消息绑定与消息解析:
    • ⑧ initApplicationEventMulticaster():初始化事件派发器,在注册监听器时会用到:
    • ⑨ onRefresh():留给子容器、子类重写这个方法,在容器刷新的时候可以自定义逻辑
    • ⑩ registerListeners():注册监听器:将容器中所有的ApplicationListener注册到事件派发器中,并派发之前步骤产生的事件:
    • ⑪  finishBeanFactoryInitialization(beanFactory):初始化所有剩下的单实例bean,核心方法是preInstantiateSingletons(),会调用getBean()方法创建对象;
    • ⑫ finishRefresh():发布BeanFactory容器刷新完成事件:

    8、BeanFactory和ApplicationContext有什么区别?

            BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。

    (1)BeanFactory是Spring里面最底层的接口,是IoC的核心,定义了IoC的基本功能,包含了各种Bean的定义、加载、实例化,依赖注入和生命周期管理。ApplicationContext接口作为BeanFactory的子类,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:

    • 继承MessageSource,因此支持国际化。
    • 资源文件访问,如URL和文件(ResourceLoader)。
    • 载入多个(有继承关系)上下文(即同时加载多个配置文件) ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。
    • 提供在监听器中注册bean的事件。

    (2)①BeanFactroy采用的是延迟加载形式来注入Bean的,只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能提前发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。

            ②ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。 

            ③ApplicationContext启动后预载入所有的单实例Bean,所以在运行的时候速度比较快,因为它们已经创建好了。相对于BeanFactory,ApplicationContext 唯一的不足是占用内存空间,当应用程序配置Bean较多时,程序启动较慢。

    (3)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。

    (4)BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader。

    9、Spring Bean的生命周期?

    简单来说,Spring Bean的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate  --> 初始化 Initialization  --> 销毁 Destruction

    但具体来说,Spring Bean的生命周期包含下图的流程:

    (1)实例化Bean:

    对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。

    对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。

    (2)设置对象属性(依赖注入):实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefinition中的信息 以及 通过BeanWrapper提供的设置属性的接口完成属性设置与依赖注入。

    (3)处理Aware接口:Spring会检测该对象是否实现了xxxAware接口,通过Aware类型的接口,可以让我们拿到Spring容器的一些资源:

    • ①如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,传入Bean的名字;
    • ②如果这个Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。
    • ②如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传递的是Spring工厂自身。
    • ③如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文;

    (4)BeanPostProcessor前置处理:如果想对Bean进行一些自定义的前置处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。

    (5)InitializingBean:如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。

    (6)init-method:如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。

    (7)BeanPostProcessor后置处理:如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;

    以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。

    (8)DisposableBean:当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法;

    (9)destroy-method:最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

    如果对bean详细加载流程的感兴趣的读者,可以阅读这篇文章:Spring的Bean加载流程_张维鹏的博客-CSDN博客

    10、 Spring中bean的作用域:

    (1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。

    (2)prototype:为每一个bean请求创建一个实例。

    (3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

    (4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。

    (5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。

    11、Spring框架中的Bean是线程安全的么?如果线程不安全,那么如何处理?

    Spring容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体情况还是要结合Bean的作用域来讨论。

    (1)对于prototype作用域的Bean,每次都创建一个新对象,也就是线程之间不存在Bean共享,因此不会有线程安全问题。

    (2)对于singleton作用域的Bean,所有的线程都共享一个单例实例的Bean,因此是存在线程安全问题的。但是如果单例Bean是一个无状态Bean,也就是线程中的操作不会对Bean的成员执行查询以外的操作,那么这个单例Bean是线程安全的。比如Controller类、Service类和Dao等,这些Bean大多是无状态的,只关注于方法本身。

    有状态Bean(Stateful Bean) :就是有实例变量的对象,可以保存数据,是非线程安全的。

    无状态Bean(Stateless Bean):就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。

    对于有状态的bean(比如Model和View),就需要自行保证线程安全,最浅显的解决办法就是将有状态的bean的作用域由“singleton”改为“prototype”。

    也可以采用ThreadLocal解决线程安全问题,为每个线程提供一个独立的变量副本,不同线程只操作自己线程的副本变量。

    ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。而ThreadLocal采用了“空间换时间”的方式。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。

    12、Spring基于xml注入bean的几种方式:

    • set()方法注入;
    • 构造器注入:①通过index设置参数的位置;②通过type设置参数类型;
    • 静态工厂注入;
    • 实例工厂;

    详细内容请参考这篇文章:Spring中bean的注入方式

    13、Spring如何解决循环依赖问题:

    详细内容强烈建议参考这篇文章:Spring如何解决循环依赖问题

    循环依赖问题在Spring中主要有三种情况:

    • (1)通过构造方法进行依赖注入时产生的循环依赖问题。
    • (2)通过setter方法进行依赖注入且是在多例(原型)模式下产生的循环依赖问题。
    • (3)通过setter方法进行依赖注入且是在单例模式下产生的循环依赖问题。

    在Spring中,只有第(3)种方式的循环依赖问题被解决了,其他两种方式在遇到循环依赖问题时都会产生异常。这是因为:

    • 第一种构造方法注入的情况下,在new对象的时候就会堵塞住了,其实也就是”先有鸡还是先有蛋“的历史难题。
    • 第二种setter方法(多例)的情况下,每一次getBean()时,都会产生一个新的Bean,如此反复下去就会有无穷无尽的Bean产生了,最终就会导致OOM问题的出现。

    Spring在单例模式下的setter方法依赖注入引起的循环依赖问题,主要是通过二级缓存和三级缓存来解决的,其中三级缓存是主要功臣。解决的核心原理就是:在对象实例化之后,依赖注入之前,Spring提前暴露的Bean实例的引用在第三级缓存中进行存储。

    14、Spring的自动装配:

    在spring中,使用autowire来配置自动装载模式,对象无需自己查找或创建与其关联的其他对象,由容器负责把需要相互协作的对象引用赋予各个对象。

    (1)在Spring框架xml配置中共有5种自动装配:

    • no:默认的方式是不进行自动装配的,通过手工设置ref属性来进行装配bean。
    • byName:通过bean的名称进行自动装配,如果一个bean的 property 与另一bean 的name 相同,就进行自动装配。 
    • byType:通过参数的数据类型进行自动装配。
    • constructor:利用构造函数进行装配,并且构造函数的参数通过byType进行装配。
    • autodetect:自动探测,如果有构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配。

    (2)基于注解的自动装配方式:

    使用@Autowired、@Resource注解来自动装配指定的bean。在使用@Autowired注解之前需要在Spring配置文件进行配置,。在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。在使用@Autowired时,首先在容器中查询对应类型的bean:

    如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据;

    如果查询的结果不止一个,那么@Autowired会根据名称来查找;

    如果上述查找的结果为空,那么会抛出异常。解决方法时,使用required=false。

    @Autowired可用于:构造函数、成员变量、Setter方法

    注:@Autowired和@Resource之间的区别:

    (1) @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。

    (2) @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。

    15、Spring事务的实现方式和实现原理:

    Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。Spring只提供统一事务管理接口,具体实现都是由各数据库自己实现,数据库事务的提交和回滚是通过binlog或者undo log实现的。Spring会在事务开始时,根据当前环境中设置的隔离级别,调整数据库隔离级别,由此保持一致。

    (1)Spring事务的种类:

    spring支持编程式事务管理和声明式事务管理两种方式:

    ①编程式事务管理使用TransactionTemplate。

    ②声明式事务管理建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前启动一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

    声明式事务最大的优点就是不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明或通过@Transactional注解的方式,便可以将事务规则应用到业务逻辑中,减少业务代码的污染。唯一不足地方是,最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。

    (2)spring的事务传播机制:

    spring事务的传播机制说的是,当多个事务同时存在的时候,spring如何处理这些事务的行为。事务传播机制实际上是使用简单的ThreadLocal实现的,所以,如果调用的方法是在新线程调用的,事务传播实际上是会失效的。

    ① PROPAGATION_REQUIRED:(默认传播行为)如果当前没有事务,就创建一个新事务;如果当前存在事务,就加入该事务。

    ② PROPAGATION_REQUIRES_NEW:无论当前存不存在事务,都创建新事务进行执行。

    ③ PROPAGATION_SUPPORTS:如果当前存在事务,就加入该事务;如果当前不存在事务,就以非事务执行。‘

    ④ PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

    ⑤ PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则按REQUIRED属性执行。

    ⑥ PROPAGATION_MANDATORY:如果当前存在事务,就加入该事务;如果当前不存在事务,就抛出异常。

    ⑦ PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

    (3)Spring中的隔离级别:

    ① ISOLATION_DEFAULT:这是个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。

    ② ISOLATION_READ_UNCOMMITTED:读未提交,允许事务在执行过程中,读取其他事务未提交的数据。

    ③ ISOLATION_READ_COMMITTED:读已提交,允许事务在执行过程中,读取其他事务已经提交的数据。

    ④ ISOLATION_REPEATABLE_READ:可重复读,在同一个事务内,任意时刻的查询结果都是一致的。

    ⑤ ISOLATION_SERIALIZABLE:所有事务逐个依次执行。

    16、Spring 框架中都用到了哪些设计模式?

    Spring设计模式的详细使用案例可以阅读这篇文章:Spring中所使用的设计模式_张维鹏的博客-CSDN博客_spring使用的设计模式

    (1)工厂模式:Spring使用工厂模式,通过BeanFactory和ApplicationContext来创建对象

    (2)单例模式:Bean默认为单例模式

    (3)策略模式:例如Resource的实现类,针对不同的资源文件,实现了不同方式的资源获取策略

    (4)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术

    (5)模板方法:可以将相同部分的代码放在父类中,而将不同的代码放入不同的子类中,用来解决代码重复的问题。比如RestTemplate, JmsTemplate, JpaTemplate

    (6)适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式,Spring MVC中也是用到了适配器模式适配Controller

    (7)观察者模式:Spring事件驱动模型就是观察者模式的一个经典应用。

    (8)桥接模式:可以根据客户的需求能够动态切换不同的数据源。比如我们的项目需要连接多个数据库,客户在每次访问中根据需要会去访问不同的数据库

    17、Spring框架中有哪些不同类型的事件?

    Spring 提供了以下5种标准的事件:

    (1)上下文更新事件(ContextRefreshedEvent):在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发。

    (2)上下文开始事件(ContextStartedEvent):当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。

    (3)上下文停止事件(ContextStoppedEvent):当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。

    (4)上下文关闭事件(ContextClosedEvent):当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。

    (5)请求处理事件(RequestHandledEvent):在Web应用中,当一个http请求(request)结束触发该事件。

    如果一个bean实现了ApplicationListener接口,当一个ApplicationEvent 被发布以后,bean会自动被通知。


    相关阅读:

    Spring常见面试题总结

    SpringMVC常见面试题总结

    Mybatis常见面试题总结

    MySQL常见面试题总结

    Redis常见面试题总结

    RabbitMQ消息队列常见面试题总结

    ElasticSearch搜索引擎常见面试题总结

    计算机网络常见面试题总结

    操作系统常见面试题总结

    Java基础、集合、多线程常见面试题总结

    Java虚拟机常见面试题总结

    Java常见设计模式总结

    海量数据处理的方法总结

    展开全文
  • 中文常见的停用词表 TXT文档

    千次下载 热门讨论 2016-11-27 18:26:10
    中文常见的停用词表 TXT文档
  • 常见python爬虫框架

    万次阅读 2017-07-21 16:26:34
    二、常见python爬虫框架  (1)Scrapy:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如...
    一、python爬虫框架

       一些爬虫项目的半成品

    二、常见python爬虫框架

      (1)Scrapy:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。


      (2)Crawley: 高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等


      (3)Portia:可视化爬取网页内容


      (4)newspaper:提取新闻、文章以及内容分析


      (5)python-goose:java写的文章提取工具


      (6)Beautiful Soup:名气大,整合了一些常用爬虫需求。缺点:不能加载JS。


      (7)mechanize:优点:可以加载JS。缺点:文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。


      (8)selenium:这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。


      (9)cola:一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高。
    展开全文
  • SpringMVC常见面试题总结(超详细回答)

    万次阅读 多人点赞 2018-07-08 22:51:43
    相关阅读: Spring常见面试题总结 SpringMVC常见面试题总结 Mybatis常见面试题总结 MySQL常见面试题总结 Redis常见面试题总结 RabbitMQ消息队列常见面试题总结 ElasticSearch搜索引擎常见面试题总结 计算机网络常见...

    1、什么是Spring MVC ?简单介绍下你对springMVC的理解?

    Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

     

    2、SpringMVC的流程?

    • (1)用户发送请求至前端控制器DispatcherServlet;
    • (2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler;
    • (3)处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;
    • (4)DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;
    • (5)HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑;
    • (6)Handler执行完成返回ModelAndView;
    • (7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
    • (8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
    • (9)ViewResolver解析后返回具体View;
    • (10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
    • (11)DispatcherServlet响应用户。

    • 前端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
    • 处理器映射器 HandlerMapping:根据请求的URL来查找Handler
    • 处理器适配器 HandlerAdapter:负责执行Handler
    • 处理器 Handler:处理器,需要程序员开发
    • 视图解析器 ViewResolver:进行视图的解析,根据视图逻辑名将ModelAndView解析成真正的视图(view)
    • 视图View:View是一个接口, 它的实现类支持不同的视图类型,如jsp,freemarker,pdf等等

    3、Springmvc的优点:

    (1)可以支持各种视图技术,而不仅仅局限于JSP;

    (2)与Spring框架集成(如IoC容器、AOP等);

    (3)清晰的角色分配:前端控制器(dispatcherServlet) ,请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。

    (4) 支持各种请求资源的映射策略。

    4、SpringMVC怎么样设定重定向和转发的?

    (1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"

    (2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"

    5、 SpringMVC常用的注解有哪些?

    @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

    @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

    @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

    6、SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代?

    答:一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。

    7、springMVC和struts2的区别有哪些?

    (1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

    (2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

    (3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

    8、如何解决POST请求中文乱码问题,GET的又如何处理呢?

    (1)解决post请求乱码问题:在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    (2)get请求中文参数出现乱码解决方法有两个:

    ①修改tomcat配置文件添加编码与工程编码一致,如下:

    <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

     ②另外一种方法对参数进行重新编码:

    String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

    ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

    9、SpringMvc里面拦截器是怎么写的:

    有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可:

    <!-- 配置SpringMvc的拦截器 -->
    <mvc:interceptors>
        <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 -->
        <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean>
    
        <!-- 只针对部分请求拦截 -->
        <mvc:interceptor>
           <mvc:mapping path="/modelMap.do" />
           <bean class="com.zwp.action.MyHandlerInterceptorAdapter" />
        </mvc:interceptor>
    </mvc:interceptors>

    10、注解原理:

    注解本质是一个继承了Annotation的特殊接口,其具体实现类是JDK动态代理生成的代理类。我们通过反射获取注解时,返回的也是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法,该方法会从memberValues这个Map中查询出对应的值,而memberValues的来源是Java常量池。

    11、SpringMvc怎么和AJAX相互调用的?

    通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :

    (1)加入Jackson.jar

    (2)在配置文件中配置json的映射

    (3)在接受Ajax方法里面可以直接返回Object、List等,但方法前面要加上@ResponseBody注解。

    12、Spring MVC的异常处理 ?

    答:可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

    13、SpringMvc的控制器是不是单例模式?如果是,有什么问题?怎么解决?

    答:是单例模式,在多线程访问的时候有线程安全问题,解决方案是在控制器里面不能写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal机制解决,为每个线程单独生成一份变量副本,独立操作,互不影响。

    14、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

    答:可以在@RequestMapping注解里面加上method=RequestMethod.GET。

    16、怎样在方法里面得到Request,或者Session?

    答:直接在方法的形参中声明request,SpringMvc就自动把request对象传入。

    16、如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

    答:直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。

    17、如果前端传入多个参数,并且参数都是同个对象的,如何快速得到这个对象?

    答:直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

    18、SpringMvc中函数的返回值是什么?

    答:返回值可以有很多类型,有String,ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

    19、SpringMvc用什么对象从后台向前台传递数据的?

    答:通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前端就可以通过el表达式拿到。

    20、怎么样把ModelMap里面的数据放入Session里面?

    答:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。


    相关阅读:

    Spring常见面试题总结

    SpringMVC常见面试题总结

    Mybatis常见面试题总结

    MySQL常见面试题总结

    Redis常见面试题总结

    RabbitMQ消息队列常见面试题总结

    ElasticSearch搜索引擎常见面试题总结

    计算机网络常见面试题总结

    操作系统常见面试题总结

    Java基础、集合、多线程常见面试题总结

    Java虚拟机常见面试题总结

    Java常见设计模式总结

    海量数据处理的方法总结

    展开全文
  • 常见的DoS攻击

    万次阅读 多人点赞 2019-01-26 17:06:24
    拒绝服务攻击DoS(Denial of Service):使系统过于忙碌而不能执行有用的业务并且占尽关键...实现Dos攻击,常见的方式有:TCP SYN泛洪(SYN Flood),ping泛洪(ping-Flood),UDP泛洪(UDP-Flood),分片炸弹(fragmentat...

    拒绝服务攻击DoS(Denial of Service):使系统过于忙碌而不能执行有用的业务并且占尽关键系统资源。它是基于这样的思想:用数据包淹没本地系统,以打扰或严重阻止捆绑本地的服务响应外来合法的请求,甚至使本地系统崩溃。实现Dos攻击,常见的方式有:TCP SYN泛洪(SYN Flood),ping泛洪(ping-Flood),UDP泛洪(UDP-Flood),分片炸弹(fragmentation bombs),缓冲区溢出(buffer overflow)和ICMP路由重定向炸弹(ICMP routeing redirect bomb)。

    1、TCP SYN泛洪
    TCP SYN泛洪是利用TCP建立连接时需要进行三次握手的过程,并结合IP源地址欺骗实现的。如下图:
    在这里插入图片描述
    攻击者将其自身的源地址伪装成一个私有地址向本地系统的TCP服务发起连接请求,本地TCP服务回复一个SYN-ACK作为响应,然而该响应发往的地址并非攻击者的地址(真实地址),而是攻击者伪装的私有地址。由于该私有地址是不存在的于本地服务器所在的网络的,所有本地系统将收不到RST消息(以结束这个半打开连接)。本地TCP服务接下来要等待接收一个ACK回应,但是该回应永远不会到来,该半打开连接会保持打开状态直至连接尝试超时,因此有限的连接资源被消耗了。攻击者连接请求的到来比TCP超时释放资源更快,利用一次又一次的连接请求淹没本地连接资源(如通过listen()创建的大小有限的连接队列等),以致本地服务无法接收更多的连接请求。

    Linux操作系统中的SYN cookie模块能显著的延缓SYN泛洪造成的网络资源缺失现象:在TCP服务接收到TCP SYN包并返回SYN-ACK时,不分配一个专门的数据区,而是根据这个SYN包计算一个cookie值。cookie值是一个基于SYN中的原始序列号、源地址、目的地址、端口号、密值而产生的序列号。cookie作为将要返回的SYN-ACK的初始序列号,当客户返回一个ACK包,TCP服务在根据cookie值检查该ACK包的合法性,再分配专门的数据区进行处理接下来操作。cookie的超时时间很短暂,客户端必须在很短时间内进行应答。

    echo 1 > /proc/sys/net/ipv4/tcp_syncookies 命令可以打开Linux内核的SYN cookie保护功能;需要注意一些发行版需要配置内核才能打开。

    2、ping泛洪
    攻击者通过ping发送的ICMP的echo请求消息也是常见的DoS攻击方式之一,其原理是强制让系统消耗大多数时间进行无用的应答,降低系统网络质量。主要实现的方法有:①将ping包的源地址伪装成受害者的地址并向整个主机所在的网络广播echo请求,这样的请求消息能够造成很多的响应发送的受害者机器;②通过互联网在受害者机器安装木马程序并在某时刻向某主机发送大量echo请求;③攻击者发送更多简单的ping泛洪来淹没数据连接。

    一种更为古老的攻击方式叫做死亡之ping,攻击者会发送巨大的ping数据包给受害机器,易受攻击的系统可能因此崩溃,Linux等类UNIX系统并没有此漏洞。对于受害主机来说,丢弃ping请求并不是一个很好的解决方案,因为不论是对到来的ping包做什么反应,系统或者网络依旧会被淹没在检测/丢弃数据包的过程中。

    3、UDP泛洪
    不同于TCP,UDP是无状态的,没有任何信息被维护以指明下一个期望到来的数据包,所以UDP服务更易受这些类型攻击的影响,许多站点都禁止用所有非必要的UDP端口。

    4、缓冲区溢出
    缓冲区溢出攻击是无法通过过滤防火墙进行保护的,通过覆盖程序的数据空间或者运行时的堆栈导致系统或者服务崩溃,这需要专业技术以及对硬件、系统软件的了解。举个例子,早期有服务器程序使用了sprintf()函数而被攻击者攻击,因为缓冲区溢出而使得程序崩溃,所以更为妥当的做法是使用snprintf()代替sprintf()。

    5、ICMP路由重定向炸弹
    我们知道ICMP的消息类型中的类型5告知目标系统改变内存中的路由表以获得更短的路由,以通知主机有更多的路径可用。重定向很少发源主机附近的路由器,对于连接到ISP(运营商)的住宅或商用站点来说,主机附近的路由器产生一个重定向的ICMP消息可能性非常小。如果我们主机使用静态路由且收到了重定向消息,这可能是有人在攻击我们系统,欺骗主机以转发所有流量到另一远处主机处。

    6、分片炸弹
    我们知道数据包从一个路由器沿路径(源计算机到目的计算机的路径)到下一个路由器时,网关路由器可能需要在它们进行传递到下一个网络前将数据包分切为更小的片段(超过MTU值会被分片),在这些片段里第一个分片会包含UDP或者TCP报头中的源端口号和目的端口号,接下来的分片并不包含。当数据包被分片时中间路由器不会重组数据包,数据包到达目的主机或邻近路由器时才会重新组装。

    分片炸弹的实现是构造一种非常小的数据包导致系统或者程序崩溃的操作:比如构造一个最初的分片使得UDP或者TCP的源端口和目的端口被包含在第二个分片中。许多防火墙并不检查第一个分片之后的分片,然而第一个分片由于防火墙所要过滤的信息还未呈现,所以得以通过,那么最终所有分片都在主机中得以组装。

    另外,因为中间进行分片基本上比发送更小的无需分片的数据包代价更高,所以一般会在发送在IP报头中设置了不分片标志,设置后系统会向目标主机发起连接前进行MTU发现,如果中间路由器必须对数据包进行分片那么它会丢弃数据包并赶回ICMP 3错误消息,即“需要分片”。

    展开全文
  • 常见的异常类有哪些?

    万次阅读 2019-06-01 00:21:06
    常见的异常类有哪些? 异常非常多,Throwable 是异常的根类。 Throwable 包含子类 错误-Error 和 异常-Exception 。 Exception 又分为 一般异常和运行时异常 RuntimeException。 运行时异常不需要代码显式捕获...
  • 常见的Web漏洞

    万次阅读 多人点赞 2019-10-19 11:09:30
    经常听大家提起漏洞,其实漏洞分很多种,今天我来介绍一下常见的Web漏洞有哪些吧。 1、SQL注入漏洞 介绍: SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数...
  • 常见的操作系统有哪些?

    万次阅读 2019-12-26 19:33:42
    一、常见的操作系统有哪些? 1、Windows操作系统 应用比较广泛。 2、Linux操作系统 免费使用,类UNIX 3、Unix操作系统 无界面,使用命令操作,一般安装在服务器上面。 4、Mac操作系统 苹果公司开发的,一般...
  • 常见的文件扩展名

    万次阅读 多人点赞 2019-03-01 09:45:58
    常见的文件扩展名 文本 java:java代码文件 xml:具有结构性的标记电子文件 json:轻量级的数据交换格式,层次结构简洁和清晰 conf:配置信息文件 jsp:java嵌入式网页脚本文件 phps:php的源代码文件 asp:...
  • 常见的几个凸函数与凹函数

    万次阅读 热门讨论 2019-02-24 23:34:36
    参照 《convex optimization》这本书,总结几个常见的凸函数和凹函数。 (定义域与参数都是实数)。 指数函数 eaxe^{ax}eax 为凸函数 幂函数 xax^{a}xa 在 a≥1a\geq1a≥1 或 a≤0a\leq 0a≤0 时是凸函数,在 0&...
  • 初中化学常见物质名称及化学式 金属单质: 非金属单质: 氢气 氧气 氮气 氯气 臭氧 碘 碳 硅 硫 磷 化学式: H2 O2 N2 Cl2 O3 I2 C Si S P 稀有气体: 氦气 氖气 氩气 化学式: He Ne Ar 氧化物: ...
  • 流行的字幕格式主要为ass(SubRip Text)、ssa(S Station Alpha)、srt(Advanced SubStation Alpha)、vtt(webvtt,类似于srt),不过日常中我最常见的是ass和srt,很少见到ssa字幕,如下面2张图,下载的字幕没有...
  • 常见液体表面张力表

    千次阅读 2020-08-08 19:43:06
    特此记录以备后查。 2020年8月8日
  • Linux常见面试题

    千次阅读 2019-08-15 11:49:22
    目录 Linux的体系结构 如何查找特定的文件 ...面试中常见的用法: Linux的体系结构 体系结构主要分为用户态(用户上层活动)和内核态 内核:本质是一段管理计算机硬件设备的程序(Linux启动后首先启动内核)...
  • 服务器常见问题汇总(常见故障及相应的解决方法入口) 服务器支撑着整个企业的信息数据,对公司的信息储存、业务开展、正常运作等等环节都具有着至关重要的意义。然而,服务器在日常运行过程中,由于其复杂的硬件...
  • 常见的网络攻击手段有哪些?

    千次阅读 2021-03-16 11:59:05
    那么,常见的网络攻击有哪些?防御策略是什么? 1、SQL注入攻击 SQL注入方法是网络罪犯最常用的注入手法。此类攻击方法直接针对网站和服务器的数据库。执行时,攻击者注入一段能够揭示隐藏数据和用户输入的代码,...
  • C语言面试常见问题总结

    万次阅读 2020-09-13 23:39:43
    一、列举一个指针跑飞的例子: 1、 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直...3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变
  • 英文面试常见问题及回答汇总

    万次阅读 多人点赞 2018-09-18 12:18:52
    今天给大家奉上英文面试常见问题及回答的合集,英语面试主要就是学习如何用英语回答面试常见问题,英文面试常见问题说来说去其实重要的就那么几个,所以今天分享的英文面试常见问题及回答大家只要知道其套路,然后...
  • FAQ(常见问题解答)

    万次阅读 2018-09-30 08:59:44
    FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”。FAQ是当前网络上提供在线帮助的主要手段,通过事先组织好一些可能的常问问答对,发布在网页上为...
  • 常见的JVM

    万次阅读 2019-07-23 18:35:23
    补充一下常见的JVM:   Hotspot:官网上下的基本都是这个,免费的。 J9t:IBM的,商用的需要和IBM的其他软件绑定,比如webSphere。 Zing VM:这也是收费的,而且很高,垃圾回收做的很牛...
  • 常见的五个编译时异常:(解释来自JDK 1.6 API) 除非有特别说明,以下所有异常的父类是Exception 1.SQLException :提供有关数据库访问错误或其他错误的信息的异常。 ( 比如SQL语句写错,访问的表不存在,连接...
  • 几种常见的网络协议

    万次阅读 多人点赞 2019-04-17 23:02:10
    常见的网络协议有:TCP/IP协议、UDP协议、HTTP协议、FTP协议、Telnet协议、SMTP协议、NFS协议等。 TCP/IP 协议 传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的...
  • 常见分辨率归纳总结

    万次阅读 2018-01-11 23:29:30
    4:3 是最常见屏幕比例,从电视时代流传下来的古老标准。在近代宽屏幕兴起前,绝大部分的屏幕分辨率都是照着这个比例的。 VGA(640x480) - 「VGA」 其实本来不是个分辨率的规格,而是 IBM 计算机的一种显示标准。在...
  • AD原理图导入到PCB文件中出现的常见错误 1、出现 unknow pin 报错 报错可能出现的问题: 1)没有封装 2)封装引脚的网格号确实 3)管脚号不匹配 2、
  • 常见的几种RuntimeException及其详解

    万次阅读 2018-04-24 09:36:26
    一般面试中java Exception(runtimeException )是必会被问到的问题常见的异常列出四五种,是基本要求。更多的。。。。需要注意积累了 常见的几种如下: NullPointerException - 空指针引用异常...
  • 常见算法的时间复杂度

    千次阅读 2019-06-30 17:12:47
  • MySQL常见的数据类型

    千次阅读 2018-09-27 08:36:42
    MySQL的常见数据类型 数据类型是什么? 数据类型是列、存储过程的参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。  有一些数据是要存储为数字的,数字当中有些是要存储为...
  • java中的常见异常

    千次阅读 2018-07-29 09:18:38
    5、请写出你最常见的 5 个 RuntimeException 6、throw 和 throws 的区别 7、final、 finally、 finalize 的区别? 1、java中异常分为哪些种类?     1. 按照异常需要处理的时机分为编译时异常(...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,833,085
精华内容 1,133,234
关键字:

常见