从传统企业到字节、美团、京东,再到拿下华为Offer,程序员的逆袭之路。

前言

在六月份的时候,水友就跟我说想跳槽了,一直待在传统公司不是办法,当时准备了两个月终于拿到了华为的Offer,一起感受下大佬的面试经历吧!

背景

211本,985渣硕,毕业之后一直在传统企业。从6月底开始硬着头皮看题 ,然后从8月底开始准备秋招,到目前收获了几个offer,准备就签华为了。

 

京东

京东是第一个面试的公司,虽然过了,但是京东那成海了,估计捞不起来了。

一面(电话面试40min)

  1. 问本科做的什么,有没有学过计算机相关课程

  2. Spring是怎么识别http请求找到对应的controller的

  3. 对象在堆内存里面会不会有移动

  4. Integer能不能用==判断相等(-128到127有缓存)

  5. 重写equels为什么要重写hashcode(回答因为有一些需要用到hashcode的场景,比如set,会先判断hashcode是否相同,再通过equals来判断)

  6. JVM常见的垃圾回收算法以及都有什么缺点

  7. new一个object对象,然后再赋值给一个静态变量,然后问这个过程在JVM内存是什么个过程(回答会把创建的实例对象放到堆内存区域,然后再把指向对象的内存地址赋值给符号引用,让这个符号引用指向对应的堆内存区域)

  8. 这个对象的堆内存地址会不会发生改变(会,因为垃圾回收会对对象进行转移,比如复制法和标记整理)

  9. 输入URL到浏览器,整个过程是怎么样的

    • Spring是怎么处理HTTP请求的

      前置分发器 DispatcherServlet 接收到 HTTP 请求之后,将查找适当的控制器 Controller 来处理请求,它通过解析 HTTP 请求的 URL 获得 URI,再根据该 URI 从处理器映射 HandlerMapping 当中获得该请求对应的处理器 Handler 和处理器拦截器 HandlerInterceptor,最后以 HandlerExecutionChain 形式返回。

      前置分发器 DispatcherServlet 根据获得的处理器 Handler 选择合适的适配器 HandlerAdapter。如果成功获得适配器 HandlerAdapter,在调用处理器 Handler 之前其拦截器的方法 preHandler() 优先执行。

      方法 preHandler() 提取 HTTP 请求中的数据填充到处理器 Handler 的入参当中,然后开始调用处理器 Handler(即控制器 Controller)相关方法。

      控制器 Controller 执行完成之后,向前置分发器 DispatcherServlet 返回一个模型与视图名对象 ModelAndView 。

      前置分发器 DispatchServlet 根据模型与视图名对象 ModelAndView 选择适合的视图解析器 ViewResolver,前提该视图解析器必须已经注册至 Spring IOC 容器当中。

      视图解析器 ViewResolver 将根据 ModelAndView 里面指定的视图名称获得特定的视图 View。

      前置分发器 DispatchServlet 将模型数据填充进视图当中,然后将渲染结果返回给客户端。

  10. HTTP报文的格式是怎么样的(请求行,请求头,空行,请求体)

  11. cookie存在http哪儿

  12. cookie和session的区别

  13. mysql里面的索引类型以及联合索引的最左原则

  14. 了解过覆盖索引吗(没有了解)

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。 只扫描索引而无需回表的优点: 1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。 2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。 3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用 4.innodb的聚簇索引,覆盖索引对innodb表特别有用。(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询)

    覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引。

  15. 事务是怎么实现的。

  16. MVCC知道吗

  17. 事务隔离级别,分别能解决什么问题

  18. 说一下什么是线程安全问题

  19. sychronized和Lock的区别

  20. synchronized使用的方法以及底层原理

    同步方法是隐式的。一个同步方***在运行时常量池中的method_info结构体中存放ACC_SYNCHRONIZED标识符。当一个线程访问方法时,会去检查是否存在ACC_SYNCHRONIZED标识,如果存在,则先要获得对应的monitor锁,然后执行方法。当方法执行结束(不管是正常return还是抛出异常)都会释放对应的monitor锁。如果此时有其他线程也想要访问这个方法时,会因得不到monitor锁而阻塞。当同步方法中抛出异常且方法内没有捕获,则在向外抛出时会先释放已获得的monitor锁

  21. lock的实现方法以及底层原理(CAS volatile然后AQS,然后独占锁和共享锁)

  22. 线程池参数

  23. 场景题,核心线程数6,最大线程数10,队列无界,然后说一下过程。(由于无界队列,所以线程池中的线程数不会超过6,等待队列里的任务只能等待线程处理完任务后再来执行,从头说到饱和策略)

  24. 双亲委派模型了解吗(巴拉巴拉)

  25. 怎么破坏(自己实现classloader,然后重写classload方法,然后扯到Tomcat,然后问Tomcat为什么要这样做,真想给自己一巴掌,话真多)

  26. 反问,问面试官是哪个部门的,都是做什么的。

  27. 问有offer吗(没有)

二面 35min

  1. 自我介绍
  2. 项目介绍,架构
  3. 线程池,有用到多线程吗,线程怎么同步的
  4. mysql怎么建立索引
  5. 应用是单机部署还是多机部署
  6. redis部署模式(主从和哨兵)
  7. 目前的研究课题是什么
  8. 深度学习模型,CRNN CTPN是什么,整个框架
  9. 分布式有接触过吗
  10. 反问

电话突击面  30min

    1.问项目

    2.问java基础

    3.问redis

    4.sql删除重复数据,保留一个

delete from table where sex = (select sex from table group by sex having count(*) > 1)这是删除所有

Delete from table where id not in (select min(id) as id from table group by sex)

    5.hashmap的原理

    6.线程安全的本质,怎么保证线程安全

    7.是什么时候学的java

    8.反问

HR面 

  1. 自我介绍
  2. 问学习,遇到未知领域怎么做,怎么学习的
  3. 有没有对象
  4. 有什么offer,怎么选择
  5. 职业规划
  6. 反问

 


字节

一面(70min)

  1. 自我介绍
  2. select和epoll的区别,水平触发和垂直触发
  3. so文件存在内存的哪个地方
  4. 页面置换算法
  5. 虚拟内存,为什么虚拟内存会远大于物理内存
  6. 进程的内存结构
  7. CPU超频和超线程的区别,超频有什么优势,超线程呢(不知道)
  8. TCP中syn-flood怎么避免
  9. HTTP中协商压缩
  10. websocket是怎么握手的
  11. ==和equals的区别
  12. hashmap和hashtable的区别,抽象类和接口的区别
  13. 常见的HASH算法有哪些,一致性hash了解过吗,为什么有虚节点,一致性hash的应用场景(分布式缓存)
  14. 解决hash碰撞的方法,开放地址法和拉链法外还有吗
  15. 垃圾回收,回收算法,选一个回收器介绍
  16. 常见的排序都有哪些,归并排序和堆排序的过程
  17. kafka都用来做什么,怎么保证系统的高可用性,怎么保证消息不会丢失
  18. linux删除空行的命令
  19. linux如何查看cpu的核数,lscpu cat /proc/cpuinfo top
  20. redis常见数据结构
  21. redis的哨兵模式
  22. redis的过期数据删除,内存满了怎么办,默认是哪个策略(noeviction,满了就报错,禁止淘汰数据)
  23. 计算机网络中的拥塞控制
  24. 算法题,根节点到叶子节点组成的数的和。
  25. 1G大小的文件,内存1M,每行由单词组成,找出频数最高的100个。(归并)最小堆

 

二面(80min)

  1. 自我介绍
  2. epoll没处理完数据会怎么样
  3. connect和accept对应的TCP状态
  4. 容器的文件系统
  5. 容器怎么实现CPU资源隔离的
  6. ConcurrenHashMap怎么扩容,实现机制
  7. hash冲突的解决办法
  8. 死锁产生的条件
  9. 互斥条件(不可剥夺条件,请求和保持条件,循环等待条件)

  10. mysql事务的特性,隔离级别,能解决什么问题,页锁(头会听说)
  11. 算法题:
-有序的二维数组查找

-LRU+TTL

 

三面(40 min)

  1. 自我介绍,项目问题
  2. redus在项目中用在哪些方面,常用数据结构,zset怎么实现的,zset应用场景
  3. udp怎么实现可靠传输,怎么保证大文件传输可靠,怎么实现断点传输。
  4. nginx负载均衡算法,一致性hash算法,一致性hash带权重怎么实现
  5. TCP中首部中的序号占多少个字节,为什么要这样用。
  6. 怎么学习技术的,都学过什么。
  7. 容器(docker)的网络模型
  8. 研究课题相关
  9. 反问

 HR面(30min)

     主要就问了有哪些offer,打算去哪,有没有女朋啊和一些技术问题的概念解释。


华为

一面(30min)

  1. 自我介绍
  2. .问项目,自我介绍里面的
  3. 3.算法题:给定一个数组,找出里面能构成三角形的最大周长构不成就返回0
  4. 4.java设计模式(模板模式,代理模式,工厂模式,单例模式)
  5. 5.快排和归并排序的区别(都是基于分治的思想,归并排序是稳定的排序,O(nlogn),最坏情况也不变,快排是不稳定的排序时间复杂度O(nlogn),最坏情况是O(n2))
  6. 6.final用法都有什么作用(修饰变量,类,方法)
  7. 7.不可变对象
  8. 8.根据前序中序求后序

二面  (40min)

1.自我介绍

2.面向对象的设计原则,单一职责原则,开闭原则(怎么实现)

3.设计模式,你熟悉的(模板模式,代理模式,工厂模式,单例模式)

4.中间件(redis,kafka)

5.mysql语句,查询一个字段,用某个字段排序,显示某一页多少个内容

6.算法题:拼单词,字符可以能拼出哪些单词。

三面(45min)

1.自我介绍

2.深挖项目(微众银行的比赛,选择标准,取得成绩的标准,你是负责干什么的,团队分工,团队是否有分歧,怎么解决的,项目有没有遇到什么问题,怎么解决的,如果你这个东西要商用的话,还需要怎么改进,有没有考虑过安全问题,怎么判断恶意访问)

3.问了科研项目,有没有遇到什么问题,遇到最困难的问题是什么,怎么解决的,有没有看过源码。

4.反问(问了部门组成,以及连接与协同是做什么的(物联网))

当时在字节和京东直接犹豫了很久,最后还是选择了华为


美团(凉经)

一面

     1.自我介绍

     2.聊项目

     3.手撕mysql,查询点播量最高的视频

select viod_name from table order by times desc limit 0,1

     4.mysql,查询点播最高的用户

select userid,count(*) as times from table group by userid order by times desc limit 0,1

    5.redis的数据结构,redis的性能为什么好

    6.redis的过期机制和内存淘汰策略

    7.redis持久化的方式(没答出来)

    8.redis并发问题(没答出来,两个用户同时修改一个key)

    9.redis lru是怎么实现的。(通过链表实现的)

   10.java的集合,concurrenthashmap怎么解决并发问题的,Hashtable怎么解决的。

   11.常用的垃圾回收算法(parralell)

   12.cms怎么解决内存碎片的问题(full gc)

  • 增大Xmx或者减少Xmn

  • 在应用访问量最低的时候,在程序中主动调用System.gc(),比如每天凌晨。

  • 在应用启动并完成所有初始化工作后,主动调用System.gc(),它可以将初始化的数据压缩到一个单独的chunk中,以腾出更多的连续内存空间给新生代晋升使用。

  • 降低-XX:CMSInitiatingOccupancyFraction参数以提早执行CMSGC动作,虽然CMSGC不会进行内存碎片的压缩整理,但它会合并老生代中相邻的free空间。这样就可以容纳更多的新生代晋升行为。

   13.mysql建立索引的原则

   14.四次挥手的过程和状态

   15.算法题:求两个String类型的整形加法String num1 = "123";String num1 = "456";相加然后反转

二面(80min)

    1.自我介绍

    2.说一下项目里面的具体做什么的,怎么保存在线观看的人数

    3.mysql大表优化

    4.有用过哪些redis命令吗(没有)

    5.数据库里面都有什么表

    6.项目里面实现最难的功能是什么

    7.进程和线程的区别

    8.为什么进程切换慢,线程切换快

    9.怎么实现多线程

    10.线程池都有什么,怎么创建,线程池参数,有用过线程池吗(没有)

    11.线程都有哪些状态,怎么让线程进入阻塞状态,阻塞,非阻塞,同步和异步的区别

    12.JVM内存模型

    13.算法题

两个链表相加,1-2-3-4-5,1-2-3-4结果就是1-3-5-7-9

两个线程交替打印奇数和偶数(说了想法,没有写)

    14.最近在看什么书吗,有没有接触过什么新技术

    15.有offer吗

后面没收到任何通知,凉凉。这么简单的算法题,当时那面试官一脸看弱鸡的表情,给我整怕了,没写好,虽然写出来了。 


写在最后

     天道酬勤,虽然准备晚了,但是努力就会有好结果,中间也有迷茫,也有失落,但是硬着头皮在2个月不到的时间刷了400道左右的题目。

    当然最重要的一点就是坚持,不要放弃。船到桥头自然直。柳暗花明又一村。offer总会有的,不要妄自菲薄。坚持才会胜利,冲鸭!!!

   最后把面试资料100%免费分享给大家,也帮大家都能升职加薪!

资料领取:戳这里免费领取,暗号:CSDN

爱编程,爱分享,听说点赞+关注的都进大厂了哦!!!

猜你喜欢

转载自blog.csdn.net/qq_43080036/article/details/109226628