2024春招实习

学习知识

笔记地址:gitbook笔记

主要学习以下知识:

刷题题单

github仓库链接

持续更新中......

笔试、面试经历

很多回忆录,可能会没有很明确的前后顺序,但目前感觉起来,每一个面试官都会在各个知识模块里面挑一个来问。

  • MySQL

  • Java

  • Redis

  • 项目

  • 计算机网络

  • 操作系统

  • 软件工程

美团 软件开发工程师-后端方向

  • 2024-03-12 投递简历

  • 2024-03-16 笔试

    • 五道题目

    • 两道签到题目

    • 一道矩阵快速幂求模

    • 一道求数组的所有子数组的众数之和(这里数组中的元素只为1和2)

      • 前缀和+遍历区间,过了70%

      • 需要使用树状数组来实现

    • 一道求逆序对

      • 树状数组

2024-03-21 到店一面

  • 回忆,没有按照顺序

  • 常用的数据结构有哪些?各自有哪些特点?

  • MySQL的隔离级别有哪些,分别解决了哪些问题?

  • 进程和线程的区别

  • 进程的同步和互斥是什么意思

  • 如何实现进程or线程的互斥(这里我觉得就是想问Java里面如何实现的,就追问了一下:是指Java吗)

  • Java的锁有哪些?各自有什么特点和区别?(想到哪说到哪,说的有点乱😓

  • 了解消息队列吗?(不了解,但回答了知道一些Redis的消息队列)

  • Redis的数据结构有哪些?

  • 对一个数组按照分数进行排序,用什么数据结构?(zset)

  • zset底层数据结构了解吗?介绍一下?(只记得优先队列,跳跃表不记得)

  • TCP为什么需要三次握手?

  • (我说我的研究方向为网络安全)加密方式了解吗?

  • 如果让你进行加密处理,你会用什么方式?(答了tls的对称加密)

  • 对称加密安全吗?

  • 这里不仅是http的,比如rpc过程中,用非对称加密呢?(不知道想问什么,就说了非对称加密的特点)

  • 手写了一个SQL

    • 一个表,三个字段,成绩学科和姓名,查询所有科目的分数都大于85的学生的姓名

  • 最基础的二分查找

    • 升级一下,有多个target,然后找到所有的target

  • Java里面有哪些集合?(没有深问,我就没有深答)

  • 项目里面你收获最大的是什么?

2024-04-02 优选一面

2024-04-02 一面被挂,美团优选捞起,一面

  • 项目

    • 加了什么索引

    • 前缀索引怎么用的

  • mysql的log,undo log,redo log,bin log的二阶段提交

    • undo log 事务回滚和mvcc

    • redo log 持久化

    • binlog 和 redo log的二阶段提交

  • redis 持久化

    • RDB和AOF

      • AOF的三个刷盘时机(只跟page cache写入具体文件(fsync)有关!!!

      • AOF的重写(没有问,也没说)

      • RDB。

  • HashMap的put

  • 算法题:寻找链表的倒数第K个数

2024-04-03 优选二面

  • 自我介绍:他们的业务,我的自我介绍

  • Java G1 垃圾收集器

  • Redis的数据类型

  • hyperloglog的作用和原理

  • 说说你对Spring AOP和IOC的理解和作用

    • 答了思想,具体实现没有问,我也没有答

  • 为什么要有传输层(为什么需要UDP/TCP)

    • 想了很久,最后说了端到端,能够提高通信效率

  • 简历上写了,进程的管理,进程管理都包括哪些

这俩问题前后一起问,问蒙住了,这个答的也很垃圾,一边提示一边答,只说了进程创建、进程的调度,进程的内存

  • 文件

  • 内存

  • 外存

  • 进程的创建,进程的状态

  • 进程的调度

  • 进程的IO设备

  • 算法题:

    • 合并K个升序链表,不让用库函数(不知道到底什么意思....,我以为不能用优先队列.....)

      • 结束想想,原来是不让用排序函数。。。。优先队列肯定可以用的啊,我是傻逼

  • 一个好代码是如何评判的?

    • 只说了正确性,鲁棒性,性能,可读(对着力扣的代码说这个,真没必要吧.....,就是想考软件工程)

    • 可移植性

    • 可复用性

  • 说说你的代码有哪些问题?

    • 递归爆栈

    • 异常处理

  • 你在大学+研究生这么多年,最大的收获是什么?

  • 你有没有进行过一些困境,并主动去做出一些改变,最终的收获是什么?

  • 你有没有做出一些走出舒适区的事情,比如尝试新的技术栈等?最终的收获是什么

阿里云-基础研发

部门:阿里云智能集团-阿里云智能-库存调度

  • 2024-03-13 上午接受内推,下午电话简历面

    • 介绍一下基本情况

    • 聊项目

      • 简单介绍一下项目

      • 讲一下自己做了什么工作

      • 因为写了区块链项目的不可篡改和溯源,让我向小白介绍一下区块链如何保证不可篡改的。

      • netsdp的性能问题:

        • 性能注定不高,内部测试100MB

        • 底层还是go的TCP和UDP的实现

        • 属性加密性能低。

        • 网络中的配置下发,会占用网络IO

        • 如何缓存这些配置,go cache(no Reids)

        • 用户量,几百几千。

    • 专业技能写了一堆,但没有怎么问,只是问了一下Java并发在项目里面是怎么用到的。

    • 手撕代码

      • 简单题,数组里面只出现一次的数

      • 简单题的延申,一个数只出现了一次,其他数出现了三次,问怎么实现

      • (延申我不会空间的O(1),说可以写O(n))

      • 增加一些异常处理,比如数组中有多个数出现了一次,数组中有的数没有出现三次,或者多余了三次等

  • 2024-03-17 笔试(100分钟)

    • 8道单选。

    • 7道不定向选择

    • 3道编程

      • 质数的理论。有一个数组,和一个数字k,一次操作是指对数组中的某两个数,一个加上k,一个减去k,可以进行操作无限次,被操作的数可以随机,问是否能够让数组的所有元素的公因数为1,如果可以则输出YES,否则输出NO。

      • 求一个字符串的所有子串经过压缩后有多少个回文子串,这里压缩指的是连续相同的数会被压缩为1个数,字符串中只有0和1。输出的时候,需要分开奇数长度的回文子串个数和偶数长度的回文子串的个数。

      • 树的操作吧,忘记了,很难

    选择涉及的东西比较杂,什么都有,会涉及到MySQL语句的正确性,Linux的命令(awk grep等),http的某些字段的取值的作用,二分算法,kmp算法(手动模拟,问比较几次),操作系统的LRU,FIFO的页面置换等,什么都会考察一点。

字节跳动-商业技术

无笔试

一面

  • 介绍项目,聊项目

  • 简单介绍一下Java常用的数据结构和对应的一些扩容,使用和实现的特点

    • Array List

    • LinkedList

    • HashMap

    • Set

    • ......

  • 进程、线程、协程之间的区别?

  • 使用过JUC的工具类吗?了解过吗?项目中针对多线程如何实现的

    • 使用过,没有具体问,也就没有具体答,说了synchronized 和 volatile的一些原理和使用

      • volatile保证了两个特性,可见性和有序性

    • 应该还包括:CAS操作来实现非阻塞的并发,原子类,线程池。

  • 既然指令重排序给我们多线程带来了如此高的代价,为什么还要排序?

    • 答了提高CPU利用率和吞吐量

    • CPU基本都是流水线设计,在发生指令冲突时,会导致流水线停顿,我们可以通过不改变指令最终的结果的前提下,调整指令的执行顺序,来尽可能的减少流水线停顿,从而提高CPU的利用率

    • 至于volatile中的底层也是采用插入指令的方式来防止指令重排序,如store store,load load,store load和 load store等指令来禁止特定的指令重排序

  • Redis缓存的雪崩、击穿、穿透和解决办法

  • MySQL索引结构

  • B+树的优点

    • 三个优点

    • 支持范围查询

    • 相同查询次数下IO次数少

    • 增加和删除效率更高

  • 设计索引的时候有哪些原则,或者说如何设计索引

    • 区分度高的字段

    • 针对较长的字符串使用前缀索引

    • 对于经常进行排序的字段和group by的字段进行索引

    • 对于经常一起查询的字段建立索引

    • (不记得了,又加了点使用索引时,使用覆盖索引

    • 索引要适量,不能太多,尽量建立联合索引

  • Mybaits plus是什么框架

    • 好像他真的不知道

  • 你们都是使用SpringBoot吗?SpringBoot有哪些优点

    • 约定大于配置,无需进行复杂的配置

    • 即开即用,极大的加快了开发效率

    • 使用第三方组件和库,只需要加入一个starter即可

  • 项目里面看到是客户端开发,那么你们如何协同这个版本问题

    • 类似tls协商机制,在连接前双方进行了版本的协商

  • 手撕题目

    • 二叉树的右视图

二面

  • url输入到返回页面

  • 前端如何渲染html的

  • html和js执行加载顺序

  • 说说你对mysql和redis的理解?

  • 为什么不把数据全部存redis呢

    • redis断电数据没了

  • 那数据如何恢复呢

    • rdb

    • aof

  • redis集群里面都会恢复rdb吗

    • 主从复制的时候

    • 主从断连恢复

  • 协程和线程的区别

  • 线程的通讯方式

  • 进程能够看到协程吗

  • tls握手过程

    • 需要再背背,说的没有逻辑

  • 证书校验和颁发的过程

  • java和mysql一点没问(估计是上个面试官问过了

  • 僵尸进程和孤儿进程的区别

  • 算法题:

    • 二叉树路径和 1 2 3,

    • 但3 不是求路径数,而是输出路径

三面

字节都有面评,前面问到的知识点基本不会被问到,所以可以针对这个做一些准备

  • 项目

  • 看到你们这个有加密,证书什么的,了解ssl和tls加密过程吗

    • 说了tls的非对称加密交换对称加密密钥

    • 说了非对称加密和对称加密的区别

    • 说了为什么要用对称加密的方式来传输数据,而不是非对称加密传输数据

  • aof写满了怎么办?

    • (这个上次问了aof,但没有问到aof重写,这次补充问了。。。。。

  • MySQL索引了解吗?聚簇索引和非聚簇索引的区别?

  • InnoDB引擎的索引储存结构了解吗?说说,为什么这样(其实就是为什么是B+树)

    • 开始吟唱嘎嘎嘎

  • 看到你用的Java,这里问一下Java如果进行频繁的GC该怎么办?

    • 调大堆内存

    • 避免创建很大的对象,比如大数组

    • G1里面避免设置太小的停顿时间

    • 分配对象时,尽量去分配到年轻代,而非老年代,触发新生代GC,要比老年代的GC更有性价比和迅速

  • Java线程池的工作原理

    • 先说了一堆线程池参数,最后不让我说了嘎嘎嘎

    • 针对工作线程和核心线程还有阻塞队列来决定此时如何处理新来的任务

  • 线程池的状态有哪些

    • running

    • shutdown

    • stop

    • tidying

    • terminated

    • (其实还应该说各个状态如何进行切换的,以及最后的terminated状态进入的条件是什么)

  • 线程池销毁工作线程的过程是什么?

    • 不好意思,我不会(嘎嘎嘎

    • 只说了可以设置他进行KeepLiveTime,但具体怎么销毁不知道

  • 手撕题,大数相乘

    • 模拟就好了,没写完,讲了思路和代码的优化思路

    • (临时写代码思路有点乱,写的复杂度有点高,说了思路和优化方法,面试官表示理解和赞同)

腾讯云 一面(挂)

无笔试

  • 聊项目,介绍一下项目和结构,以及项目中的难点

    • 难点 真不知道哪里难的哈哈

    • 说的有点烂

  • DNS过程

  • tls/ssl的加密过程

    • 不是握手过程,是加密过程,感觉在考加密算法

  • ....不记得了

  • 手撕题,消融相邻和为10的字符串

    • 如128191 -> 2

最后更新于

这有帮助吗?