java面试(2)
关于面试所问到的问题综合自己所面的几家公司概括起来就是以下几个方面
1、 常见的算法题(手写code,每面都有)2、 理解面向对象和面向过程,这个问题自己一直答的不好。
3、 Collection中常见子类的内部实现,例如HashMap,Hashtable,ArrayList,ConcurrentHashMap等等。
4、Java多线程和高并发相关,例如线程安全会涉及到synchronized关键字用法(同步块,同步方法,同步静态方法等)和锁机制lock,lock和synchronized和lock的区别
5、由上题引申到锁机制的内部实现(独占锁reentrantlock以及共享锁,读写锁)
6、与同步相关的辅助同步类(Condition,Semaphore,CountDownLatch,CyclicBarric,SynchroinzerExchanget)的内部实现原理一个典型的问题:实现生产消费者的方法有哪些,这是百度一面面试官问我的问题。
7、 线程池原理以及相关类库(ExecuterService及其子类)的具体实现, 跟线程池相关的BlockingQueue的具体实现,线程池的拒绝策略等等
8、 JVM相关:内存模型,分区以及垃圾回收相关
9、 MySQL数据库,基本会要求手写SQL语句,考点基本是查询配套group by ,order by。写SQL中,美团出的题稍微偏难。10、 MySQL 索引 一定要理解为什么使用索引会使查询搜索更快的原理。
11、MySQL的引擎的内部数据结构懂点更好12、 计算机网络相关知识,例如tcp和udp的功能和区别以及tcp的三次握手四次挥手(中间出现各种情况的也要了解)以及tcp保证可靠传输的机制有哪些,这些一定要吃透。有一个问题印象比较深刻:类似8080端口属于那一层的概念
13、 Socket网络编程相关,百度二面的时候要求手写Server端。
14、 Java如何实现的夸平台,从.java文件开始分析整个内部执行流程,以及类加载和初始化以及类加载器的原理
15、Linux会更好,如果不会,也要了解常用的命令,例如:Linux下设置环境变量的命令,查找文件的命令等等,由于自己平台在Linux开发的比较少,回答设置环境变量是:set classpath。。。,面试官听了之后笑着说了句:这是Windows下的。哈哈
其他1、什么是进程,进程和线程的区别2、 什么情况下会产生死锁
3、什么情况下会产生内存泄露以及几万行代码的情况下如何定位内存泄露。是经常发生内存泄露的代码块和偶尔发生内存泄露的代码块的危害大。以上问题再百度和美团面试中都被问到
4、对mvc的理解
5、对spring中IOC和aop的理解,以及bean的加载机制(这个我直接不会)
6、在JVM层面来看的锁有哪些,例如自旋锁等,不懂这个问题,这是美团二面面试官问的一个问题
7、对设计模式的一些理解和看法以上基本是自己在面试过程中遇到的一些问题,如果再想起点什么问题,
在补充哈下面写一点建议吧。
1、由于笔试和面试过程中,都会涉及到算法题,建议在空闲的时间里做一些算法题,oj推荐leetcode,牛客网上的剑指offer题库。如果想看书,就《剑指Offer》吧,但是我个人不建议看书,直接刷oj,如果不会的就看下别人的博客即可,看一篇看不懂就多看一篇就懂了。
2、Java源码,推荐看,源码真是一个好东西,可以学习的东西太多了,例如:你不看源码,你可能就不知道为什么HashMap的长度要是2的幂次方。至于要看哪些类库,主要看个人兴趣和需要吧,如果你不知道看哪些类库,可以参考下我的《Java源码分析》系列博文,虽然这些文章写的比较low,但却记录着我的学习历程。
3、Java虚拟机中的内存分区,内存模型,垃圾回收算法和机制一定要理解。推荐书籍周志明老师的《深入理解Java虚拟机》,这本书比较经典。
4、数据库要会用,推荐《MySQL必知必会》这本书,这个可以直接看电子档(可以省钱,是吧),记住,这本书讲解的相当浅显易懂,但是一定要实践实践,具体的可以参考我的《MySQL必知必会学习笔记》系列博文,这个系列也记录着我的学习历程,总之,不要总看书,要实践,要实践,要实践。
5、spring、springmvc、mabatis这些框架至少要会用,写一些Demo,如果你比较牛,推荐你了解里面的具体实现。
6、Linux如果你有时间,也推荐你学习一下,这个只有好处,没有任何坏处。
7、TCP/IP这些也要了解哈,这个我没有专门看过什么书去了解。前期的什么关于Java入门的书什么之类的这里就不推荐了哈,网上很多。目前就这么多,以上想起来再补充。