1、1、servlet 执行流程客户端发出 http 请求,web 服务器将请求转发到 servlet 容器,servlet 容器解析 url 并根据 web.xml 找到相对应的 servlet,并将 request、response 对象传递给找到的 servlet,servlet 根据 request 就可以知道是谁发出的请求,请求信息及其他信息,当 servlet 处理完业务逻辑后会将信息放入到 response 并响应到客户端。2、springMVC 的执行流程springMVC 是由 dispatchservlet 为核心的分层控制框架。首先客户端发出一个请求 web 服务器解析请求
2、url 并去匹配 dispatchservlet 的映射 url,如果匹配上就将这个请求放入到 dispatchservlet,dispatchservlet 根据 mapping 映射配置去寻找相对应的 handel,然后把处理权交给找到的 handel,handel 封装了处理业务逻辑的代码,当 handel 处理完后会返回一个逻辑视图 modelandview 给dispatchservlet,此时的 modelandview 是一个逻辑视图不是一个正式视图,所以 dispatchservlet 会通过 viewresource 视图资源去解析 modelandview,然后将解析后的参
3、数放到 view 中返回到客户端并展现。3、给定一个 txt 文件,如何得到某字符串出现的次数File file = new File(“E:/test.txt“);InputStream is = new FileInputStream(file);byte b = new byte1024;int a = is.read(b);String str = new String(b,0,a).split(“);int count = 0;for(int i = 0;i ai) swap = ai;ai = aj;aj = swap;System.out.println(Arrays.toStr
4、ing(a);b)二分查找 public static int ef(int a, int tag) int first = 0;int end = a.length;for (int i = 0; i amiddle) first = middle + 1;if (tag amiddle) end = middle - 1;return 0;6、对 ajax 的理解a) Ajax 为异步请求,即局部刷新技术,在传统的页面中,用户需要点击按钮或者事件触发请求,到刷新页面,而异步技术为不需要点击即可触发事件,这样使得用户体验感增强,比如商城购物车的异步加载,当你点击商品时无需请求后台而直接动态修
5、改参数。9、父类与子类之间的调用顺序(打印结果)a) 父类静态代码块b) 子类静态代码块c) 父类构造方法d) 子类构造方法e) 子类普通方法f) 重写父类的方法,则打印重写后的方法10、 内部类与外部类的调用a) 内部类可以直接调用外部类包括 private 的成员变量,使用外部类引用的this.关键字调用即可b) 而外部类调用内部类需要建立内部类对象11、 多线程a)一个进程是一个独立的运行环境,可以看做是一个程序,而线程可以看做是进程的一个任务,比如 QQ 是一个进程,而一个 QQ 窗口是一个线程。b)在多线程程序中,多线程并发可以提高程序的效率,cpu 不会因为某个线程等待资源而进入空
6、闲状态,它会把资源让给其他的线程。c)用户线程就是我们开发程序是创建的线程,而守护线程为系统线程,如 JVM虚拟中的 GCd)线程的优先级别:每一个线程都有优先级别,有限级别高的可以先获取 CPU资源使该线程从就绪状态转为运行状态。也可以自定义线程的有限级别e)死锁:至少两个以上线程争取两个以上 cpu 资源,避免死锁就避免使用嵌套锁,只需要在他们需要同步的地方加锁和避免无限等待12、 AOP 与 IOC 的概念(即 spring 的核心)a) IOC:Spring 是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度。而 s
7、pring 的核心是 IOC 控制反转和 AOP 面向切面编程。IOC 控制反转主要强调的是程序之间的关系是由容器控制的,容器控制对象,控制了对外部资源的获取。而反转即为,在传统的编程中都是由我们创建对象获取依赖对象,而在IOC 中是容器帮我们创建对象并注入依赖对象,正是容器帮我们查找和注入对象,对象是被获取,所以叫反转。b) AOP:面向切面编程,主要是管理系统层的业务,比如日志,权限,事物等。AOP 是将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为切面(aspect),切面将那些与业务逻辑无关,却被业务模块共同调用的逻辑提取并封装起
8、来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。13、 hibernate 的核心思想a) Hibernate 的核心思想是 ROM 对象关系映射机制。它是将表与表之间的操作映射成对象与对象之间的操作。也就是从数据库中提取的信息会自动按照你设置的映射要求封装成特定的对象。所以 hibernate 就是通过将数据表实体类的映射,使得对对象的修改对应数据行的修改。14、 Struts1 与 Struts2 的区别15、 最优删除谋字符串的某个字符16、 Arraylist 与 linkedlist 的区别a) 都是实现 list 接口的列表,arraylist 是基于数
9、组的数据结构,linkedlist 是基于链表的数据结构,当获取特定元素时,ArrayList 效率比较快,它通过数组下标即可获取,而 linkedlist 则需要移动指针。当存储元素与删除元素时 linkedlist 效率较快,只需要将指针移动指定位置增加或者删除即可,而 arraylist 需要移动数据。17、 mybaties 与 ibatise 的区别18、 数据库优化a) 选择合适的字段,比如邮箱字段可以设为 char(6),尽量把字段设置为notnull,这样查询的时候数据库就不需要比较 null 值b) 使用关联查询( left join on)查询代替子查询c) 使用 unio
10、n 联合查询手动创建临时表d) 开启事物,当数据库执行多条语句出现错误时,事物会回滚,可以维护数据库的完整性e) 使用外键,事物可以维护数据的完整性但是它却不能保证数据的关联性,使用外键可以保证数据的关联性f) 使用索引,索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快的多的速度检索特定的行,特别是对于 max,min,order by 查询时,效果更明显g) 优化的查询语句,绝大多数情况下,使用索引可以提高查询的速度,但如果sql 语句使用不恰当的话,索引无法发挥它的特性。19、 Tomcat 服务器优化(内存,并发连接数,缓存)a) 内存优化:主要是对 Tomcat 启动
11、参数进行优化,我们可以在 Tomcat 启动脚本中修改它的最大内存数等等。b) 线程数优化:Tomcat 的并发连接参数,主要在 Tomcat 配置文件中server.xml 中配置,比如修改最小空闲连接线程数,用于提高系统处理性能等等。c) 优化缓存:打开压缩功能,修改参数,比如压缩的输出内容大小默认为2KB,可以适当的修改。20、 HTTP 协议a) 常用的请求方法有 get、postb) Get 与 post 的区别:传送数据,get 携带参数与访问地址传送,用户可以看见,这的话信息会不安全,导致信息泄露。而 post 则将字段与对应值封装在实体中传送,这个过程用户是不可见的。Get 传
12、递参数有限制,而 post 无限制。21、 TCP/UDP 协议22、 Java 集合类框架的基本接口有哪些a) Collection 集合接口,List 、set 实现 Collection 接口,arraylist、linkedlist,vector 实现 list 接口,stack 继承 vector,Map 接口,hashtable、hashmap 实现 map 接口23、 类加载的过程a) 遇到一个新的类时,首先会到方法区去找 class 文件,如果没有找到就会去硬盘中找 class 文件,找到后会返回,将 class 文件加载到方法区中,在类加载的时候,静态成员变量会被分配到方法区
13、的静态区域,非静态成员变量分配到非静态区域,然后开始给静态成员变量初始化,赋默认值,赋完默认值后,会根据静态成员变量书写的位置赋显示值,然后执行静态代码。当所有的静态代码执行完,类加载才算完成。24、 对象的创建a) 遇到一个新类时,会进行类的加载,定位到 class 文件b) 对所有静态成员变量初始化,静态代码块也会执行,而且只在类加载的时候执行一次c) New 对象时,jvm 会在堆中分配一个足够大的存储空间d) 存储空间清空,为所有的变量赋默认值,所有的对象引用赋值为 nulle) 根据书写的位置给字段一些初始化操作f) 调用构造器方法(没有继承)25、 jvm 的优化a) 设置参数,设置 jvm 的最大内存数b) 垃圾回收器的选择26、 高并发处理a) 了解一点高并发性问题,比如一 W 人抢一张票时,如何保证票在没买走的情况下所有人都能看见这张票,显然是不能用同步机制,因为 synchronize 是锁同步一次只能一个人进行。这时候可以用到锁机制,采用乐观锁可以解决这个问题。乐观锁的简单意思是在不锁定表的情况下,利用业务的控制来解决并发问题,这样即保证数据的可读性,又保证保存数据的排他性,保证性能的同时解决了并发带来的脏读数据问题。27、 事物的理解