本人是作java开发的,这是我参加58,搜狐,搜狗,新浪微博,百度,腾讯文学,网易以及其余一些小的创业型公司的面试常被问的问题,固然有重复,弄清楚这些,相信面试会轻松许多。html
1. junit用法,before,beforeClass,after, afterClass的执行顺序java
2. 分布式锁 https://blog.csdn.net/zxp_cpinfo/article/details/53692922
3. nginx的请求转发算法,如何配置根据权重转发
4. 用hashmap实现redis有什么问题(死锁,死循环,可用ConcurrentHashmap)mysql
系统中在用hashmap做为缓存,因此不得不考虑一些因素:多线程并发,最大容量,性能,以及与redis,EhCache等的优劣比较linux
一、容量的问题:nginx
源码中,HashMap的最大容量为1<<30。HashMap的初始默认容量是16,默认负载因子0.75,也就是说,随着数据的不断插入,当数据量不断增大,超过现有容量*负载因子的时候,就是进行容量扩充,即resize操做,而这个操做须要将原来数组的数据逐个所有从新放入到新生成的大容量的数组里面去,这样的代价就会比较高,尤为是hashmap容量在不断迅速增加的状况下。所以,相似咱们如今这个系统中,hashmap中须要缓存的数据量基本上是比较稳定的(在可预见的将来不会出现暴增的状况,所以只要在必定范围内,也不会形成内存的急剧膨胀),这种状况下能够考虑在生成hashmap的时候就直接指定一个容量以及负载因子;并且在咱们的系统中,hashmap缓存的其实就是一张数据表的数据,这样这个指定的容量其实就能够根据数据表如今的长度来得到。git
二、多线程并发的问题web
HashMap自己不是线程安全的,所以不能用于多线程并发,由于多线程环境下,使用HashMap进行put操做会引发死循环,致使CPU利用率接近100%,可是java中提供了一个ConcurrentHashMap,这个map是线程安全的,经过对get操做不加锁,对put操做分块加锁的方式来保证线程安全的同时还能有较高的读写性能,详细的介绍能够参考:http://goldendoc.iteye.com/blog/1103980,http://www.infoq.com/cn/articles/ConcurrentHashMap面试
三、操做性能没有进行测试,稍后再来测试这个,暂时能够参考http://blog.csdn.net/java2000_net/article/details/3373181,http://blog.csdn.net/liuzhengkang/article/details/2916829,可是后者看评论好像是有争议的。redis
5. 线程的状态
5. 线程的阻塞的方式算法
6. sleep和wait的区别
7. hashmap的底层实现
8. 一万我的抢100个红包,如何实现(不用队列),如何保证2我的不能抢到同一个红包,可用分布式锁 待看
9. java内存模型,垃圾回收机制,不可达算法
Java堆中存放着程序中几乎全部的对象实例,垃圾收集器在对堆进行回收前,首先须要判断哪些对象还“活着”,哪些已经“死去”。一般判断的方法有引用计数算法、可达性分析算法。引用计数算法给对象中添加一个引用计数器,每当一个地方引用它时,计数器值加1;当引用失效时,计数器值减1,若是计数器的值为0,则说明对象再也不被使用(死去了)。然而Java虚拟机中并无选用计数算法来管理内存,由于引用计数算法难以解决对象之间相互循环引用的问题。可达性分析算法是将一系列称为“GC Roots”的对象做为起始节点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证实此对象是不可用的(也死去了)。其中可做为GC Roots对象的有:虚拟机栈(栈帧中本地变量表)中引用的对象,方法区中静态属性引用的对象,方法区中常量引用的对象,本地方法栈中引用的对象。上边说的都是Java堆中的内存回收,而方法区(HotSpot中的永久代)的垃圾收集主要回收两部份内容:废弃常量和无用类。判断一个常量是不是废弃常量只需判断是否还存在对该常量有引用的对象。而判断无用类须要同时知足3个条件:该类全部的实例都已经被回收,即Java堆中不存在该类的任何实例;加载该类的ClassLoader已经被回收;该类对应的java.lang.Class对象没有在任何地方被引用,没法在任何地方经过反射访问该类的方法。
10. 两个Integer的引用对象传给一个swap方法在方法内部交换引用,返回后,两个引用的值是否会发现变化
11. aop的底层实现,动态代理是如何动态,假若有100个对象,如何动态的为这100个对象代理
https://blog.csdn.net/qq_24693837/article/details/54909477
https://www.jianshu.com/p/6402c45cee62
12. 是否用过maven install。 maven test。git(make install是安装本地jar包)
13. tomcat的各类配置,如何配置docBase
14. spring的bean配置的几种方式
15. web.xml的配置
16. spring的监听器。
17. zookeeper的实现机制,有缓存,如何存储注册服务的
18. IO会阻塞吗?readLine是否是阻塞的
19. 用过spring的线程池仍是java的线程池?
20. 字符串的格式化方法 (20,21这两个问题问的过低级了)
21. 时间的格式化方法
22. 定时器用什么作的
高效的实现方式就是使用java.util.Timer工具类。
23. 线程如何退出结束
24. java有哪些锁?乐观锁 悲观锁 synchronized 可重入锁 读写锁,用过reentrantlock吗?reentrantlock与synmchronized的区别
25. ThreadLocal的使用场景
在工具 类获取CurrentSession 或者获取链接的工具类 能够用ThreadLocal <Session或者Connection> 用线程的变量副本存储 这些session 保证一个线程只存在一个session 相互直接不共享数据
26. java的内存模型,垃圾回收机制
27. 为何线程执行要调用start而不是直接run(直接run,跟普通方法没什么区别,先调start,run才会做为一个线程方法运行)
28. qmq消息的实现机制(qmq是去哪儿网本身封装的消息队列)
29. 遍历hashmap的三种方式
30. jvm的一些命令
31. memcache和redis的区别
http://www.cnblogs.com/shan1393/p/9001113.html
32. mysql的行级锁加在哪一个位置
33. ConcurrentHashmap的锁是如何加的?是否是分段越多越好
34. myisam和innodb的区别(innodb是行级锁,myisam是表级锁)
35. mysql其余的性能优化方式
36. linux系统日志在哪里看
cat /var/log/syslog 等 cat /var/log/*.log
37. 如何查看网络进程
ps 命令用于查看当前正在运行的进程。
grep 是搜索
例如: ps -ef | grep java
表示查看全部进程里 CMD 是 java 的进程信息
ps -aux | grep java
-aux 显示全部状态
ps kill 命令用于终止进程
例如: kill -9 [PID]
-9 表示强迫进程当即中止
一般用 ps 查看进程 PID ,用 kill 命令终止进程
关键字: linux 查进程、杀进程、起进程
38. 统计一个整数的二进制表示中bit为1的个数
39. jvm内存模型,java内存模型
40. 如何把java内存的数据所有dump出来
41. 如何手动触发全量回收垃圾,如何当即触发垃圾回收
system.gc 可是 不保证垃圾回收器必定会执行
42. hashmap若是只有一个写其余全读会出什么问题
43. git rebase
44. mongodb和hbase的区别
45. 如何解决并发问题
46. volatile的用途 保证变量时刻是最新的 不能够被缓存 只能修饰变量
47. java线程池(好像以前个人理解有问题)
48. mysql的binlog
49. 代理模式
50. mysql是如何实现事务的
每执行一条sql调用一次事务 手动设置 须要 set autoCommit=0
51. 读写分离什么时候强制要读主库,读哪一个从库是经过什么方式决定的,从库的同步mysql用的什么方式
52. mysql的存储引擎
mylsam 选择 插入
innodb 数据库恢复 事务
53. mysql的默认隔离级别,其余隔离级别
54. 将一个链表反转(用三个指针,可是每次只发转一个)
55. spring Aop的实现原理,具体说说
面向切面 在不改变原有代码对 程序进行加强
56. 什么时候会内存泄漏,内存泄漏会抛哪些异常
内存泄漏 是指在资源用完没有及时释放致使内存泄漏
内存溢出 指你有的数据比内存给的要大 内存溢出 例如用int 存Long类型的 数
57. 是否用过Autowire注解
58. spring的注入bean的方式
59. sql语句各类条件的执行顺序,如select, where, order by, group by
分组后排序
60. select xx from xx where xx and xx order by xx limit xx; 如何优化这个(看explain)
61. 四则元算写代码
62. 统计100G的ip文件中出现ip次数最多的100个ip
select count ( select 经过id进行分组)r where r.rownum<100
63. zookeeper的事物,结点,服务提供方挂了如何告知消费方
64. 5台服务器如何选出leader(选举算法)
65. 适配器和代理模式的区别
类的适配器模式:当但愿将一个类转换成知足另外一个新接口的类时,可使用类的适配器模式,建立一个新类,继承原有的类,实现新的接口便可。
代理模式就是多一个代理类出来,替原对象进行一些操做,
代理模式的应用场景:
若是已有的方法在使用的时候须要对原有的方法进行改进,此时有两种办法:
一、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
二、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
66. 读写锁
67. static加锁
68. 事务隔离级别
69. 门面模式,类图(外观模式)
70. mybatis如何映射表结构
71. 二叉树遍历
72. 主从复制
https://i.cnblogs.com/EditPosts.aspx?postid=9064102
73. mysql引擎区别
74. 静态内部类加载到了哪一个区?方法区
75. class文件编译后加载到了哪
76. web的http请求如何总体响应时间变长致使处理的请求数变少,该如何处理?用队列,当处理不了那么多http请求时将请求放到队列
中慢慢处理,web如何实现队列
77. 线程安全的单例模式
78. 快速排序性能考虑
79. volatile关键字用法
80. 求表的size,或作数据统计可用什么存储引擎
81. 读多写少可用什么引擎
82. 假如要统计多个表应该用什么引擎
83. concurrenhashmap求size是如何加锁的,若是刚求完一段后这段发生了变化该如何处理
84. 1000个苹果放10个篮子,怎么放,能让我拿到全部可能的个数
85. 可重入的读写锁,可重入是如何实现的?
86. 是否用过NIO
87. java的concurrent包用过没
88. sting s=new string("abc")分别在堆栈上新建了哪些对象 方法区 "abc" 堆 s对象 栈存的对象的引用
89. java虚拟机的区域分配,各区分别存什么
90. 分布式事务(JTA)
91. threadlocal使用时注意的问题(ThreadLocal和Synchonized都用于解决多线程并发访问。可是ThreadLocal与synchronized有本质的区别。synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而ThreadLocal为每个线程都提供了变量的副本,使得每一个线程在某一时间访问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。而Synchronized却正好相反,它用于在多个线程间通讯时可以得到数据共享)
92. java有哪些容器(集合,tomcat也是一种容器)
93. 二分查找算法
94. myisam的优势,和innodb的区别
95. redis能存哪些类型 String hash set Zset
96. http协议格式,get和post的区别
97. 可重入锁中对应的wait和notify
98. redis能把内存空间交换进磁盘中吗(这个应该是能够的,可是那个面试官非跟我说不能够)
99. java线程池中基于缓存和基于定长的两种线程池,当请求太多时分别是如何处理的?定长的事用的队列,若是队列也满了呢?交换进磁盘?基于缓存的线程池解决方法呢?
100. synchronized加在方法上用的什么锁 可重入锁
101. 可重入锁中的lock和trylock的区别
trylock(time ) 等待指定时间才会尝试获取锁返回true
102. innodb对一行数据的读会枷锁吗?不枷锁,读实际读的是副本
103. redis作缓存是分布式存的?不一样的服务器上存的数据是否重复?guava cache呢?是否重复?不一样的机器存的数据不一样
104. 用awk统计一个ip文件中top10
105. 对表作统计时可直接看schema info信息,即查看表的系统信息
106. mysql目前用的版本
107. 公司经验丰富的人给了什么帮助?(通常boss面会问这些)
108. 本身相对于同样的应届生有什么优点
109. 本身的好的总结习惯给本身从此的工做带了什么帮助,举例为证
110. 原子类,线程安全的对象,异常的处理方式
111. 4亿个int数,如何找出重复的数(用hash方法,建一个2的32次方个bit的hash数组,每取一个int数,可hash下2的32次方找到它在hash数组中的位置,而后将bit置1表示已存在)
112. 4亿个url,找出其中重复的(考虑内存不够,经过hash算法,将url分配到1000个文件中,不一样的文件间确定就不会重复了,再分别找出重复的)
有1万个数组,每一个数组有1000个整数,每一个数组都是降序的,从中找出最大的N个数,N<1000
113. LinkedHashmap的底层实现
114. 类序列化时类的版本号的用途,若是没有指定一个版本号,系统是怎么处理的?若是加了字段会怎么样?
Java的序列化机制是经过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,若是相同就认为是一致的,能够进行反序列化,不然就会出现序列化版本不一致的异常。
115. Override和Overload的区别,分别用在什么场景
116. java的反射是如何实现的
类的字节码 Class.forname("类的全路径")