阿里面经
蚂蚁一面
- 自我介绍
- 介绍实习,介绍秒杀项目
- 怎么设计和考虑秒杀项目的架构的?取消支付订单是怎么考虑的?先写缓存还是先写数据库?会存在什么问题?
- 修改数据库库存的时候使用什么锁?乐观锁还是悲观锁?
- String 对象是怎么进行回收的?
密码的话用字符串存储会出现什么问题
?PS:字符串常量池里面存在密码的副本,所以会存在密码泄露- ArrayList、LinkedList、vector?删除和增加用哪一种?查询用哪一种?vector呢?如何设计实现一个线程安全的LinkedList?PS:链表的话考虑读写锁?CAS操作也可以,但是无法保证有序性
- 一个java文件里面有私有实例变量、静态变量、静态方法、静态代码块,他们分别存在什么地方?
- 线程和进程的概念?ABC三个线程实现有序输出,有几种方式?
- 有几种垃圾回收算法?分别适用的范围?PS:可以讲一下分代
- 自我思考:元空间是什么时候进行回收的?PS:jdk1.8的时候称为元空间,取代了永久代,因为在之前字符串常量池是存储在永久代里面的,是会发生OOM的;
元空间的内存是存在本地内存里面
,所以大小只跟本地内存有关,不会发生垃圾回收,而且常量池移动到堆里面去了
。 - PS:场景题比较多,大多需要自己去思考
- 反问
蚂蚁二面
- 自我介绍
- 详细问项目,考虑各种情况,项目里面会给你很多情况、场景 让你去思考怎么处理?
- 乐观锁和悲观锁的区别?使用场景?如果有大量的请求来执行修改操作使用什么锁?
- 互斥锁:加锁失败后,线程会释放CPU,会进入到阻塞状态,会由用户态进入到内核态,涉及两次的线程上下文切换,有上下文切换的成本。
- 自旋锁:加锁失败后,线程会忙等待,直到拿到锁。会耗费CPU的性能一直自旋
- PS:
如果能确定被锁住的代码执行时间很短,就应该使用自旋锁;否则使用互斥锁
。
- java 双亲委派机制?
- 手写一个java.lang.String 对象里面写个main方法,打印helloworld会出什么问题?
- 对自己的职业规划?
百度面经
一面
- 讲项目做过的模块,(登陆)
- 登陆的密码,在网络传输是安全的吗?
- https怎么保证安全性?http的几种响应码?
- http和https的区别?
- 身份证用md5加密一定不能被破解吗?
- TCP三次握手、四次挥手
- 权限认证怎么做的
- redis的几大数据结构、zset的底层实现
- synchronized作用在静态方法、非静态方法、代码块的区别?
- linux命令,linux里面文件有两列,一列是url,一列是id,查找某个ID的所有url信息
- 单元测试怎么做的?
二面
- System.out.println((int)(char)(byte)-1); 输出是多少?(65535) :把-1转换成强转成byte类型还是-1;把byte类型强转成char 类型,由ascii码表,-1是不在表范围之内,char默认2个字节,即16bit,能存储最大65536(2^16)个,所以char的数字范围是0-65535,-1的话就是从后往前找,变成65535。
- hashmap的数据结构?
- 多线程如何保证共享资源的安全性?
- java 常见的几种锁?
- 写单例模式
- 创建线程的几种方式
- spring bean的实例化过程?
- spring如何开启事务?启动类上面使用@EnabletransactionManager
- 在同一个类里面a调用b,事务能生效吗?为什么?是因为spring采用动态代理机制来实现事务控制,而动态代理最终都是要调用原始对象的,而原始对象在去调用方法时,是不会再触发代理了.
- 动态代理的实现?jdk和cglib (Spring在运行期间通过 CGlib继承要被动态代理的类,重写父类的方法,实现AOP面向切面编程) 的性能区别?
- docker,k8s使用过没有?docker实例跟镜像的底层实现?
- mysql有几种存储引擎?有什么区别?
- select * 有什么问题?可以优化的地方?
- 为什么使用自增的id?
- 了解深度学习吗?
三面 凉凉
-
自我介绍
-
走台阶问题,可以走一步或两步,走到第n步有几种结果。写出递推公式
-
进阶:如果必须走中间第m步台阶的话,有几种结果?写出递推公式,思路有了,让我写代码验证 (在这里纠结了好久,有一个点写错了,最后才找到错误的地方,写出来时间都要结束了,)
-
问了我HR面的问题?优缺点?遇到的困难?未来的计划?ps:心态炸了技术面问我这些问题,结果果然凉了
京东面经
提前批一面电话面
- 自我介绍
- 项目做了压力测试没有?怎么做的
- 链式执行三个方法a,b,c,如何输出每个方法的执行时间?AOP对项目里面所有的方法都会生效吗?
- 同一个类里面事务a方法调用事务b方法,b会生效吗?为什么?
- 如何实现A,B线程并行执行,然后跟C线程串行执行?
- mysql 数据库的存储结构?存储引擎?
- mysql的主从复制是怎么实现的
- 事务的最左前缀原则,对a,b,c三列上面建立索引,a,c会生效吗?为什么?
- 用你学习的知识,如何设计一个秒杀系统,尽可能的达到高访问量?
提前批二面电话面
- 自我介绍
- 项目使用的是分布式架构吗?怎么理解分布式架构里面的RPC?你会怎么设计RPC?
- RPC进行TCP进行数据传输的时候,需要注意什么?
- TCP的三次握手?二次握手的话有哪些问题?
- java 的hashMap 扩容的过程?
- java 集合在遍历的过程进行删除的话会出现什么问题?
- JVM的内存结构,栈起什么作用?什么时候栈会出现OOM?
- 怎么保证线程安全,有哪些措施?锁和volatile
- volatile关键字保证原子性吗?为什么?举例说明i++的问题,因为i++不是原子性操作?
- 线程的生命周期?
- mybatis 的
#
和$
有什么区别、问题?$
既然存在sql注入的问题,为什么还要使用它,它有什么应该场景吗?PS:#
相当于预编译,然后对参数进行处理后,再set进行注入使用;$
相当于进行拼接字符串,对参数没进行任何处理,所以存在sql注入的问题。为什么还要使用$
呢,因为#会对参数进行处理,传入字符串时,就会加上引号,比如#{tableName},传入user,就会变成select * from "user" ,就会查询不到数据,所以当需要动态传入表名或者列名
的时候就要使用到$
。 - 讲讲Spring的IOC 和AOP?
- Spring 事务使用过吗?事务失效的几个场景?为什么事务没有声明异常就会失效?PS:@Transactional(rollbackFor = Exception.class) 在程序里面使用try catch捕获到了异常,但是没有抛出异常,那么上层的Spring就不知道方法的调用情况,所以会失效。还有就是抛出的异常不是声明的rollbackFor 那个异常,也不会进行回滚,所以自定义的异常要继承于Exception。
- 类加载的过程?双亲委派机制?能不能自己写一个java.lang.String类来覆盖? PS:不能,因为是双亲委派机制,所以会委托给最顶层的父类bootstrapclassloader来加载,而根加载器能够找到系统自带的String,所以双亲委派最终会由最顶层的根加载器来执行jdk自带的java.lang.String,所以最后使用的是系统自带的String。 奇怪的解决方案之一,打破双亲委派机制,我自己定义一个类加载器来加载自定义的String对象,我不走双亲委派可以吗?答案还是不能,因为类加载最终会调用ClassLoader.defineClass方法,这个方法会在执行时检查包名是否是java.开头的,如果是,则会抛出异常,从而阻止你加载自定义的类。
- mysql的innodb索引有哪些?聚簇索引和非聚簇索引有什么区别?
- 如何进行mysql语句调优?
- 项目里redis是怎么使用的?redis做缓存会出现哪些问题?
- 缓存雪崩会带来什么问题?缓存击穿和缓存穿透的区别?
- 缓存雪崩的话,如何保证一致性和高并发?ps: 因为回答的是当缓存失效的时候,使用锁来控制访问数据库的线程只有一个,就问 在高并发的时候,使用锁后会降低性能,如何避免低性能的同时又要保证一致性。
- 为什么选择使用rabbitmq?rabbitmq 如何避免重复消费?
- 写代码的过程遇到的最大的困难是什么?如何解决的?
HR面
收到意向书
美团
美团到店正式批一面1h
- 自我介绍,
- 怎么高效的学习一个新知识?
- 问了20分钟秒杀项目的问题,全是高并发的时候考虑各种错误?
- 为什么使用rabbitMq?怎么实现削峰?
- rabbitmq消费者消费能力赶不上生产者生产了怎么办,消息积压的问题?PS:给消息加上过期时间,过期后进入死信队列,写一个程序处理死信队列;扩容,增加消费者;
- 写数据库后、缓存宕机了怎么办、数据库宕机了怎么办?PS:使用事务
- 秒杀还可以怎么优化?
- 限流算法,令牌桶知道吗?PS:漏桶算法:水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出;令牌桶算法:以一个恒定的速度往桶里放入令牌,请求处理之前需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
- java的三大特性?组合知道吗?
- 线程如何做到等待其他线程完成后执行,有几种方式?
- 线程池的原理?
- 类加载机制讲一下?
- JVM的内存结构?
- 堆的划分?什么时候进入老年代?什么时候发生FullGC?
- 运行一个Java程序,如何配置JVM?
- Integer a=126,然后使用a==126,会有什么问题?Integer类有什么危害?PS:不能使用等于比较结果,应该使用Integer.intValue
- 数据库查询数据的时候,使用的是int 还是Integer 接收结果?
- mysql的隔离级别
- mysql a、b、c三列上建立索引,a、c有走索引吗?
- mysql的MVCC机制
- TCP、UDP的区别
- TCP 保证可靠性的机制
- 算法:连续子数组的最大和;一个数组里面有正,有负,求最大的连续子数组和
美团到店二面1h
- 自我介绍
- 介绍秒杀系统
- Integer a = 222; Integer b = 222; a==b?
- 讲讲java的异常体系
- try 里面有return,finally 里面有return,会返回哪一个?
- 线程的几种状态?
- 讲讲synchronized,锁升级的过程?(PS:从无锁一步步讲到重量级锁)使用的方式?
- 讲讲lock锁?
- synchronized跟lock锁的优缺点,以及什么时候使用synchronized,什么时候使用lock?PS:lock可以实现公平、tryAccquire、可中断的加锁、condition可以指定唤醒、还有semephare、countdownlatch、cyclicbarrier
- 用java多线程的方式创建线程比直接创建线程好在哪里?PS:有两点
- mysql 的隔离级别?每个隔离级别可能会出现什么问题?以及如何解决的?
- 重点问了我可重复读隔离级别下
如何解决幻读
的问题?重点问了MVCC+next-key锁是如何来解决的? - 串行化是怎么实现的?加的什么锁?
- mysql 的事务,事务的每个特性是如何实现的?问我
隔离性是如何实现
的? - mysql 有哪些索引?主键索引和非主键索引有什么区别?
- 怎么设计索引?需要考虑哪些因素?
- 怎么使用索引?PS:如何避免索引失效?
- A,B,C做索引,那么where C=X and B=X and A=X 是否生效?where A=X and B>X and C=X 是否生效? PS :where C=X and B=X and A=X 是生效的,因为是常量,,mysql优化器会进行优化。PPS:可以通过explain查看执行计划,来判断有没有走索引
- 口述算法:两个栈如何实现队列,当数据量特别大的时候,有没有什么可以优化的?PS:找到了慢的点,但是不知道怎么优化?
- 找到两个链表的交点?解决方案1: 双指针,然后又让我给出其他解决方案2:hashSet
- 大量的IPV4地址,判断一个IPV4是否出现过?用什么数据结构来实现,分析时间、空间复杂度
- 手写算法:字符串转成整数,字符串不保证输入合法,可能会输入各种字符
- PS:就问了Java基础和Mysql,问的很细
美团到店三面1h15min
- 直接做了一个小时算法,最后问了下HR面试的问题,怎么学习的?遇到问题怎么解决?
- 面试官介绍了一下他们部门的情况,然后直接开始手撕算法
- 定义一个类实现二叉树的数据结构
- 基于以上的类,实现计算二叉树的高度
- 计算二叉树距离最大的两个节点间的距离。
- 我定义一个全局变量维护最大高度,递归判断即可;然后要求我不维护全局变量
- 递归判断左右子树的高度,再递归获取当前左子树最大距离,右子树最大距离,然后再取跟经过当前结点的距离(左子树高度+右子树高度),最后取最大值即可。要求我,减少递归次数,进行优化
- 进行减枝优化,再要求我进行优化,然后提醒我可以返回多个值
- 最后返回的值里面包含 树的高度和最大距离 即可
- 给出一对 一颗二叉树中距离最远的结点,PS:返回结点里面包含了最大距离、高度、最远的左结点、最远的右结点、
当前最深的结点
(PS:这个是面试官提醒才想出来的)。 - 一个小时后,问了些HR面的问题。
腾讯面经
腾讯面试体验贼差,感觉就是刷KPI
腾讯提前批一面GG
- 自我介绍
- 介绍实习的难点,收获?
- 可承受的高并发是多少?秒杀项目你觉得还有那里可以优化?
- socket编程的主要步骤?
- linux 里面查看进程的CPU使用情况?
- 查看线程的CPU使用情况呢?
- 如何查看网络的使用情况?
- TCP、UDP的区别?
- 算法:数字 1 的个数:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数; 暴力超时,感觉是找规律,但是没找到
腾讯被捞一面GG
- 自我介绍
- redis的数据结构、
- 线程池的几大参数
- juc包下面有哪些东西?CountDownLatch 和 CyclicBarrier的区别
- mysql的隔离级别
- 找到两个链表相交的节点
- 感觉被刷KPI了
腾讯云被捞一面GG
- 自我介绍
- 两个算法:1. 把字符串空值变成%20; 2. 子矩阵最大累加和
- 会C++ 或者go吗?
- 12306是怎么扛住高并发的?怎么设计这个秒杀系统?PS:没考虑事务出现异常进行回滚,然后说我想的太简单了
- 了解Mysql的注入吗?PS:第一次听见注入这个概念
- 了解网络编程吗?讲一下网络编程服务端涉及的哪些底层函数调用?
网易
互娱一面
- 自我介绍
- 从到到尾介绍秒杀项目
- 介绍下DNS、ARP、HTTPS的实现
- SpringMVC的流程?Spring IOC的流程?
- where、groupBy、having、order、limit
- select...for update 会加锁吗?讨论一下加锁的情况?PS:讨论加间隙锁、行锁、next-key锁、表锁情况;
- 查询的字段
不含索引
,并且查询到数据,产生表锁
; - 如果查询
字段是索引
,并且使用的是!=
、like
则会产生表锁,PS:没有查询到数据也会生成表锁 - 查询的字段
包含索引
,如果是a=
1 产生行锁,如果是a>=1 产生next-key锁;没有查询到数据不产生锁。
- 查询的字段
- redis 的持久化?
- 虚拟内存?进程调度的方式?
- 单链表可能有环,找到环的入口结点,没有环的话就输出null
互娱二面
- 自我介绍
- 全程问项目跟实习,问了30多分钟,会根据项目或者实习中的某一个提出新的需求,问你怎么解决?
- 看过哪些源码?
- 最能体现你能力的一件事情?
- 你最大的优缺点?
互娱HR 面
- 自我介绍
- 为什么选择从事后端开发?你是怎么规划你的学习路线的?
- 你的职业规划是什么?
- 拿了哪些offer,面了哪些公司,选择该公司的理由?
- 看你没有投递银行,那你怎么看待互联网上班的强调?
- 愿意来广州上班吗?
- 除了学习还有其他兴趣爱好吗?
- 你有打哪些游戏?
招银网络
一面
- 自我介绍
- 项目中使用了哪些技术
- Bean是线程安全的吗?
- Spring怎么开启事务?事务里面有什么属性?(隔离级别喝传播属性)
- 一个类里面有方法A,B,两个方法都开启了事务,A里面调用B方法,如果B出问题了进行回滚,A会怎么做?
- 如果A没有开始事务,B开启了事务,A调用B,B出错了会怎么做?
- Spring事务的隔离机制?
- Mysql的索引?
- 有哪些情况会导致索引失效?
- Mysql 怎么取前100条数据?Orical怎么实现?
- 讲讲HashMap的底层实现?(讲了使用的数据结构、put操作的整个流程、扩容操作的整个流程、Hash寻址算法)
- 红黑树扩容的阈值为什么是8?
- 红黑树退化为链表的阈值为什么是6?
- Java多态的重载 和重写?
- Java深拷贝和浅拷贝?
- 算法题:贪心算法,185元需要几张人命币?
综合面 GG
- 自我介绍
- 项目中redis做token 是怎么做的? redis用来做缓存的话应该如何设计?(考虑穿透、击穿、雪崩)
- 知道消息队列吗?RabbitMQ 消息堆积如何处理? 如何保证消息不被重复消费?
- 上传大文件的时候,断点怎么做的?
- Mysql 的幂等性怎么做?
- 实习负责那些模块?
- Mysql 调优怎么做?
然后HR面
反问:我看网上评价说,招银承诺的薪资待遇拿不到这么多,是有扣费、扣绩效吗?
40%拿更多、50%持平、10%拿的比较少;也没说个所以然,就是给我说网上评价的都是那10%绩效少的。就是刚入职实习期有三个月,这三个月只有80%的工资。可以提前实习
薪资的话要等所有面完才能定下来,现在还不确定。
华为
一面
- java 8大基本类型
- java 集合类的接口有哪些
- arraylist 和linkedlist 的区别?
- 用linkedlist 存放100个学生信息,查找姓名为张三的学生的时间复杂度?
- jdk 有哪些类实现了 map 接口?(hashmap、hashtable、concureenthashmap、hashset...)
- hashmap 的数据结构? put 过程是怎么样的?
- 讲你了解的concurrentHashmap?(没听清楚他的问题,就记住了concurrentHashmap,然后就问他想了解什么,就让我讲了解到的concurrentHashmap)
- Https 和tcp、udp的区别?(https 1.x、2.x底层使用的是TCP协议;http3.x 底层使用的是udp协议)
- tcp 和udp 的区别?
- 手撕算法:合并一元多项式
面完之后,先不要走,等了不到10分钟就二面
二面
- 自我介绍
- 基本全是问秒杀和铁科院实习,问的很详细,简历上面写到的点基本都问了。(PS:实习写了kmeans、和决策树,竟然还问我这个)
- 简历上面写了使用自定义注解,就问我jdk注解的底层实现?问我怎么实现一个自定义注解,具体的步骤?
- java 里面浮点数的底层是怎么实现的?
- 问我synchronized和reentrainlcok的区别?
- 在讲的时候提到了互斥锁、可重入锁、CAS,然后又问我这些分别表示什么意思?
- 问我synchronized写在静态方法 和 非静态方法的区别?
- 好像问了我线程池的七大参数分别是什么? 然后给了我核心线程池10个,最大线程池20个,阻塞队列大小30个,有100个任务,线程池是如何工作的?
- 最后反问我有什么知识点是他没有问到的?可以讲讲他没问到的知识,然后找一个自己熟悉的说说,比如我就是重点表示我Mysql 很好,看了很多内容,但是没有被问出来,然后又讲自己看了很多源码也没有被问出来,对了,还要表示自己不是为了面试而学习,最后再讲讲自己学习这些知识带来的收获和提升。
- leetcode875题,做完后,面试官跟我聊了下思想,问我还有什么可以优化的,因为使用的是二分法,问我在什么场景下使用二分法
可以走了,等待第二天的业务主管面
业务主管面
- 自我介绍
- 问实习、问秒杀,问实习的收获、问遇到的最大的困难和怎么解决的?
- 问学习成绩、简历上写成绩是前10%是怎么得出来的(本科成绩也问)
- 问奖学金的比例、问论文发表情况
- 问工作意向地点
- 感觉就就正常的HR面,看别人又被问到过你对华为/鸿蒙的了解?这个可以准备下。