1.自我介绍
2.项目介绍以及细节
3.kafka消息丢失怎么办?
4.说一下Java内存模型
主内存 – 工作内存 – 线程
5.Java内存模型如何保证一致性?
通过锁、volatile、等禁止指令重排序
6.说一下Mysql索引有哪些
B+树索引,hash索引,bitmap
普通索引,主键索引,唯一索引,联合索引等
7.B+树索引怎么实现的
B+树每个节点可以存储很多的值,矮胖,磁盘IO次数少
8.B+树索引和哈希索引都有什么优缺点?
两个都够快,但是hash则更快,B+树更稳定
B+树和B树区别是什么?
,B+树能够范围查找,B树节点存储索引少,所以树高度较高,磁盘IO操作更多
为什么用B+树实现索引
因为稳定,磁盘IO少,能够范围查找
9.用过ThreadLocal吗,怎么实现的?ThreadLocalMap怎么保证线程安全的?
ThreadLocal本身并没有承担存储每个线程中的数据的职责,它是通过操作每个线程内部的一个“副本”-ThreadLocalMap来实现线程之间的隔离,从而保证了线程安全。
10.写一个LRU
用LinkedHashMap实现,每次插入时查看链表中有了没,有了就将其放在头部并返回,没有则插入链表头。当链表满了,就删除链表尾部的节点。
LinkedHashMap通过构造器构造,可以指定初始容量,和负载因子。也可以使LinkedHashMap重写removeEldestEntry实现。
11.说一下zookeeper
12.有什么问题要问?
作者:一天儿啊!
链接:https://www.nowcoder.com/discuss/223281
来源:牛客网
2019.08.14网易 30分钟
上来就是自我介绍和实习项目
1.说一下Collection(我说了Set、List及他们的实现类还有底层数据结构)
Set List Queue
2.HashMap和TreeMap差别
HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法
默认初始容量16,加载因子0.75,扩容为旧容量乘2,查找元素快,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;
TreeMap:基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出
3.iterator迭代器有add方法吗,为什么?
迭代通常是用于遍历,add操作很少。同时对于无序的list,add操作并不能保证添加后的元素被遍历到,所以迭代器为了维护统一接口没有add方法。而对于有序的List则是提供了ListIterator迭代器专门遍历List,该迭代其中添加了add方法,并且也添加了hashPrevious,previous,previousIndex等方法。
4.最优二叉树遍历方式还有遍历之后啥的
二叉树遍历先序,中序,后序遍历,层次遍历
5.数据库索引、如何建立、分类、项目中应用(我说没有用过,哭)
用过,创建索引
1. 在建表时指定
2. create [UNIQUE] INDEX indexName tableName(username);
3. alter table tableName ADD [UNIQUE] INDEX indexName(columnName);
分类:普通,主键,唯一,联合,全文,空间 或者 聚集索引 非聚集索引
6.ABC表建立组合索引,现在想查where A and C 能用吗?(能不能????)
最左匹配原则
7.IO流分类:IO流中用到了很多设计模式,说一个
装饰器模式:动态扩展一个类的功能而不改变原有的类
适配器模式:
8.并发:synchronized作用范围 (不会)
修饰方法则是整个方法体,包围代码块则是被包围的部分
9.进程死锁的前提(我说计算机操作系统中学过,他说是不是没了解,就说下一题了,我其实知道点想说出来但也不好意思打断,就没说了)
死锁产生的4个条件
(1)互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源
(2)请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但又对自己获得的资源保持不放
(3)不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放
(4)环路等待条件:是指进程发生死锁后,必然存在一个进程--资源之间的环形链
避免死锁:
非阻塞算法实现的锁,tryAcquire定时获取锁,引入随机性,顺序上锁
10.Exception与error的差别,Exception的分类NullpointerException属于什么
Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
ArithmeticException、除以0
ClassCastException、强转出错
ConcurrentModificationException、迭代器中修改hashMap
EmptyStackException、从空栈中取值
IndexOutOfBoundException、索引越界
NullPointerException 空指针异常,未恰当初始化
11.运行时异常与一般异常的区别
1.定义不同,运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等。一般异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。
2.处理方法不同,运行时异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
对于一般异常,JAVA编译器强制要求用户必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。
3.发生原因不同,运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。
不同点:
(1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等。
(2)一般异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。
12.try-catch-finally中return(脑袋一热说错了,面试官说:你自己回去运行运行)
13.序列化相关
序列化与基本类型序列化
1)将类型int 转换成4byte或将其他数据类型转换成byte的过程叫序列化
数据---->n byte
2)反序列化
将n个byte 转换成一个数据的过程
n byte ---> 数据
对象的序列化,反序列化
1)对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化
2)序列化流(ObjectOutputStream),是过滤流----writeObject
反序列化流(ObjectInputStream)---readObject
3)序列化接口(Serializable)
对象必须实现序列化接口 ,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
4) transient关键字
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException
分析ArrayList源码中序列化和反序列化的问题
5)序列化中 子类和父类构造函数的调用问题
14.事务spring中的事务
还有点忘了 都是java基础 面试官也不错 全程无黑脸 尽管我啥也不会☹️☹️☹️
作者:ShirySan
链接:https://www.nowcoder.com/discuss/223590?type=2&order=0&pos=2&page=1
来源:牛客网
时间:25分钟
从来没有经历过时间这么短的面试。。。一脸懵逼就结束�
- 自我介绍
- 项目,根据项目问了http和web socket的区别,http长连接
- 项目里面的数据库,文件数据库与关系数据库的差别(没答上),ES查询
- mysql索引(我说了B+树,问怎么实现,平衡二叉树带进去强行解释。。。。与B树的差别,优势,)
- hashmap的结构。。。这个没答上。。脑子突然死机,直接说忘记了。不过面试官人很好,没有追问
- 锁,可重入锁的机制
- string buffer 和stringbuilderder 的区别
线程同步
- GC机制,GC算法,JVM的简单介绍,吧啦吧啦。。。。。。面试官:好了,我知道你了解这部分了�注意精简语言
- 了解分布式事务嘛,了解,但是没有大型项目的实战,讲JTA,用MQ,zookeeper保障一致性。。吧啦吧啦。。
- 了解哪些设计模式,抽象工厂与工厂模式的区别,责任链模式。。。这个答得很差,忘光了。。。
- 闲聊3分钟。。。职业规划,想做的方向是哪一块。。。有没有想问他的问题
。。。。我觉得他应该还会再问问别的啥,让我码个啥代码之类的。。。
嗯,就没有然后了。小哥太善良了。。全程没有怼我。。。说不会的完全不追问�
作者:吃apple的小子
链接:https://www.nowcoder.com/discuss/223483?type=2&order=0&pos=3&page=1
来源:牛客网
1.介绍下项目(感觉是个坑)
2.fdfs原理了解吗?
3.springboot原理了解吗?
4.问什么用netty不用nio
5.验证码业务流程,有些改进的地方
6.线程池
7.aqs原理
8.数据库联合索引,为什么要满足最左前缀
9.linux命令
10.tcp为什么三次握手
11.http状态码,101代表什么
12.hashmap何时死锁
基础知识答得还行,就是项目真是个坑。
作者:I.A.B
链接:https://www.nowcoder.com/discuss/222725?type=2&order=0&pos=5&page=1
来源:牛客网
- 上来先是惯例自我介绍,然后根据简历上的项目问了一些问题,主要是开发期间遇到了什么困难、你的工作职责、项目框架相关的知识之类的,然后问完项目问我有没有实习经历,我说有,然后问了几句实习经历,问的不太多。
- 然后就是问的一些基础知识,先是问的内存模型、gc、新生代老年代这些,(感觉问的问题都很让人把握不好度…我以为会先问jvm分哪几个区,各个区的概要之类的,结果一上来就问我gc垃圾回收)最后还问了下怎么监控jvm……。然后问我有没有写过自定义注解,自定义注解和接口的区别,这个倒真没有了解过……只说了句注解其实就是一个接口(?)
- 然后问了锁相关的,synchronized的作用域、与可重入锁的区别这些。然后是泛型,- -也是问我有没有自己写过泛型,我说平时用的比较多写得很少,问了个泛型擦除在哪个阶段。
- 数据库方面问了下mysql的索引,问我有没有自己配过索引…问我索引的类型(hash表和b+树)、根据功能去分索引,我说聚簇和非聚簇(orz卒),然后问聚簇和非聚簇的区别(神经紧张就想不起来了),又问了什么时候使用联合索引(?orz我都不会聚簇和非聚簇了怎么还问我联合,又卒)
- 整个面试流程大概50min,本来也没想着自己能进提前批面试的,毕竟笔试阶段十分糟糕,就当提前秋招面试试试水吧…
- 最后吐槽一下某易的面试官给我的形象确实不太好…中途面试官各种小动作orz。总体来说体验不太好…面试官那边附近好像坐着好几个面试官都在面试,耳机声音比较嘈杂。
作者:offer,offer快到碗里来
链接:https://www.nowcoder.com/discuss/223101?type=2&order=0&pos=6&page=1
来源:牛客网
1,自我介绍
2,项目中你负责的模块
3,对dubbo和zooper的了解
4,zooper核心
5,jvm运行原理
JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接的交互。
6,类的加载
7,java开发中怎么找到对应文件名加载的
8,线程池原理
9,redis数据库原理,为什么快
10,spring运行原理
目前回忆的大概这些了。
作者:来个大厂offer保命!
链接:https://www.nowcoder.com/discuss/222665?type=2&order=0&pos=7&page=1
来源:牛客网
总共用时约30min
- 首先是常规自我介绍
- 我看你笔试成绩还不错,基础应该很好吧(就我这也能叫不错???是不是有什么误解????),我们来问点java(以下顺序不一定,太紧张面完忘一半了,全靠回忆)
- 讲讲java内存模型(我觉得他想让我讲java内存结构,我讲了每个线程有存储变量的副本后他一脸疑惑,但又顺着我的思路问下去了)
- 那你这个int变量被一个线程修改之后其他线程怎么知道呢?(说了volatile关键字)
- 那volatile是怎么样保证有序性和可见性的呢?(忘....忘了)
- 你刚才讲的是int变量有副本,那我要是一个对象呢?
- 多线程如何修改这个对象的属性?如何保证线程安全?(讲到了synchronized和锁)
- synchronized可以修饰哪些地方?同步方法是锁住了什么?(我说要是非static的是锁住了对象,static是锁住类,面试官表情又一脸疑惑....)
- 那我现在有一个父类synchronized修饰非static方法和两个子类,现在两个子类调用这个方法会发生竞争吗?(一脸懵,盲猜) static的呢?为啥?(饶了我吧,混子本质暴露了)
- 线程池参数?从0开始一直往线程池扔任务(无限个),讲讲这中间发生的过程
- 注解有用过吗?@Autowired 和 @Override 有什么区别呢?不是功能上,是本质上(我:.....我不知道啊)
- 我现在要在代码中添加打印日志的功能,怎么实现?(说了AOP)
- spring中还有一个重要的东西IOC,讲一讲
- 我看你项目是秒杀系统,你这个数据库是你设计的吗?有哪几张表?
- 订单表里面有哪些字段?哪些字段加了索引?
- 我现在要查询某一个商家某段时间内的订单金额,sql语句怎么写?
- 你刚才这句SQL要怎么建索引?
- 要是查询某个用户某段时间内的所有订单呢?怎么样分页呢?
- 你这句SQL可以用两个索引吗?(我:.....我..不太清楚)
- 我看你用了Redis,怎么保证数据一致性的?
- 差不多就这些了,你有什么要问我的吗?(我:啊?就结束了?不写代码吗?面试官:我们有时候是要写的....)
感觉还是凉凉,一天两篇凉经,我也是服我自己
作者:无口
链接:https://www.nowcoder.com/discuss/222742?type=2&order=0&pos=8&page=1
来源:牛客网
- 问了一些在腾讯实习的东西。
- k8s上怎么做的RPC
- 虚拟ip不是会变吗?怎么找到服务的?
- 你们有尝试过Service Mesh之类的东西吗?不敢多说。。。
- 讲个熟悉的数据结构
- HashMap讲一下原理以及使用场景
- 红黑树为什么要在长度为8再变
- ConcurrentHashMap的使用场景以及原理
- 讲讲MySQL的索引
- MySQL的事务类型
- Spring是怎么支持事务的
- 为什么@Transation注解修饰的方法可以在多线程的方式下互不影响
- Connection是存在什么样的数据结构上的
- 分布式锁用过吗?用Redis怎么实现
- Redis集群怎么搭?怎么分片的?
- CAS知道吗?原理是怎么样的
- CAS有哪些使用场景?
- Atomic在高并发场景下有什么问题,缺点?
- CAS线程安全吗?有什么问题?除了线程安全呢?对于CPU呢?
- 用过Dubbo吗?稍微讲一下
- Paxos算法稍微讲一下
- ZooKeeper最少要几个节点,为什么?
- 了解哪些开源的组件
- CAP知道吗?大概讲一讲
- 有什么要问我的?
面试官说问的有点广,有的没答好,但总体海星,好久没写过Java了,希望能过吧。。。。