1、服务器为什么要使用IO复用?
传统的BIO效率低,无法处理并发
NIO效率虽然比BIO高一些,但是在执行轮询操作的时候比较占用内存
IO多路复用,最主要是服务器同时可以处理监听套接字和连接套接字,可以不用多创建一个线程和进程,直接用io复用提高程序的效率,复用一个或几个线程,用一个或一组线程处理多个IO操作,减少系统开销小,不必创建和维护过多的进程/线程。
2、为什么要用servlet? servlet如何实现的以及其推导过程?
还没引进servlet之前是把所有的处理业务都写在一个线程里面,这样导致代码冗余,很不利于我们后期的代码维护和阅读,于是我们将处理业务进行封装,servlet只负责处理业务,这样就互不影响,降低每种业务代码之间的耦合性,提高每种业务代码高内聚,有利于团队之前的开发,同时利于后期的维护和阅读。
推导与实现过程:
3、简述Service的作用?
Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务。业务模块的逻辑功能设计,和DAO层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进行业务逻辑应用的处理。
好处:封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。
4、为什么要用DAO?
DAO层叫数据访问层,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作。
好处:封装DAO层的数据库的独立性和重复利用性,起到分离数据与逻辑界面,起到低耦合,高内聚。
5、为什么要使用连接池?
(1)连接池的连接都是创建好的、可以重复使用的,获取后可以直接访问数据库,因此可以大大减少连接创建时间。
(2)当使用连接池时,随用随取不用等待,大大提高获取数据的效率。
(3)如果不使用连接池,每次访问数据库都需要创建一个连接,这样系统的稳定性受系统的连接需求影响很大,很容易产生资源的浪费和高负荷异常,连接池能使性能最大化,将资源利用控制在一定水平下。
(4)连接池能控制连接池中的连接数量,增强了系统在大量用户应用时的稳定性。
6、为什么要使用线程池?
(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
(2)提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源开销,解决资源不足的问题。如果不使用线程池,有可能会造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。
7、简述你对连接池的理解?
其实连接池就是一个很好的编程思想,先创建好一定数量的连接,在内存里面等待,不需要等到需要时再去创建,这样不仅浪费不必要的开销,还降低了读取数据的效率,可以随要随取的原则,不仅降低了资源的开销,也提高了响应速度和效率,作为一个程序员来说我们需要的做的就是提高代码的执行效率,降低对资源的开销,这也符合一个程序员的编程思想,这种编程思想也可以提高我们的编程效率,例如:在http的请求连接的三次握手,我就是使用连接池思想,大大提高了请求时间和效率。
8、简述你对线程池的理解?
其实线程池就是一个很好的编程思想,先创建好一定数量的线程,在内存里面等待,有任务就指派一个线程去接应处理事件,不仅降低了资源的消耗,也提高了响应速度,作为一个程序员来说我们需要的做的就是提高代码的执行效率,降低对资源的开销,这也符合一个程序员的编程思想,这种编程思想也可以提高我们的编程效率。
9、简述注解和反射的作用?
注解可以作为一种特殊标记的存在,这些标记可以在编译、类加载、运行时被读取,并执行相对应的处理;
注解可以像修饰符一样被使用,可以用于修饰包、类、构造器、方法、成员变量,参数,局部变量的声明,这些信息可以被保存到注解的键和值里面;
反射通过Class文件创建这个类的对象,通过Class文件查找这个类的所有属性和注解;
根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射——运行时动态加载需要加载的对象;
使用反射机制,代码可以在运行时装配,提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需硬编码目标类;
注解是一种趋势,一定程度上可以理解:框架=注解+反射+设计模式