java面试摘要

java面试摘要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
1、spring的缓存,mybatis缓存
a、基于注解的方式 三种注解
b、mybatis分为一级session和二级缓存mapper
c、采用LRU算法(近期最少使用) http://www.iteye.com/topic/1112327/ 对缓存并发同步采用jdk的ReadWriteLock 读写锁
源码:mapper调用、代理mapper调用、mapper的方法、sqlsession、缓存(二级没有到一级,一级没有到数据库搜)
2、介绍下dubbo。A服务调用B服务,B服务又调用C服务,这种情况怎么办
client一个线程调用远程接口,生成一个唯一的ID(比如一段随机字符串,UUID等),Dubbo是使用AtomicLong从0开始累计数字的
将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object
向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)
将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去
当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对 象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。
服务端接收到请求并处理后,将结果(此结果中包含了前面的ID,即回传)发送给客户端,客户端socket连接上专门监听消息的线程收到 消息,分析结果,取到ID,再从前面的ConcurrentHashMap里面get(ID),从而找到callback,将方法调用结果设置到 callback对象里。
监听线程接着使用synchronized获取回调对象callback的锁(因为前面调用过wait(),那个线程已释放 callback的锁了),再notifyAll(),唤醒前面处于等待状态的线程继续执行(callback的get()方法继续执行就能拿到调用结果 了),至此,整个过程结束。
循环依赖: check="false" 来不检查依赖
3、JVM监控工具有哪些,区别又是什么(如能追上各个命令的使用监控,显得更好),如何调优的(就那么几个内存参数和GC参数什么时候配置什么样的)?如何定位问题的?(就说各种命令,gc日志,快照,监控工具)
1、jstack 可以定位到具体的线程堆栈,定位cpu冲高 结合top
2、jmap查看堆内存使用情况
3、jstat统计堆的使用情况
4、vivalueVM MAT
4、GC日志 PrintGCDetails 每次GC记录日志
4、使用过Solr?说说(有面试特意想听从luence发展而来的可独立部署)
5、用过哪些MQ,各个MQ的区别不同点在哪(阿里还问了协议;采用哪种语言开发的也说说比较好,因为一些面试为了好跟踪问题确实考虑了这一方面),总之,多说为益,再就是apache新一代推出的MQ:apollo说说完全是加分项阿里面试者也不知道
6、根据你做过的东西,让你说说某一功能或者模块
7、java8了解过吗(阿里问的,时间API,集合的处理,lambda怎么用的说说,函数式编程,很多集合底层代码都有变动能详细说出来加分如hashMap,集合底层代码变动网上是没有的别查了,看JDK7,8,9源码就行)(本人建议最好把JDK7,8,将要推出的9各种新特点熟记并全部动手编写下,9暂时不能编写呢),JDK9特性说上绝逼加分,他也很可能不知道,再就是CMS+新生代并行收集器JAVA8不建议使用了(很少有面试官知道),java9淘汰掉了还有永生带被元空间代替即使阿里他也不知道绝逼加分。
8、说说memcached(直接上原理,说分配的过程,再说注意点优缺点,和哈希一致算法能联系起来更好,前提一致算法要理解要能用代码实现,否则面试着好追问,你要不懂到起反作用了)
9、有几种锁,各个区别,多说有益,多说上底层的更好,阿里还问了原理
10、sleep和await()的区别(补充上condition给自己加分)
condition实例被绑定到一个Lock对象上,通过newCondition()来达到这个目的. condition提供三个方法来达到同步;await(),类似wait() sginal() 类似notify
signalAll()类似notifyAll
11、线程池说说几种(最好搞懂源码里的原理起码用的哪些队列能说说各自的使用场景说说都是加分的地方,有什么注意点,什么keepalivatime其他的什么的细的问题,多多益善)
12、哪些锁,不同的地方在哪(说的越多越详细越深越好)
13、Threadlocal,上来说原理,再举个例子用用哪些情况为益
14、线程池线程池如何解决死锁问题如何诊断,一定要说上具体命令如何定位阿里还特意追问的(从避免这种情况出发说如定时锁,锁粒度等再谈一些监控工具和命令,诊断啥的都会是加分)
15、常见的序列化方式(面试官想让你说hession,多说为益)
16、mysql与mongoDB如何选型,什么时候用谁
17、A,B两个线程同时启动,但让A结束后B在结束,如何实现(多种,多说为益,他想问join,其他很多方式一些面试官都不知道绝对加分)
18、redis中wacth之后,之后有事务提交未执行,返回信息吗,返回什么
19、memcached和redis的区别,很多,把重点说出来,及各自优缺点,从原理上分析对比必是加分项可能redis原理他不懂的,几乎家家公司必问
20、mongoDB的干什么的(在说说内存文件映射引擎,持久化的2个过程必是加分项)
21、python了解吗,主要用来做什么,实现爬虫能实现吗(爬虫技术知道的话多扯些有益而无害)
22、JVM的各个带说说(说的越详细越好各个参数都说上什么情况下怎么设置参数更好,和GC结合起来必加分),JVM的GC为什么选择分带收集(最好各个算法说上,为什么这个带使用这个,和G1的各个方面扯上必装逼成功加分因为几乎他也不懂,因为G1也是采用化整为0的这种分开治理的思想)
23、ngnix,正向代理,反向代理,阿里特意问了ngnix原理和apache的区别以及出个问题故意让你答和lua脚本结合,然后会继续问你会不会写?ngnix与tomcat的区别
24、zookeeper干什么的说说(多说为益扯上补充上如何实现分布式锁,同步流程,watcher机制代码流程选举算法绝对装逼99分),分布式锁怎么实现(额外说上尽可能避免分布式锁怎么避免为什么避免绝逼加分)。阿里直接让说了选举算法(描述大体过程和关键点即可不需要太详细了)
25、redis两种持久化方式(过程,优缺点最好说上)
26、复合索引的使用,什么时候走什么时候不走,举例
27、如何实现session共享
28、多线程下如何实现唯一ID(多种技术,多说为益,越高大尚越好)
29、js闭包
30、说说我游览器输入www.baidu.com之后怎么一个数据传输过程,主要考网络模型
31、7层模式都是那几个,有哪些协议,怎么传输的,丢包问题,粘包问题,楚楚街特意问的
32、java里有哪些集合接口,这些集合的区别是什么,说的越多越深越好,再就是LinkedList的扩容机制,hashmap的扩容机制,注意JDK6,7,8好像都有变化说上绝逼加分项因为他也不知道也没注意过只是停留在JDK6上那个机制。
33、java有几种基本类型,挑出一种多大字节,取值范围,一个汉字多大空间占(注意根据不同编码说而且不同的汉字如复杂汉字就特殊也是加分点我是根据UTF-8,还追问了GBK)
34、sql执行的过程说说(当时我只说了是9个过程,但具体记不清了,而且会有几个过程缓存住)
35、什么是笛卡尔积,一个SQL语句where后边有很多and和组后group,limit怎么执行的具体说说
36、设计模式你熟悉哪些,然后挑出几个来说说具体怎么设计(最好能画类图,有6大关系搞懂,扩展说上都是加分项,再想加分,就说对某个模式如单例有很多种最牛逼的一种是哪个牛逼的面试官有时也不知道)
37、说说mybatis的原理,如果让你设计持久层,你会怎么设计(本人从扩展、灵活、性能几方面切入的)
38、让你画架构,各种负载集群的那种,特意问如果没有f5怎么着
39、秒杀中超卖问题有多种方式实现让说说(阿里那本书和一些博客中介绍的很多)
40、各种GC算法一定要熟记整个过程一丝不挂的搞熟练,阿里让画画各个过程,很多都问为什么这么做,为什么分带收集(按我前边说的,把G1具体过程捎带扯上绝逼加分因为他们很少懂)
41、一些算法递归,二叉树都要懂,经常性的会面试的差不多了最后问你些数据结构方面熟悉吗,自己要会园上。
42、100阶乘几个零思考会快速回答上来(面试第一次完全卡住了,主要是否看真那么钻研问题,阿里的,其实想想也挺简单,只不过那种场景让你快速答出我是思维有点乱了)
43、内存资源很有限,但是相同的操作不断的分配和释放内存,内存已经被这种频繁的操作被分配很多了,怎么优化(说实话,题目我也没真正搞懂说了下缓存区他说是一方面说其他的什么多线程看样子不是那样的,阿里的)
44、很大的字符串文件,怎么统计某个字符串出现的频率(其实考你拆分思想用多线程去处理,具体怎么拆分阿里的人也只说用脚本说主要考你拆分的思想,说让JAVA API和Guava处理这种简短字符串情况的API绝对是加分的)
45、Guava用过哪些API,具体说说
46、JVM的各个带说说画画,说的越具体越好,结合上调优和GC,各个命令和参数配置绝逼加分,越细越好,细的他都不知道必加分(阿里的人具体还追问了参数怎么写辛亏我知道常见就那几个)
47、倒水问题,5升和3升如何称出4升水,其他技术都回答的差不多最后问的逻辑题
48、mysql中2个引擎的区别,几乎家家必问
49、mysql中char与varchar的区别,什么情况下用char比较好,int(5)类型字段如果存的数据超出大小会怎么样
50、悲观锁、悲观锁解释解释,还有脏读和什么读一堆挂读的概念问我怎么理解他们,醉了,还有事务ACID分别说说,什么叫原子性,什么叫一致性,事务的隔离级别哪几种
51、redis的事务,watcher,当watcher事务提交失败会返回信息吗,返回什么信息
52、连接池用过哪些,阿里特意问了druid的特点(特点好多,多说为益),为什么采用连接池
53、dubbo的整个调用过程,让画画,就是那4个,服务端启动注册消费端订阅那个,RPC的过程最好能顺口说出加分项。还有问dubbo服务端和消费端都配置了那个生效?dubbo里的jetty干啥用的?
54、zk除了做分布式锁和注册中心,还能用来干啥
55、重载和重写的区别,越详细越好,说的越多越好
56、接口和抽象类区别,越详细越好,及为什么需要抽象类
57、时间片解释下,上下文切换解析下,什么情况下会影响上下文切换,怎么避免过多的上下文切换
58、一个线程,从连接池里获取一个连接connection后,然后这个线程开辟了2个子线程,把这个connection传给它俩个,提交数据会有影响吗,为什么(现在想想自己解释的有点牵强,应该从事务的传播行为和级别入手,也可能其他,肯定面试官自己使用不当遇到的bug问题,如有合理解释的或者特意能做了实验的,一定要告诉大家一声)
59、什么叫复制构造函数,构造函数的重载
60、JVM的内存分配?(要熟记,越细越好)
61、TCP的三次握手四次拜拜要熟记
62、浮点类型为什么有时候不精确,详细说出来,怎么解决
63、int类型在32位和64位有什么不同
64、zk分布式锁具体怎么实现(58,美团的都问了,最好亲自用代码编写下,思路搞懂)
65、给一个字符串类型的数字,不调用java直接转的API写一个方法转换出来(58的不知道那个技术老大想考啥思路就是转字符数组利用ASSII编码,问他弄这个干啥他也不说)
66、给我几张表,写几个个SQL(我之前利用子查询,后来他说不利用子查询一条sql查出来,其实就是连接查询group,和count然后再利用统计的数过滤下,其中count(*)和count(1)和面试官争辩了起来,他也不确定后来就过了,美团的)
67、写个单例模式(其他有很多种,我也知道他想考啥,但是想加分,写最好的2点兼顾的利用私有静态内部类,网上提到的很少,优化书中的,面试官认为我是错的让我确定下,后来给他讲通了)
68、熟悉哪些设计模式(然后让你简单说说,58让写的代理,把各个类图之间的关系说清楚及接口的设计加分的)
69、代理有几种?静态代理和动态代理有什么区别?什么情况下用什么具体说说?
70、让我说下OOP里的单一原则的定义(他说这个定义非常重要,非要我说出定义),我拿出具体的设计实例说明哪些地方设计体现单一原则(他还是让说定义,美团的,醉了,定义我肯定没仔细推敲过,大家可以推敲下)
71、JVM的内存分配,内存溢出,内出调优,GC调优,GC算法,G1收集器,还有参数常用参数名(美团的那个人一直让我说哪个具体参数名字,我说JVM虚拟机参数列表一查就知道了知道那是工具就行,我看他的样子可能也没记住,还是拿着笔记本查呢,醉了,最好几个常用的记住看样子也是有意而无害的我都记个大概的样子),如何调优如何具体优化举例子越细越好什么阀值具体到什么GC算法在什么情况下怎么设置他的什么样的参数越细越好,还有问题诊断,具体怎么定位,最好前提你说上基于java的哪个版本规范,哪个虚拟机,因为不同版本不同虚拟机肯定有所不同,能说出来必加分(呵呵,装的你多严谨,如装逼成功肯定加分)
72、NIO与IO的区别,什么情况下用谁,具体说说例子
73、dubbo支持几种协议,协议的区别,容错机制,什么情况用什么,RPC的过程,dubbo是如何实现负载均衡的(源码级别),负载均衡策略,改过监控的中心吗,如何优化调用,怎么部署,zk挂掉3个挂掉2个会怎么样,为什么,看过dubbo源码吗
74、哈希一致算法具体描述下(最后自己用java实现下或理解了),为什么要用hash一致算法
75、在CPU不考虑的情况下内存有限的情况下计算最大并发数大概多少(linux下有很多注意事项会约束给他说说他可能也想不到都是加分的,然后再让你不考虑这些因素怎么计算说说,也和系统位数有关,也有对应的计算公式)
76、在内存不考虑,8核CPU,挂起时间(好像是单个线程执行任务时间)30ms,CPU满负载最大多少并发(其实他当时也没说清楚,后来追问下补充了响应时间1S)
77、给你写出2个数组,在纸上写个方法查出相同的元素(想考细节,把大体写出来之后给他说明一些特殊情况的处理),继续追问如何优化这个方法(说说自己的见解,如相同元素很多的情况用什么瞎吹呗),最好把JDK,commons,guava的相关API说下再说名你的理由啥的都是加分的
78、linux命令用过哪些,说的越高大尚越好,常用的肯定要说上
79、乐观锁问题,一般不直接问,给你说个分布式场景(用时间戳版本号啥的解决)
80、CAS知道吗,说说(多多益善,说上ABA问题必加分有时面试官也不知道,扯上volite和锁区别什么场景下用谁必加分)
81、让画ER图,时序图
82、一个类里几个静态方法和几个普通方法,几个静态方法里有几个加synchronized,普通方法里有几个也加synchronized,这4种方法组合情况各个情况下同一个实例在多个线程里用到时阻塞不阻塞问题
83、tomcat里有几个端口的配置?同一个tomcat能同时配置2个端口吗?
84、tomcat里如何禁止服务端自动创建session
85、servlet和过滤器,监听器,servlet启动顺序是什么样的
86、spring的核心配置文件名是什么,具体描述一下里边的重要的配置,spring和mybatis集成的后的配置文件又怎么配置,需要配置什么,spring和springMVC的区别
87、mybatis的配置文件怎么组织的,如何配置
88、spring的AOP和IOC具体描述下,干什么的,怎么实现解偶的,它们是底层通过什么实现的
89、类加载有哪些,机制是什么,类初始化的时机(那4个)有哪些
90、一个对象为null一定会被GC掉吗(肯定不会,至少有2个过程,给他描述下,越细越好,他可能也不知道,楚楚街问的)
91、final static 和static初始化都是什么时候初始化的?
92、静态代码块和普通代码块有什么区别,什么场景下使用
93、shell脚本写过吗?(就一家问到了就简答追问了下开头的声明干啥的)
94、看过哪些书籍,平常怎么学习这些知识的
95、conncurrentHashMap和hashmap的区别(6,7,8可能都所不同,能说出来必加分他可能也没注意过,不说也没关系)
96、mongoDB,redis分片,主从,有问到,问到了都是简单问问,一般都是自己补充上其他东西,最好都要清楚,加分的,也以防万一,redis持久化2种方式有哪些问到有,然后你追加一些注意事项
97、平常你遇到的一些不规范性问题,能再优化的问题,具体说说例子
98、ngnix具体怎么配置切换服务器和负载均衡策略,说说具体的配置地方
99、那些并发工具就不说了,最好都知道干啥用的,问到也有但是很少不知道到问啥
100、netty和mina到时有提到的,但是就是简单问问知道吗,用过吗这些问题,当然自己对它们越熟练越清除越好
101、tomcat具体在哪配置连接池,能配置哪些信息
102、java反射类的私有方法与普通方法相比,需要多处理什么?
103、java中有哪些集合?这些集合有什么区别,arrayList和HashMap的扩容机制(集合说的越多越好,各个集合都有什么区别,什么场景下用什么,注意些什么,有些6,7,8有不同,能说出来更好)
104、zk有哪几种类型的节点,又有哪些监听事件,具体说说?
105、用过哪几种抓包工具?报文结构?
106、如何中断一个线程?线程在那种状态才可以中断?
分库分表原则,具体什么场景采用什么举例子,分布式事务问题,AIO,索引原理等还有很多问题没问到,不过如果熟练掌握以上知识,即使一些其他的不懂也会是瑕疵不影响整体印象,再结合下边几点作为补充,技术面试国内任何一家公司包括阿里都是没问题的,吹的有点大,只适合装逼人士,一本正经者吹毛求疵者勿看。如果你已面试,欢迎补充面试技术点,你我码农共同进步!
1、Spring.mvc的优势,原理,流程
2、Mybatis的原理优势
3、集合里面那些对象的原理
4、扩容原理,特别是map的底层
5、Hashmap、Hashtable和cocurrentHashMap的区别,要讲出它们各自的实现原理才行,比如Hashmap的扩容机制、cocurrentHashMap的桶分割原理、多线程安全性。
6、几种造线程池的方法,区别
7、Rpc原理
8、Nio和netty,常用的接口
9、Redis和数据库的持久化的
10、Memached过程和原理
11、多线程时间复杂度
12、Redis做队列的原理
13、zk做订阅的原理,底层
14、Juc里面的锁原理
15、实现自己的hashmap
16、treemap红黑树
17、jvm调优
18、jvm内存模型
19、类加载器机制
20、数据库索引
21、数据破坏索引
22、手写快排
23、js闭包
24、nio是否了解 阻塞之后通知机制是怎样的?
25、Java 的序列化做什么用的 序列化id会出现哪些问题?
26、 在Java中Executor和Executors的区别?
27、 为什么使用Executor框架比使用应用创建和管理线程好?
28、怎么通过linux命令去分析jvm里面那个线程阻塞了
29、Java中用到的线程调度算法是什么?
30、什么是多线程中的上下文切换?
31、classloader结构,是否可以自己定义一个java.lang.String类,为什么? 双亲代理机制。
32、有没有做过jvm内存调优,如何做的,举例子,用过哪些工具?
33、Java中的volatile关键是什么作用?怎样使用它?在Java中它跟synchronized方法有什么不同?
34、面试官从简历里抽了一个较感兴趣的项目,让把项目简单介绍了下,针对项目问了几个技术问题
35、 介绍Java中垃圾回收机制,程序员平时需要关注这个吗?为什么?请举例说明。
36、数据库隔离级别介绍、举例说明。
37、override和overload的区别。
38、求二叉树的最大距离(即相距最远的两个叶子节点),写代码。
39、 两个栈实现一个队列,写代码。
40、 你觉得你的优势是什么?有什么技术薄弱点吗?
41、数据库sql调优,慢sql定位
42、索引有哪几种,区别,使用场景
43、mysql引擎,哪几种,区别使用场景
NIO原理,内存模型,GC,锁机制
传统IT外企干了8年,两年前转互联网的,面的和被面的都不少。
这几天项目空档期,闲的蛋疼,随手写的, 不喜勿拍。
1. 算法基础
写java的基本上都是做应用系统的,用到算法的机会几乎没有,所以一般不会考。但是如果工作年限比较长,保不齐面试官怀疑你的编程能力,故意要考考,所以快排、堆排、逆转链表、遍历二叉树之类的基础还是复习复习吧。
如果面的是bat核心部门,担心碰见装逼人士的话,也可以提前复习下《编程之美》之类的。
2. java基础
hashmap面试官最喜欢考,一定要搞明白原理。
treemap知道就可以,应该没人闲的蛋疼考红黑树。
threadlocal面试官也喜欢考,要搞明白原理
反射、动态代理、ioc、aop复习下吧,几乎必考
nio、aio几乎都会问,抽空写写例程,知道netty mina
class loader: 知道双亲委派,如果知道tomcat、jetty class loader异同更佳
3. gc
gc很多面试官都喜欢考
面试前背熟各种gc算法的区别,理解原理。
G1很多面试官自己都不明白,没时间就不用管。
4. 高并发
传统IT一般接触不到高并发,不过没关系按下面说的做,应付面试问题不大
把java.util.concurrent下面所有的包和类通读一遍,理解原理、记住核心代码、写例程,网上有很多concurrent相关类原理解析的文章,对着文章看源代码理解起来问题不大。
有些类代码很复杂比如aqs,看不明白就算了,也不用太花功夫,记住原理即可,因为大部分面试官也不明白。
一定要写例程,例程最好跟你的业务能扯上一点点关系,这样面试的时候就是你实际项目里面的代码了。
面试官喜欢考的类有:ConcurrentHashMap、读写锁、Condition、线程池、Barrier、CountDownLatch、Callable、BlockingQueue
5. hdfs和mr
传统IT一般也接触不到,如果不想准备就算了,如果想准备的话,就在自己的开发机上撘3个linux虚机, 按照网上的教程自己一步一步撘一个hadoop环境出来,然后找几个实际业务中生成出来的log,写几个mr程序处理一下。
面试的时候就可以很谦虚的说,实际项目里面用过,但是用的不多
6. application server
websphere、weblogic、jboss之类的就不用准备了,应该没人问你这些啦。
有时间的话,看看tomcat和jetty的源代码,重点看线程模型和io,这将是一个很好的加分项
7. 数据库
oracle、sybase、db2不会有人关心了,如果之前没用过mysql的话,找本介绍innodb原理的书好好通读一遍吧。
理解myisam和innodb的区别
理解关系型数据库索引的原理,理解一些简单的索引优化的原则。
面试官很喜欢给出一堆where子句,考索引、复合索引什么情况下起作用
8. 缓存
一致性哈希很多面试官喜欢考,提前准备下吧。
9. ssh框架
这些没搞过就没搞过吧,这种框架层面的东西,对于一个有经验的java码农,学起来也就是分分钟的事情。
不过你也可以说这些我没用过,但是我知道原理,然后说一堆动态代理、cglib的原理出来,也是加分。
希望这些对传统IT想转互联网的朋友有帮助。
not in 与 not exists 有什么区别? in查询不对null进行处理
二分,递归,还有冒泡,就差不多了
作者:头条号 / 技术领地
链接:http://toutiao.com/a6316391446829072641/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。