不断的学习,我们才能不断的前进
一个好的程序员是那种过单行线马路都要往两边看的人

阿里面经

蚂蚁一面

  1. 自我介绍
  2. 介绍实习,介绍秒杀项目
  3. 怎么设计和考虑秒杀项目的架构的?取消支付订单是怎么考虑的?先写缓存还是先写数据库?会存在什么问题?
  4. 修改数据库库存的时候使用什么锁?乐观锁还是悲观锁?
  5. String 对象是怎么进行回收的?
  6. 密码的话用字符串存储会出现什么问题?PS:字符串常量池里面存在密码的副本,所以会存在密码泄露
  7. ArrayList、LinkedList、vector?删除和增加用哪一种?查询用哪一种?vector呢?如何设计实现一个线程安全的LinkedList?PS:链表的话考虑读写锁?CAS操作也可以,但是无法保证有序性
  8. 一个java文件里面有私有实例变量、静态变量、静态方法、静态代码块,他们分别存在什么地方?
  9. 线程和进程的概念?ABC三个线程实现有序输出,有几种方式?
  10. 有几种垃圾回收算法?分别适用的范围?PS:可以讲一下分代
  11. 自我思考:元空间是什么时候进行回收的?PS:jdk1.8的时候称为元空间,取代了永久代,因为在之前字符串常量池是存储在永久代里面的,是会发生OOM的;元空间的内存是存在本地内存里面,所以大小只跟本地内存有关,不会发生垃圾回收,而且常量池移动到堆里面去了
  12. PS:场景题比较多,大多需要自己去思考
  13. 反问

蚂蚁二面

  1. 自我介绍
  2. 详细问项目,考虑各种情况,项目里面会给你很多情况、场景 让你去思考怎么处理?
  3. 乐观锁和悲观锁的区别?使用场景?如果有大量的请求来执行修改操作使用什么锁?
    1. 互斥锁:加锁失败后,线程会释放CPU,会进入到阻塞状态,会由用户态进入到内核态,涉及两次的线程上下文切换,有上下文切换的成本。
    2. 自旋锁:加锁失败后,线程会忙等待,直到拿到锁。会耗费CPU的性能一直自旋
    3. PS:如果能确定被锁住的代码执行时间很短,就应该使用自旋锁;否则使用互斥锁
  4. java 双亲委派机制?
  5. 手写一个java.lang.String 对象里面写个main方法,打印helloworld会出什么问题?
  6. 对自己的职业规划?

百度面经

一面

  1. 讲项目做过的模块,(登陆)
  2. 登陆的密码,在网络传输是安全的吗?
  3. https怎么保证安全性?http的几种响应码?
  4. http和https的区别?
  5. 身份证用md5加密一定不能被破解吗?
  6. TCP三次握手、四次挥手
  7. 权限认证怎么做的
  8. redis的几大数据结构、zset的底层实现
  9. synchronized作用在静态方法、非静态方法、代码块的区别?
  10. linux命令,linux里面文件有两列,一列是url,一列是id,查找某个ID的所有url信息
  11. 单元测试怎么做的?

二面

  1. 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。
  2. hashmap的数据结构?
  3. 多线程如何保证共享资源的安全性?
  4. java 常见的几种锁?
  5. 写单例模式
  6. 创建线程的几种方式
  7. spring bean的实例化过程?
  8. spring如何开启事务?启动类上面使用@EnabletransactionManager
  9. 在同一个类里面a调用b,事务能生效吗?为什么?是因为spring采用动态代理机制来实现事务控制,而动态代理最终都是要调用原始对象的,而原始对象在去调用方法时,是不会再触发代理了.
  10. 动态代理的实现?jdk和cglib (Spring在运行期间通过 CGlib继承要被动态代理的类,重写父类的方法,实现AOP面向切面编程) 的性能区别?
  11. docker,k8s使用过没有?docker实例跟镜像的底层实现?
  12. mysql有几种存储引擎?有什么区别?
  13. select * 有什么问题?可以优化的地方?
  14. 为什么使用自增的id?
  15. 了解深度学习吗?

三面 凉凉

  1. 自我介绍

  2. 走台阶问题,可以走一步或两步,走到第n步有几种结果。写出递推公式

  3. 进阶:如果必须走中间第m步台阶的话,有几种结果?写出递推公式,思路有了,让我写代码验证 (在这里纠结了好久,有一个点写错了,最后才找到错误的地方,写出来时间都要结束了,)

  4. 问了我HR面的问题?优缺点?遇到的困难?未来的计划?ps:心态炸了技术面问我这些问题,结果果然凉了

京东面经

提前批一面电话面

  1. 自我介绍
  2. 项目做了压力测试没有?怎么做的
  3. 链式执行三个方法a,b,c,如何输出每个方法的执行时间?AOP对项目里面所有的方法都会生效吗?
  4. 同一个类里面事务a方法调用事务b方法,b会生效吗?为什么?
  5. 如何实现A,B线程并行执行,然后跟C线程串行执行?
  6. mysql 数据库的存储结构?存储引擎?
  7. mysql的主从复制是怎么实现的
  8. 事务的最左前缀原则,对a,b,c三列上面建立索引,a,c会生效吗?为什么?
  9. 用你学习的知识,如何设计一个秒杀系统,尽可能的达到高访问量?

提前批二面电话面

  1. 自我介绍
  2. 项目使用的是分布式架构吗?怎么理解分布式架构里面的RPC?你会怎么设计RPC?
  3. RPC进行TCP进行数据传输的时候,需要注意什么?
  4. TCP的三次握手?二次握手的话有哪些问题?
  5. java 的hashMap 扩容的过程?
  6. java 集合在遍历的过程进行删除的话会出现什么问题?
  7. JVM的内存结构,栈起什么作用?什么时候栈会出现OOM?
  8. 怎么保证线程安全,有哪些措施?锁和volatile
  9. volatile关键字保证原子性吗?为什么?举例说明i++的问题,因为i++不是原子性操作?
  10. 线程的生命周期?
  11. mybatis 的 #$ 有什么区别、问题?$既然存在sql注入的问题,为什么还要使用它,它有什么应该场景吗?PS:#相当于预编译,然后对参数进行处理后,再set进行注入使用; $ 相当于进行拼接字符串,对参数没进行任何处理,所以存在sql注入的问题。为什么还要使用$呢,因为#会对参数进行处理,传入字符串时,就会加上引号,比如#{tableName},传入user,就会变成select * from "user" ,就会查询不到数据,所以当需要动态传入表名或者列名的时候就要使用到$
  12. 讲讲Spring的IOC 和AOP?
  13. Spring 事务使用过吗?事务失效的几个场景?为什么事务没有声明异常就会失效?PS:@Transactional(rollbackFor = Exception.class) 在程序里面使用try catch捕获到了异常,但是没有抛出异常,那么上层的Spring就不知道方法的调用情况,所以会失效。还有就是抛出的异常不是声明的rollbackFor 那个异常,也不会进行回滚,所以自定义的异常要继承于Exception。
  14. 类加载的过程?双亲委派机制?能不能自己写一个java.lang.String类来覆盖? PS:不能,因为是双亲委派机制,所以会委托给最顶层的父类bootstrapclassloader来加载,而根加载器能够找到系统自带的String,所以双亲委派最终会由最顶层的根加载器来执行jdk自带的java.lang.String,所以最后使用的是系统自带的String。 奇怪的解决方案之一,打破双亲委派机制,我自己定义一个类加载器来加载自定义的String对象,我不走双亲委派可以吗?答案还是不能,因为类加载最终会调用ClassLoader.defineClass方法,这个方法会在执行时检查包名是否是java.开头的,如果是,则会抛出异常,从而阻止你加载自定义的类。
  15. mysql的innodb索引有哪些?聚簇索引和非聚簇索引有什么区别?
  16. 如何进行mysql语句调优?
  17. 项目里redis是怎么使用的?redis做缓存会出现哪些问题?
  18. 缓存雪崩会带来什么问题?缓存击穿和缓存穿透的区别?
  19. 缓存雪崩的话,如何保证一致性和高并发?ps: 因为回答的是当缓存失效的时候,使用锁来控制访问数据库的线程只有一个,就问 在高并发的时候,使用锁后会降低性能,如何避免低性能的同时又要保证一致性。
  20. 为什么选择使用rabbitmq?rabbitmq 如何避免重复消费?
  21. 写代码的过程遇到的最大的困难是什么?如何解决的?

HR面

收到意向书

美团

美团到店正式批一面1h

  1. 自我介绍,
  2. 怎么高效的学习一个新知识?
  3. 问了20分钟秒杀项目的问题,全是高并发的时候考虑各种错误?
  4. 为什么使用rabbitMq?怎么实现削峰?
  5. rabbitmq消费者消费能力赶不上生产者生产了怎么办,消息积压的问题?PS:给消息加上过期时间,过期后进入死信队列,写一个程序处理死信队列;扩容,增加消费者;
  6. 写数据库后、缓存宕机了怎么办、数据库宕机了怎么办?PS:使用事务
  7. 秒杀还可以怎么优化?
  8. 限流算法,令牌桶知道吗?PS:漏桶算法:水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出;令牌桶算法:以一个恒定的速度往桶里放入令牌,请求处理之前需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
  9. java的三大特性?组合知道吗?
  10. 线程如何做到等待其他线程完成后执行,有几种方式?
  11. 线程池的原理?
  12. 类加载机制讲一下?
  13. JVM的内存结构?
  14. 堆的划分?什么时候进入老年代?什么时候发生FullGC?
  15. 运行一个Java程序,如何配置JVM?
  16. Integer a=126,然后使用a==126,会有什么问题?Integer类有什么危害?PS:不能使用等于比较结果,应该使用Integer.intValue
  17. 数据库查询数据的时候,使用的是int 还是Integer 接收结果?
  18. mysql的隔离级别
  19. mysql a、b、c三列上建立索引,a、c有走索引吗?
  20. mysql的MVCC机制
  21. TCP、UDP的区别
  22. TCP 保证可靠性的机制
  23. 算法:连续子数组的最大和;一个数组里面有正,有负,求最大的连续子数组和

美团到店二面1h

  1. 自我介绍
  2. 介绍秒杀系统
  3. Integer a = 222; Integer b = 222; a==b?
  4. 讲讲java的异常体系
  5. try 里面有return,finally 里面有return,会返回哪一个?
  6. 线程的几种状态?
  7. 讲讲synchronized,锁升级的过程?(PS:从无锁一步步讲到重量级锁)使用的方式?
  8. 讲讲lock锁?
  9. synchronized跟lock锁的优缺点,以及什么时候使用synchronized,什么时候使用lock?PS:lock可以实现公平、tryAccquire、可中断的加锁、condition可以指定唤醒、还有semephare、countdownlatch、cyclicbarrier
  10. 用java多线程的方式创建线程比直接创建线程好在哪里?PS:有两点
  11. mysql 的隔离级别?每个隔离级别可能会出现什么问题?以及如何解决的?
  12. 重点问了我可重复读隔离级别下如何解决幻读的问题?重点问了MVCC+next-key锁是如何来解决的?
  13. 串行化是怎么实现的?加的什么锁?
  14. mysql 的事务,事务的每个特性是如何实现的?问我隔离性是如何实现的?
  15. mysql 有哪些索引?主键索引和非主键索引有什么区别?
  16. 怎么设计索引?需要考虑哪些因素?
  17. 怎么使用索引?PS:如何避免索引失效?
  18. 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查看执行计划,来判断有没有走索引
  19. 口述算法:两个栈如何实现队列,当数据量特别大的时候,有没有什么可以优化的?PS:找到了慢的点,但是不知道怎么优化?
  20. 找到两个链表的交点?解决方案1: 双指针,然后又让我给出其他解决方案2:hashSet
  21. 大量的IPV4地址,判断一个IPV4是否出现过?用什么数据结构来实现,分析时间、空间复杂度
  22. 手写算法:字符串转成整数,字符串不保证输入合法,可能会输入各种字符
  23. PS:就问了Java基础和Mysql,问的很细

美团到店三面1h15min

  1. 直接做了一个小时算法,最后问了下HR面试的问题,怎么学习的?遇到问题怎么解决?
  2. 面试官介绍了一下他们部门的情况,然后直接开始手撕算法
  3. 定义一个类实现二叉树的数据结构
  4. 基于以上的类,实现计算二叉树的高度
  5. 计算二叉树距离最大的两个节点间的距离。
    1. 我定义一个全局变量维护最大高度,递归判断即可;然后要求我不维护全局变量
    2. 递归判断左右子树的高度,再递归获取当前左子树最大距离,右子树最大距离,然后再取跟经过当前结点的距离(左子树高度+右子树高度),最后取最大值即可。要求我,减少递归次数,进行优化
    3. 进行减枝优化,再要求我进行优化,然后提醒我可以返回多个值
    4. 最后返回的值里面包含 树的高度和最大距离 即可
  6. 给出一对 一颗二叉树中距离最远的结点,PS:返回结点里面包含了最大距离、高度、最远的左结点、最远的右结点、当前最深的结点(PS:这个是面试官提醒才想出来的)。
  7. 一个小时后,问了些HR面的问题。

腾讯面经

腾讯面试体验贼差,感觉就是刷KPI

腾讯提前批一面GG

  1. 自我介绍
  2. 介绍实习的难点,收获?
  3. 可承受的高并发是多少?秒杀项目你觉得还有那里可以优化?
  4. socket编程的主要步骤?
  5. linux 里面查看进程的CPU使用情况?
  6. 查看线程的CPU使用情况呢?
  7. 如何查看网络的使用情况?
  8. TCP、UDP的区别?
  9. 算法:数字 1 的个数:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数; 暴力超时,感觉是找规律,但是没找到

腾讯被捞一面GG

  1. 自我介绍
  2. redis的数据结构、
  3. 线程池的几大参数
  4. juc包下面有哪些东西?CountDownLatch 和 CyclicBarrier的区别
  5. mysql的隔离级别
  6. 找到两个链表相交的节点
  7. 感觉被刷KPI了

腾讯云被捞一面GG

  1. 自我介绍
  2. 两个算法:1. 把字符串空值变成%20; 2. 子矩阵最大累加和
  3. 会C++ 或者go吗?
  4. 12306是怎么扛住高并发的?怎么设计这个秒杀系统?PS:没考虑事务出现异常进行回滚,然后说我想的太简单了
  5. 了解Mysql的注入吗?PS:第一次听见注入这个概念
  6. 了解网络编程吗?讲一下网络编程服务端涉及的哪些底层函数调用?

网易

互娱一面

  1. 自我介绍
  2. 从到到尾介绍秒杀项目
  3. 介绍下DNS、ARP、HTTPS的实现
  4. SpringMVC的流程?Spring IOC的流程?
  5. where、groupBy、having、order、limit
  6. select...for update 会加锁吗?讨论一下加锁的情况?PS:讨论加间隙锁、行锁、next-key锁、表锁情况;
    1. 查询的字段不含索引,并且查询到数据,产生表锁
    2. 如果查询字段是索引,并且使用的是!=like 则会产生表锁,PS:没有查询到数据也会生成表锁
    3. 查询的字段包含索引,如果是a=1 产生行锁,如果是a>=1 产生next-key锁;没有查询到数据不产生锁。
  7. redis 的持久化?
  8. 虚拟内存?进程调度的方式?
  9. 单链表可能有环,找到环的入口结点,没有环的话就输出null

互娱二面

  1. 自我介绍
  2. 全程问项目跟实习,问了30多分钟,会根据项目或者实习中的某一个提出新的需求,问你怎么解决?
  3. 看过哪些源码?
  4. 最能体现你能力的一件事情?
  5. 你最大的优缺点?

互娱HR 面

  1. 自我介绍
  2. 为什么选择从事后端开发?你是怎么规划你的学习路线的?
  3. 你的职业规划是什么?
  4. 拿了哪些offer,面了哪些公司,选择该公司的理由?
  5. 看你没有投递银行,那你怎么看待互联网上班的强调?
  6. 愿意来广州上班吗?
  7. 除了学习还有其他兴趣爱好吗?
  8. 你有打哪些游戏?

招银网络

一面

  1. 自我介绍
  2. 项目中使用了哪些技术
  3. Bean是线程安全的吗?
  4. Spring怎么开启事务?事务里面有什么属性?(隔离级别喝传播属性)
  5. 一个类里面有方法A,B,两个方法都开启了事务,A里面调用B方法,如果B出问题了进行回滚,A会怎么做?
  6. 如果A没有开始事务,B开启了事务,A调用B,B出错了会怎么做?
  7. Spring事务的隔离机制?
  8. Mysql的索引?
  9. 有哪些情况会导致索引失效?
  10. Mysql 怎么取前100条数据?Orical怎么实现?
  11. 讲讲HashMap的底层实现?(讲了使用的数据结构、put操作的整个流程、扩容操作的整个流程、Hash寻址算法)
  12. 红黑树扩容的阈值为什么是8?
  13. 红黑树退化为链表的阈值为什么是6?
  14. Java多态的重载 和重写?
  15. Java深拷贝和浅拷贝?
  16. 算法题:贪心算法,185元需要几张人命币?

综合面 GG

  1. 自我介绍
  2. 项目中redis做token 是怎么做的? redis用来做缓存的话应该如何设计?(考虑穿透、击穿、雪崩)
  3. 知道消息队列吗?RabbitMQ 消息堆积如何处理? 如何保证消息不被重复消费?
  4. 上传大文件的时候,断点怎么做的?
  5. Mysql 的幂等性怎么做?
  6. 实习负责那些模块?
  7. Mysql 调优怎么做?

然后HR面
反问:我看网上评价说,招银承诺的薪资待遇拿不到这么多,是有扣费、扣绩效吗?

40%拿更多、50%持平、10%拿的比较少;也没说个所以然,就是给我说网上评价的都是那10%绩效少的。就是刚入职实习期有三个月,这三个月只有80%的工资。可以提前实习

薪资的话要等所有面完才能定下来,现在还不确定。

华为

一面

  1. java 8大基本类型
  2. java 集合类的接口有哪些
  3. arraylist 和linkedlist 的区别?
  4. 用linkedlist 存放100个学生信息,查找姓名为张三的学生的时间复杂度?
  5. jdk 有哪些类实现了 map 接口?(hashmap、hashtable、concureenthashmap、hashset...)
  6. hashmap 的数据结构? put 过程是怎么样的?
  7. 讲你了解的concurrentHashmap?(没听清楚他的问题,就记住了concurrentHashmap,然后就问他想了解什么,就让我讲了解到的concurrentHashmap)
  8. Https 和tcp、udp的区别?(https 1.x、2.x底层使用的是TCP协议;http3.x 底层使用的是udp协议)
  9. tcp 和udp 的区别?
  10. 手撕算法:合并一元多项式

面完之后,先不要走,等了不到10分钟就二面

二面

  1. 自我介绍
  2. 基本全是问秒杀和铁科院实习,问的很详细,简历上面写到的点基本都问了。(PS:实习写了kmeans、和决策树,竟然还问我这个)
  3. 简历上面写了使用自定义注解,就问我jdk注解的底层实现?问我怎么实现一个自定义注解,具体的步骤?
  4. java 里面浮点数的底层是怎么实现的?
  5. 问我synchronized和reentrainlcok的区别?
  6. 在讲的时候提到了互斥锁、可重入锁、CAS,然后又问我这些分别表示什么意思?
  7. 问我synchronized写在静态方法 和 非静态方法的区别?
  8. 好像问了我线程池的七大参数分别是什么? 然后给了我核心线程池10个,最大线程池20个,阻塞队列大小30个,有100个任务,线程池是如何工作的?
  9. 最后反问我有什么知识点是他没有问到的?可以讲讲他没问到的知识,然后找一个自己熟悉的说说,比如我就是重点表示我Mysql 很好,看了很多内容,但是没有被问出来,然后又讲自己看了很多源码也没有被问出来,对了,还要表示自己不是为了面试而学习,最后再讲讲自己学习这些知识带来的收获和提升。
  10. leetcode875题,做完后,面试官跟我聊了下思想,问我还有什么可以优化的,因为使用的是二分法,问我在什么场景下使用二分法

可以走了,等待第二天的业务主管面

业务主管面

  1. 自我介绍
  2. 问实习、问秒杀,问实习的收获、问遇到的最大的困难和怎么解决的?
  3. 问学习成绩、简历上写成绩是前10%是怎么得出来的(本科成绩也问)
  4. 问奖学金的比例、问论文发表情况
  5. 问工作意向地点
  6. 感觉就就正常的HR面,看别人又被问到过你对华为/鸿蒙的了解?这个可以准备下。

目录