想成为顶尖 Java 程序员先过了下面这些问题

f8ee0139938f475999c58cf107ddce2f

作者:rowkey

一,数据结构和算法基础

我们来谈谈几种常见的排序算法以及每种算法的复杂性。用Java编写泡泡排序算法来描述链式存储结构。如何遍历二叉树?反转LinkedList。使用Java编写目录中所有文件的递归遍历。

二,Java基础

接口和抽象类之间有什么区别? Java中有哪些类型的异常?如何单独使用它们?什么是常用的集合类?例如,如何排序List? ArrayList和LinkedList中的实现是什么?它们之间有什么区别和优缺点?什么是内存溢出?请举个例子?==和equals有什么区别? hashCode方法的作用是什么?什么是NIO?它适合哪种场景? HashMap的实现原理,如何保证HashMap的线程安全? JVM内存结构,为什么需要GC? NIO模型,select/epoll的区别,多路复用的原理在Java中有多少字节的字符,扩展然后再问一下int,long,double帐户有多少字节来创建一个类的实例? final/finally/finalize有什么区别? Session/Cookie有什么区别? String/StringBuffer/StringBuilder之间的区别,扩展并询问它们的实现? Servlet生命周期?如何在Java中分配连续的1G内存空间?需要注意什么? Java有自己的内存回收机制,但为什么会出现内存泄漏?什么是java序列化,如何实现java序列化? (写一个实例)? String s=new String('abc');创建了几个String对象?

三,JVM

JVM堆的基本结构。什么是JVM垃圾算法? CMS垃圾收集的基本过程?可以调整JVM的常见启动参数,有多少?如何检查JVM的内存使用情况? Java程序是否存在内存溢出和内存泄漏?举几个例子。您常见的JVM配置和调整参数是什么?有什么作用? JVM内存结构?什么是常用的GC策略,YGC何时被触发以及何时触发FGC?

四,多线程/并发

如何创建一个线程?如何确保线程安全?如何实现线程安全的数据结构如何避免死锁Volatile关键字?在多线程环境中使用HashMap时应该注意什么?为什么?是使用run()还是start()在Java程序中启动一个线程?什么是守护程序线程?有什么用?什么是僵局?如何避免线程和进程之间的差异? Threadlocal是如何用Java实现的? 件锁,读写锁,旋转锁,重入锁?线程池ThreadPoolExecutor的实现原理?

V. Linux使用和问题分析故障排除

使用两个命令创建文件?硬链接和软链接有什么区别?什么是常见的Linux命令?您如何看待Java线程的资源消耗?负载过高有什么可能性?/etc/hosts文件有什么作用?如何用“xyz”快速替换文本中的所有“abc”?如何搜索日志文件以查找错误日志?发现磁盘空间不够,如何快速找到占用空间最多的文件? Java服务器故障排除(OOM,CPU高,负载高,类冲突)Java常用故障排除工具和用法(top,iostat,vmstat,sar,tcpdump,jvisualvm,jmap,jconsole)线程转储文件如何分析(Runnable,lock,code堆栈,操作系统线程ID关联)如何查看Java应用程序的线程信息?

第六,使用框架

描述Hibernate的三种状态?春天豆子的生命周期。 SpringMVC或Struts处理请求流。 Spring AOP有什么问题?怎么实现呢? Spring事务的传播属性是什么?它有什么影响? Spring中的BeanFactory和FactoryBean有什么区别? Spring框架中IOC的原理是什么? Spring的依赖注入如何通过Spring实现struts工作流的几种方式? Spring如何实现数据库事务? Hibernate使用一级和二级缓存,Lazy-Load理解; mybatis如何实现批量提交?

七,数据库相关

MySQL InnoDB和Mysaim有什么特点?乐观锁定和悲观锁定有什么区别?什么是数据库隔离级别?有什么影响? MySQL主从同步的基本原理。从表格中选择*,其中尺寸为> 10按大小顺序按大小顺序执行sql语句执行顺序?如何优化数据库性能(索引,子数据库子表,批处理操作,分页算法,升级硬盘SSD,业务优化,主从部署)SQL在什么情况下不会使用索引(不包含,不等于,函数)一般在什么字段中如何构建索引(过滤大多数数据的字段)如何从表中查找名称字段不包含“XYZ”的所有行? MySQL,B +索引实现,行锁实现,SQL优化Redis,RDB和AOF,如何做高可用性,如何解决mysql存储引擎索引实现机制中的高和并发库存问题;数据库事务粒度;行锁,表锁;乐观锁定,悲观锁定

八,网络协议和网络编程

与TCP建立连接的过程。 TCP断开的过程。 302跳转背后的逻辑发生在浏览器中? HTTP协议的交互过程。 HTTP和HTTPS之间的差异,SSL交互过程? Rest和Http之间有什么关系?大家都说Rest非常轻巧。你如何理解休息风格? TCP的滑动窗口协议有什么用?说出原则。 HTTP协议有哪些方法?交换机和路由器有什么区别? Socket交互的基本过程? Http协议(消息结构,断点恢复,多线程下载,什么是长连接)tcp协议(构建过程,慢启动,滑动窗口,七层模型)webservice协议(wsdl/soap格式,与rest协议的区别) NIO的好处,Netty线程模型,什么是零拷贝

9. Redis和其他缓存系统/中间件/NoSQL /一致性哈希等

列出流行的Redis客户端的并发模型。 HBase如何实现模糊查询?列出一个常见的消息中间件,如果要保留消息怎么实现呢?如何实现Hashtable?您的设计如何考虑哈希冲突?如何优化?分布式缓存,一致hashLRU算法,slab分配,如何减少内存碎片如何解决缓存单热问题什么是Bloom过滤器,其实现原理是什么?什么是假阳性? memcache和redis之间的区别zookeeper的功能是什么,选举算法如何执行map/reduce过程,以及如何使用map/reduce来实现两个数据源的联合统计

X.设计模式和重构

你能提供一些常见的设计模式吗?在设计工厂包时你遵循什么原则?你能说出一个使用Visitor/Decorator模式的开源项目/库吗?您在编码时使用的最常见的设计模式是什么?在什么情况下?如何实现单身人士?代理模式(动态代理)单例模式(懒惰模式,如何解决并发初始化,易失性和锁定使用)JDK源代码里面有一些让你印象深刻的设计模式,例如?