java知识点和面试

1、准备
一、java基础部分:
1)概念:java特性(多态,封装,抽象,继承),面向对象,面向过程,面向服务,同步和异步,阻塞和非阻塞
2)常用的关键字:final,volatile,synchronized,static,abstract,interface等
3)常用的集合:collection接口下的和map接口下的,collection下的list,set,ArrayList,LinkedList等,map下的hashMap,hashtable等
4)常用的一些类:String,Stringbuffer,Stringbuilder,hashMap,hashtable,java.util.concurrent包下的类
5)java的序列化(ObjectInputStream,ObjectOutputStream)
6)java IO,NIO,BIO,AIO
7)异常(Exception和Error),Exception分check和uncheck
二、java并发编程(建议把《java并发编程艺术》这本书看完)
1)锁:锁的特性,锁的分类等概念
2)常用的锁:ReentrantLock(重入锁),ReenReadWriteLock(读写锁)
3)两个重要的关键字:volatile和synchronized,以及关键字实现的原理和使用场景
4)AQS(AbstractQueueSynchronized,同步器):相关的概念,常用的方法
5)CAS的概念和用处,以及和synchronized的异同
6)阻塞队列:实现原理,不同类型的阻塞队列使用的场景
7)线程池:线程池的实现原理和不同线程池的特点
8)了解JMM(java内存模型)相关的知识
9)消费者生产者模型
三、JVM(《深入理解java虚拟机》)
1)JVM内存结构:程序计数器,虚拟机栈,方法区,本地方法区,堆,直接内存,内存结构都保存了哪些数据,是否是线程共享的
2)垃圾回收的算法:复制,标记清除,标记整理,分代
3)垃圾回收器:Serial,Parnew,Parallel,Serial Old,Parallel Old,CMS,G1,以及各个垃圾回收器的特性和所使用的回收算法
4)是否是可回收对象的算法:引用计数算法和可达性分析算法
5).class文件的内容:CAFEBABE+版本号+常量区+类和接口的引用+方法表等
6)类的加载:加载,验证,准备,解析,初始化,以及各个过程都做了什么
7)类加载器:启动类加载器,扩展类加载器,应用程序类加载器,自定义类加载器
8)双亲委派模型
9)常用的调优工具:jstat,jmap,jstack,jcmd(java8出现的),jconsole等
四、数据库(一般是mysql,已mysql为例)
1)数据库的引擎:MyISAM和InnoDb
2)MyISAM和InnoDb的各自的特性以及适用的场景
3)索引:mysql数据库适用的索引有哪些(聚集索引,非聚集索引,唯一索引,普通索引等),聚集索引和非聚集索引的实现原理(包括B+树的数据结构)以及适用的引擎,联合索引的使用场景和原理
4)mysql的数据库的优化:表级别(分表,建表,加索引,外键等),sql语句的优化(尽量使用索引,减少笛卡尔积等),数据库的缓存
五、常用的组件(工作中使用的)
1)redis:原理和用途,和memcache的区别,五种数据结构(string,list,set,zset,hash),持久化(RDB方式和AOF方式),redis集群等
2)kafka:原理和用途,生产者,消费者,topic,partition,副本等
3)zookeeper:原理,zookeeper的使用场景(管理集群,做监控,因为zookeeper内部是长连接)
4)spark-streaming:原理,用法
六、开发框架
1)spring:AOP,IOC,DI,事务等
2)SpringBoot较springMVC的新特性
3)mybatis:原理和缓存(一级缓存和二级缓存),sqlSession执行的流程
4)hibernate:原理和缓存
5)mybatis和hibernate的比较
七、敏捷开发
1)maven的使用
2)github的版本控制
3)confluence的任务安排的使用
4)各种会议(站立会议,周例会等)
5)敏捷开发的思想和流程
八、算法
1)排序
2)递归
3)二分
4)动态规划
5)贪心
...
九、数据结构
1)数组
2)链表
3)对列
4)栈
5)树:二叉树,红黑树,B树等,树相关的操作(遍历、查找等)
6)图


1、头条(止步二面)
大致问的问题:如何进行JVM调优,mysql的调优,volatile原理,hashtable和concurrentHashMap的区别,手写快排和top K算法,kafka的原理,zookeeper的原理
2、美团(offer)
java的基础知识:volatile原理,synchronized原理,hashtable和concurrentHashMap的区别,hashMap的源码
多线程:volatile的应用(终止运行的线程),有10个线程,这10个线程是异步,主线程必须等到这10线程都完成了再执行,用什么去做(旁听的)
jvm:调优,如何进行调优的
GC:垃圾回收的算法(包括复制,标记清除,标记整理,分代),垃圾回收器及使用的垃圾回收算法
mysql:说一说mysql的索引,索引的数据结构,然后画出来,mysql的引擎(MYISAM和InnoDB),mysql都进行了什么优化(分表,分库,sql优化尽量不出现笛卡尔积等)
spring:spring的源码看过吗,说说AOP,IOC,以及他们的原理
MyBatis:MyBatis的缓存(一级和二级)说说他们的缓存原理和区别,mybatis的执行原理,sqlSession是如何创建的,mybatis是如何定位到sql语句的,动态的sql语句原理
算法:写一下树的广度优先排序算法,链表的倒序打印(多种方法,我一开始写的是用堆,然后又解释了还有其他方法)
如果做一个邮箱服务器,如何屏蔽垃圾邮件(如广告)
有一个子线程去执行任务,由于某个原因想让子线程停止执行正在执行的任务,有什么方法去做:使用volatile关键字
CAS(失败重试)和锁的区别:并发量高的时候,锁的效率要高于CAS,并发量低的话,CAS效率要高。
项目中的:kafka的原理,redis的原理
三面的问题:问了上面的那些知识,然后还有开放性的题:估算一下北京多少个加油站,平常都看什么书,职业规划,为什么要来美团,对互联网公司的理解等




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值