据说是来自阿里的最新java面试题(技术面试)
本文来源于网络,转载过多,如有侵权还请联络作者删除。
欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。
以下面试题为个人在面试过程中所遇到的,仅供参考!如有错误,望指出。
1、servlet执行流程
用户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request、response对象传递给找到的servlet,servlet根据request即可以知道是谁发出的请求,请求信息及其余信息,当servlet解决完业务逻辑后会将信息放入到response并响应到用户端。
2、springMVC的执行流程
springMVC是由dispatchservlet为核心的分层控制框架。首先用户端发出一个请求web服务器解析请求url并去匹配dispatchservlet的映射url,假如匹配上就将这个请求放入到dispatchservlet,dispatchservlet根据mapping映射配置去寻觅相对应的handel,而后把解决权交给找到的handel,handel封装了解决业务逻辑的代码,当handel解决完后会返回一个逻辑视图modelandview给dispatchservlet,此时的modelandview是一个逻辑视图不是一个正式视图,所以dispatchservlet会通过viewresource视图资源去解析modelandview,而后将解析后的参数放到view中返回到用户端并展示。
3、给定一个txt文件,如何得到某字符串出现的次数
File file = new File( "E://test.txt" ); InputStream is = new FileInputStream( file ); byte b[] = new byte[1024]; int a = is.read( b ); String str[] = new String( b, 0, a ).split( "" ); int count = 0;for ( int i = 0; i < str.length; i++ ){ if ( "a".equals( str[i] ) ) count++;}System.out.println( count );
4、Java设计模式思想(单列模式,工厂模式,策略模式,共23种设计模式)
a) 单例模式:单例模式核心只要要new一个实例对象的模式,比方数据库连接,在线人数等,少量网站上看到的在线人数统计就是通过单例模式实现的,把一个计时器存放在数据库或者者内存中,当有人登陆的时候取出来加一再放回去,有人退出登陆的时候取出来减一再放回去,但是当有两个人同时登陆的时候,会同时取出计数器,同时加一,同时放回去,这样的话数据就会错误,所以需要一个全局变量的对象给一律人使用,只要要new出一个实例对象,这就是单例模式的应用,并且单例模式节省资源,由于它控制了实例对象的个数,并有利于gc回收。
b) 策略模式:就是将几个类中公共的方法提取到一个新的类中,从而使扩展更容易,保证代码的可移植性,可维护性强。比方有个需求是写鸭子对象,鸭子有叫,飞,外形这三种方法,假如每个鸭子类都写这三个方法会出现代码的冗余,这时候我们可以把鸭子中的叫,飞,外形这三个方法提取出来,放到鸭父类中,让每个鸭子都继承这个鸭父类,重写这三个方法,这样封装的代码可移植性强,当客户提出新的需求比方鸭子会游泳,那么对于我们oo程序员来讲就非常简单了我们只要要在鸭父类中加一个游泳的方法,让会游泳的鸭子重写游泳方法即可以了。
c) 工厂模式:简单的工厂模式主要是统一提供实例对象的引用,通过工厂模式接口获取实例对象的引用。比方一个登陆功能,后台有三个类,controller类,interface类,实现接口的实现类。当用户端发出一个请求,当请求传到controller类中时,controller获取接口的引用对象,而实现接口的实现类中封装好了登陆的业务逻辑代码。当你需要加一个注册需求的时候只要要在接口类中加一个注册方法,实现类中实现方法,controller获取接口的引用对象就可,不需要改动原来的代码,这种做法是的可拓展性强。
5、冒泡排序、二分查找
a) 冒泡
public static void mp( int a[] ){ int swap = 0; for ( int i = 0; i < a.length; i++ ) { for ( int j = i; j < a.length; j++ ) { if ( a[j] > a[i] ) { swap = a[i]; a[i] = a[j]; a[j] = swap; } } } System.out.println( Arrays.toString( a ) );}
b)二分查找
public static int ef( int a[], int tag ){ int first = 0; int end = a.length; for ( int i = 0; i < a.length; i++ ) { int middle = (first + end) / 2; if ( tag == a[middle] ) { return middle; } if ( tag > a[middle] ) { first = middle + 1; } if ( tag < a[middle] ) { end = middle - 1; } } return 0;}
6、对ajax的了解
a) Ajax为异步请求,即局部刷新技术,在传统的页面中,客户需要点击按钮或者者事件触发请求,到刷新页面,而异步技术为不需要点击就可触发事件,这样使得客户体验感加强,比方商城购物车的异步加载,当你点击商品时无需请求后端而直接动态修改参数。
7、父类与子类之间的调用顺序(打印结果)
a) 父类静态代码块
b) 子类静态代码块
c) 父类构造方法
d) 子类构造方法
e) 子类普通方法
f) 重写父类的方法,则打印重写后的方法
8、内部类与外部类的调用
a) 内部类可以直接调用外部类包括private的成员变量,使用外部类引用的this.关键字调用就可
b) 而外部类调用内部类需要建立内部类对象
9、多线程
a)一个进程是一个独立的运行环境,可以看做是一个程序,而线程可以看做是进程的一个任务,比方QQ是一个进程,而一个QQ窗口是一个线程。
b)在多线程程序中,多线程并发可以提高程序的效率,cpu不会由于某个线程等待资源而进入空闲状态,它会把资源让给其余的线程。
c)客户线程就是我们开发程序是创立的线程,而守护线程为系统线程,如JVM虚拟中的GC
d)线程的优先级别:每一个线程都有优先级别,有限级别高的可以先获取CPU资源使该线程从就绪状态转为运行状态。也可以自己设置线程的有限级别
e)死锁:至少两个以上线程争取两个以上cpu资源,避免死锁就避免使用嵌套锁,只要要在他们需要同步的地方加锁和避免无限等待
10、AOP与IOC的概念(即spring的核心)
a) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层解决对应的业务逻辑,减少代码的耦合度。而spring的核心是IOC控制反转和AOP面向切面编程。IOC控制反转主要强调的是程序之间的关系是由容器控制的,容器控制对象,控制了对外部资源的获取。而反转即为,在传统的编程中都是由我们创立对象获取依赖对象,而在IOC中是容器帮我们创立对象并注入依赖对象,正是容器帮我们查找和注入对象,对象是被获取,所以叫反转。
b) AOP:面向切面编程,主要是管理系统层的业务,比方日志,权限,事物等。AOP是将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的板块,这个板块被命名为切面(aspect),切面将那些与业务逻辑无关,却被业务板块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了板块间的耦合度,同时提高了系统的可维护性。
11、hibernate的核心思想
a) Hibernate的核心思想是ROM对象关系映射机制。它是将表与表之间的操作映射成对象与对象之间的操作。也就是从数据库中提取的信息会自动按照你设置的映射要求封装成特定的对象。所以hibernate就是通过将数据表实体类的映射,使得对对象的修改对应数据行的修改。
12、Struts1与Struts2的区别
13、最优删除谋字符串的某个字符
14、Arraylist与linkedlist的区别
a) 都是实现list接口的列表,arraylist是基于数组的数据结构,linkedlist是基于链表的数据结构,当获取特定元素时,ArrayList效率比较快,它通过数组下标就可获取,而linkedlist则需要移动指针。当存储元素与删除元素时linkedlist效率较快,只要要将指针移动指定位置添加或者者删除就可,而arraylist需要移动数据。
15、mybaties与ibatise的区别
16、数据库优化
a) 选择合适的字段,比方邮箱字段可以设为char(6),尽量把字段设置为notnull,这样查询的时候数据库就不需要比较null值
b) 使用关联查询( left join on)查询代替子查询
c) 使用union联合查询手动创立临时表
d) 开启事物,当数据库执行多条语句出现错误时,事物会回滚,可以维护数据库的完整性
e) 使用外键,事物可以维护数据的完整性但是它却不能保证数据的关联性,使用外键可以保证数据的关联性
f) 使用索引,索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快的多的速度检索特定的行,特别是对于max,min,order by查询时,效果更显著
g) 优化的查询语句,绝大多数情况下,使用索引可以提高查询的速度,但假如sql语句使用不恰当的话,索引无法发挥它的特性。
17、Tomcat服务器优化(内存,并发连接数,缓存)
a) 内存优化:主要是对Tomcat启动参数进行优化,我们可以在Tomcat启动脚本中修改它的最大内存数等等。
b) 线程数优化:Tomcat的并发连接参数,主要在Tomcat配置文件中server.xml中配置,比方修改最小空闲连接线程数,用于提高系统解决性能等等。
c) 优化缓存:打开压缩功能,修改参数,比方压缩的输出内容大小默认为2KB,可以适当的修改。
18、HTTP协议
a) 常用的请求方法有get、post
b) Get与post的区别:传送数据,get携带参数与访问地址传送,客户可以看见,这的话信息会不安全,导致信息泄露。而post则将字段与对应值封装在实体中传送,这个过程客户是不可见的。Get传递参数有限制,而post无限制。
19、TCP/UDP协议
20、Java集合类框架的基本接口有哪些
a) Collection集合接口,List、set实现Collection接口,arraylist、linkedlist,vector实现list接口,stack继承vector,Map接口,hashtable、hashmap实现map接口
21、类加载的过程
a) 遇到一个新的类时,首先会到方法区去找class文件,假如没有找到就会去硬盘中找class文件,找到后会返回,将class文件加载到方法区中,在类加载的时候,静态成员变量会被分配到方法区的静态区域,非静态成员变量分配到非静态区域,而后开始给静态成员变量初始化,赋默认值,赋完默认值后,会根据静态成员变量书写的位置赋显示值,而后执行静态代码。当所有的静态代码执行完,类加载才算完成。
22、对象的创立
a) 遇到一个新类时,会进行类的加载,定位到class文件
b) 对所有静态成员变量初始化,静态代码块也会执行,而且只在类加载的时候执行一次
c) New 对象时,jvm会在堆中分配一个足够大的存储空间
d) 存储空间清空,为所有的变量赋默认值,所有的对象引用赋值为null
e) 根据书写的位置给字段少量初始化操作
f) 调用构造器方法(没有继承)
23、jvm的优化
a) 设置参数,设置jvm的最大内存数
b) 垃圾回收器的选择
24、高并发解决
a) 理解一点高并发性问题,比方一W人抢一张票时,如何保证票在没买走的情况下所有人都能看见这张票,显然是不能用同步机制,由于synchronize是锁同步一次只能一个人进行。这时候可以用到锁机制,采用乐观锁可以处理这个问题。乐观锁的简单意思是在不锁定表的情况下,利用业务的控制来处理并发问题,这样即保证数据的可读性,又保证保存数据的排他性,保证性能的同时处理了并发带来的脏读数据问题。
25、事物的了解
a) 事物具备原子性,一致性,持久性,隔离性
b) 原子性:是指在一个事物中,要么一律执行成功,要么一律失败回滚。
c) 一致性:事物执行之前和执行之后都处于一致性状态
d) 持久性:事物多数据的操作是永久性
e) 隔离性:当一个事物正在对数据进行操作时,另一个事物不可以对数据进行操作,也就是多个并发事物之间相互隔离。
26、Struts工作流程
a) 用户端发出一个请求到servlet容器
b) 请求经过少量列过滤被filterdispatcher调用,filterdispatch通过actionMapper去找相对应的action。
c) Actionmapper找到对应的action返回给filterdispatch,dispatch把解决权交给actionproxy
d) Actionproxy通过配置文件找到对应的action类
e) Actionproxy创立一个actionIinvocation的实例解决业务逻辑
f) 一旦action解决完毕,actioninvocation负责根据stuts.xml的配置找到对应的返回结果。返回结果通常是jsp页面。
学习一个知识,先要知道为什么需要,也就是问题为什么会出现,再去处理,再怎样运用这个知识。
好了本文就说到这里,提前预祝各位广大同仁找到自己满意的工作,假如对于面试有少量迷茫,对于自身工作几年遇到瓶颈期了,欢迎加入我们同仁交流学习共同进步群:908676731 点击加入群内有收集整理的一大波面试真题以及少量Java技术知识点剖析教程,还有少量一线大牛来解析剖析行业行情。
欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 据说是来自阿里的最新java面试题(技术面试)