参加春招的小tips!字节/腾讯/华为/美团/shopee/阿里 服务端开发面经

前言

写在最前面:目前接了字节的offer,校招想来字节的可以私信我

以下面经均是以时间线排列,最好每次面试完都自我总结一下
有些问题比较少的或者没列出来的基本都是在聊项目

腾讯一面(未知部门)

  • mysql varchar和char
  • char是固定长,初始长度是多少,赋值之后就是多长
  • varchar是可变长,赋值长度与初始长度无关
  • mysql建表规则
  • hashmap和treemap
  • hashmap不会排序,treemap会根据comparator进行排序
  • ArrayList和linkedlist
  • linkedlist是双向链表非循环
  • java基本类型
  • byte 1
  • short 2
  • int 4
  • long 8
  • float 4
  • double 8
  • char 2
  • boolean 1
  • jvm
  • jvm是java虚拟机,用来运行java编译后的字节码文件(.class),做到一次编译多次运行(跨平台)
  • collection的方法
  • add remove contains iterator size isEmpty
  • static方法访问非static变量
  • 类的静态成员(变量和方法)都属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问
  • java多继承
    1、若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量
    2、若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该* 方法时将无法确定调用哪个父类的方法。
  • 乐观锁 悲观锁
  • 悲观:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。
    乐观:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现
  • StringBuilder StringBuffer
  • 单例
  • 懒汉和饿汉

腾讯一面(IEG)

  • 算法:删除倒数第k节点
  • tcp/udp的区别 视频/语音为什么使用udp
  • 4次挥手时的timewait
  • tcp中的流量控制和拥塞控制
  • 进程和线程
  • 进程的调度
  • 进程的通信方式
  • 大端和小端系统
  • 队列能否不使用锁进行并发
  • 队列要用多少个堆实现
  • 静态链接和动态链接
  • C++的多态(Java)
  • 僵尸进程

字节一面

  • 算法:链表反转(m到n)
  • mysql索引 最左索引
  • visitor模式
  • 进程和线程
  • 进程通信
  • 线程同步
  • java锁
  • synchronize方法和代码块
  • synchronize怎么做到可重入
  • CAS 以及哪些领域同样用到cas
  • tcp4次挥手 为什么

阿里二面(几乎都是开放性问题)

  • 进程切换

  • 进程切换分两步:

  • 切换页目录以使用新的地址空间

  • 切换内核栈和硬件上下文

  • 对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。

  • (中断/异常等触发)正向模式切换并压入PSW/PC 。 (Program Status Word 程序状态字。program counter 程序计数器。指向下一条要执行的指令)

  • 保存被中断进程的现场信息。

  • 处理具体中断、异常。

  • 把被中断进程的系统堆栈指针SP值保存到PCB。(Stack Pointer 栈指针。Process Control Block 进程控制块。)

  • 调整被中断进程的PCB信息,如进程状态)。

  • 把被中断进程的PCB加入相关队列。

  • 选择下一个占用CPU运行的进程。

  • 修改被选中进程的PCB信息,如进程状态。

  • 设置被选中进程的地址空间,恢复存储管理信息。

  • 恢复被选中进程的SP值到处理器寄存器SP。

  • 恢复被选中进程的现场信息进入处理器。

  • (中断返回指令触发)逆向模式转换并弹出PSW/PC。

  • 页表

  • tcp如何保证可靠

  • tcp如何保证正确性 校验和原理?

  • 把伪首部添加到UDP上;

  • 计算初始时是需要将检验和字段添零的;

  • 把所有位划分为16位(2字节)的字

  • 把所有16位的字相加,如果遇到进位,则将高于16字节的进位部分的值加到最低位上,举例,0xBB5E+0xFCED=0x1 B84B,则将1放到最低位,得到结果是0xB84C

  • 将所有字相加得到的结果应该为一个16位的数,将该数取反则可以得到检验和checksum。

  • 10亿订单,每个区间取topk

  • 10亿订单存在哪里可以取出来

  • java能否多进程(多进程编程)

  • 使用Process和Runtime进行多进程编程

  • java内存管理

  • 回收机制

  • 堆的内存泄漏

  • 输入http之后的流程

  • java多线程(自己的看法)

  • 线程池设置多少合理

  • 如何让udp可靠

字节二面(几乎都是为什么)

  • http输入之后的过程

  • dns的解析过程

  • ip传输的过程

  • 整个请求传输的过程

  • 什么时候用tcp udp,什么场景下,为什么

  • html响应解析渲染的过程

  • html head里有什么元素

  • 什么时候要多线程,什么时候要多进程

  • 如登陆,如何保证安全性

  • 后端如何保证

  • 加密算法

  • 算法:k个一组地翻转链表

美团一面

  • HashMap的实现原理,插入如果冲突,是插入头部还是尾部

  • 是否线程安全,哪些是线程安全的

  • ConcurrentHashMap如何做到线程安全

  • ConcurrentHashMap的size()如何实现

  • LinkedHashMap的区别

  • 多线程都用什么来开发

  • ThreadPoolExcutor的参数,队列使用的是哪种,是否设置初始值,无界队列是否可以

  • ThreadPoolExcutor如何操作,原理

  • Excutors.newFixed()的缺点

  • 其他的线程池方法

  • 线程如何做到交替运行

  • 多线程如何做到顺序执行

  • 线程如何做到等待其他线程完成后执行

  • synchronized和lock的区别

  • mysql的隔离级别

  • mysql的默认隔离级别

  • 幻读是什么

  • mysql的可重复读是否可以防止幻读

  • b树和b+树的区别

  • b+树用作索引的数据结构优势在哪

  • 平衡二叉树与红黑树的区别

  • 算法:用stack实现queue

美团二面

  • 网络协议有哪些

  • ThreadLocal的作用,是否线程安全

  • 进程间的通信,java进程间的通信

  • Socket 这个方式可以实现,需要在父子进程间进行socket通信

  • 队列机制 这种方式也可以实现,需要父/子进程往队列里面写数据,子/父进程进行读取。不太好的地方是需要在父子进程之间加一层队列实现,队列实现有ActiveMQ,FQueue等

  • 通过JNI方式,父/子进程通过JNI对共享进程读写

  • 基于信号方式,但该方式只能在执行kill -12或者在cmd下执行ctrl+c 才会触发信息发生。

  • TreeMap讲解,里面有什么属性,entry里有什么属性

  • java里有哪些是不需要加锁的同步方法

  • 行锁和表锁的区别、场景

  • 组合索引的使用,eg. (a, b, c)索引,where a=x; where b=x; where a=x and b=x;哪个能使用索引

  • ArrayList和linkedlist的区别

  • 有哪些集合类是线程安全的

  • blockingqueue什么场景下使用

  • java有哪些锁

  • 算法:排好序的数组,找2个数的和为M的所有组合

  • 算法:大数据下,找出出现频率topK的ip

  • 在Hadoop/Spark下如何实现

  • 看过哪些书

字节三面

  • 最近的项目(我应该说最熟悉的那个。。)

  • 写懒加载单例 为什么里外层null判断 为什么加volatile 如何做到复用(泛型)

  • 算法:(login, logout),算出在线人数峰值

  • 算法:一组边,做成树结构(左点为父,右点为子)

  • mysql:每个班级中某科目前10,如何建立索引优化

  • 吃鸡用tcp还是udp?

  • 客户端发起10次服务调用,udp和tcp场景下,服务端调用的次数?

  • 多态的描述

  • 抽象和接口

  • 浅克隆和深克隆

  • 线程和进程的区别

  • 进程的同步

  • 死锁的条件,如何解决死锁

  • 进程句柄在内存中的结构

  • http中keep-alive的作用

  • 301 302 404 502的意义

  • CAS的原理,缺点,如何解决ABA问题

  • 静态内部类和非静态内部类

总结

最后我为大家准备了java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书一起免费分享给大家!
有需要的朋友点击这里备注csdn自行下载就好了
参加春招的小tips!字节/腾讯/华为/美团/shopee/阿里 服务端开发面经_第1张图片

你可能感兴趣的:(程序员,java,面试专题,腾讯,队列,java,面试,多线程)