面试刷题10-7

vivo(软件研发工程师)

6.4 笔试 6.12 面试(现场面)

一面(40分钟)

  • Static变量和方法有什么特点,能不能访问非静态成员,为什么

不能,整个类共有的。

  • Static方法能不能重写,为什么。父子类调用方法访问顺序

不能,Static是编译时就定了

  • 抽象类和接口的成员变量有什么差别,类访问权限
  • HashSet怎么实现的,底层

底层就是用HashMap,只有key

  • HashMap怎么遍历的

遍历数组

  • 线性结构有哪些,二叉树属于吗?
  • 二叉树最多有多少个节点?第k层有多少个节点?
  • 冒泡排序怎么实现,怎么优化,两层循环各是干什么的。
  • 多线程中wait和sleep方法的区别,锁
  • MVC模式怎么实现,流程介绍。
  • Hibernate怎么和上层交互,用过哪些数据库,了解多少。
  • 手写sql:查询从6.1开始到现在每天的评论数量;评论大于1000的数量(注意日期函数)
  • 说论文,说项目(具体细节不说了……)
  • 项目方法是自己提出来的还是有前人做过,有什么不同,改进在哪里。

这个面试题比较基础

字节跳动(游戏研发工程师)

6.30 笔试 7.7 技术一二三面 7.12 hr面(都是视频面)

一面(一小时)

  • 自我介绍
  • 网络分层结构
  • TCP为什么在网络环境不好的时候慢
  • 滑动窗口机制

滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):

  • Google的BBR算法
  • 抽象类和接口的区别
  • 数据结构底层 list map arraylist hashmap
  • 堆 栈 方法区的区别
  • Hibernate的session
  • 数据库底层
  • 说项目(都是问论文,不说细节了……)
  • 项目用到哪些设计模式 有帮助么
  • 算法:6个或8个苹果装一个袋子,最少袋子数量 DP背包问题
  • 为啥投游戏

二面(50分钟)

  • 聊项目和论文……
  • JAVA垃圾回收算法
  • 数据库mysql和redis区别
  • 并发:线程池、锁等
  • 对中间件对了解

中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。

中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。

中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。在众多关于中间件的定义中,比较普遍被接受的是IDC表述的:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

  • 场景题设计:卡牌游戏数据结构 抽卡概率 十连抽必出卡 单卡概率出
  • 场景题设计:游戏服务端和客户端的设计 分别考虑什么

三面(一小时)

  • 了解哪些数据结构 以时间复杂度的角度说
  • List Map……LinkedList如果要查询O(1)怎么设计
  • 设计模式:项目里怎么做的 优化性表现
  • 深挖项目(问的问题都很深,深挖底层的那种……)
  • 算法:链表k段反转
  • 场景题1:很大地图 每个npc移动 数据结构设计 怎么找周围的npc 算法 以圆半径怎么找 注意玩家是在移动
  • 场景题2:游戏排行榜 弹幕的数据结构设计 考虑哪些因素 怎么存数据库里
  • 场景题3:前100的玩家怎么找 说了分治 分治怎么做 分布式的话怎么一致……

 

百度(Java研发工程师)

7.18 一面 7.19 二面 7.22 三面(都是电话面)

一面(一小时10分钟)

  • 自我介绍+说项目…
  • HashMap 底层数据结构
  • 有序 TreeMap怎么实现 倒序呢?

底层是红黑树

  • 有哪些异常 怎么处理 自己定义过异常吗

(1)RuntimeException:运行时异常,也叫未检查异常,是Exception的子类,但不需捕捉的异常超类,但是实际发生异常时,还是会导致程序停止运行的的,只是编译时没有报错而已。比如除数为零,数组空指针等等,这些都是在运行之后才会报错。此类异常,可以处理也可以不处理,并且可以避免。

(2)在Exception的所有子类中 除了RuntimeException类和它的子类,其他类都叫做非运行时异常,或者叫已检查异常,通常被定义为Checked类,是必须要处理可能出现的异常,否则编译就报错了。Checked类主要包含:IO类和SQL类的异常情况,这些在使用时经常要先处理异常(使用throws或try catch捕获)。

异常的处理:

异常的处理分为消极的处理(自己处理不了,就往调用它的地方上抛throws,异常没有解决,只是抛出)和积极处理(异常捕获,捕捉异常通过try-catch语句或者try-catch-finally语句实现)

 

消极的处理:
语法:public void m1() throws 异常类名1,异常类名2{}
特点:相当于推卸责任,最终问题依然无法得到解决。
允许编译通过。
当上抛的异常为非运行(已检查)时异常时,调用此方法的调用者必须处理。
当上抛的异常为运行(未检查)时异常时,可以处理可以不处理。

积极的处理:(异常捕获)
将异常直接捕获,并且做出处理
语法:

try{
      //异常代码
    }catch(异常类名 引用名){  

        //当异常产生执行的代码
    }


try 后的catch代码块 只能匹配成功一个
catch后声明的异常为父类时,它能够捕捉的异常为它本身+所有子类异常(多态的体现)
注意:catch代码块捕获异常时,子类异常必须定义在父类异常前面,否则会编译出错

finally代码块:一定会执行此代码块中的代码,常用来关闭资源,

    try{
    
    }catch(){
    
    }finally{
        //无论是否产生异常,一定会去执行的代码
    }


注意:finally代码块中不要定义return语句
 

 

 

  • 类加载器
  • 违背双亲委派模型的例子 Tomcat
  • Tomcat违背过程
  • 自己写一个HashMap走双亲委派会被覆盖吗
  • 从浏览器传入到Tomcat处理全过程
  • SpringMVC全过程
  • 堆内存介绍 两个survivor频繁切换会进入老年代吗?设置阈值的参数是啥?
  • Redis管道
  • Redis文件持久化 会影响主进程吗
  • Redis分布式锁的实现
  • MySql隔离级别 怎么实现可重复读的

面试刷题10-7_第1张图片

MVCC多版本并发控制(Multi-Version Concurrency Control)是MySQL中基于乐观锁理论实现隔离级别的方式,用于实现读已提交和可重复读取隔离级别。

  • 间隙锁咋实现 用sql语句说一下
  • MySql索引怎么实现
  • 为啥用B+树范围查询比较好?

面试刷题10-7_第2张图片

  • Mysql时间戳 怎么不修改自己增
  • 算法:两个栈实现队列
  • 算法:找二叉搜索树的第k小
  • 算法:X的n次幂怎么实现

 

二面(一小时)

  • synchronized底层原理 在哪有应用
  • 场景:银行转账 synchronized怎么实现 在哪里加锁 A和B同时互转呢 一定要同时
  • wait方法 notify方法
  • 线程池
  • Spring 事务传播机制 基于什么实现
  • 场景:事务a里调用事务b,b方法是私有的,怎么做
  • Spring AOP简单说一下
  • mysql联合索引,有ab两索引,a=1 order by b能做么(还有几个sql语句的场景让说索引)
  • 泛型,有个list extend 数字,list可以add吗
  • 场景设计:客户信息 手机号联系方式可以有1~n个,一个人可以有多个号码,新来一个客户判断是否在数据库里,比如另一个同名的人有2个号码,全部包含在第一个人里就算在,否则不算。数据库存很多个数据,怎么设计
  • 设计模式 说五个以及项目里用到的
  • 谈项目……

三面(一小时)

  • 自我介绍
  • Linux命令awk sed
  • 位运算 取模用哪个
  • TCP UDP HTTP 浏览器输入网址之后的流程
  • 知道哪些架构 随便说一些
  • 讲一下微服务SOA DDD
  • CAP原理

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

  • 说下对分布式的理解


 

阿里(Java研发工程师)

阿里云 7.24 一面 8.2二面 (都是电话面)

一面(一小时)

  • 自我介绍
  • 项目难点 遇到的最大的问题,怎么解决的。
  • 输入www.baidu.com的全过程

DNS,TCP,HTTP

  • 自己实现服务端时,怎么处理响应 ServletRequest和ServletResponse

HTTP协议解析

  • 线程池怎么创建 几种线程池介绍一下
  • 无界阻塞队列和有界阻塞队列区别 fixedThreadPool用无界队列有什么不好
  • JDK版本 你用的是多少

1.8

  • 介绍下集合类(Collection、Map)
  • HashMap和HashTable的区别
  • 介绍下ConcurrentHashMap
  • switch 支持类型

switch表达式后面的数据类型只能是byte,short,char,int四种整形类型,枚举类型和java.lang.String类型(从java 7才允许),不能是boolean类型。

  • OOM遇到过吗 原因 解决方案 你遇到过哪些
  • 给8G的内存 怎么设置堆的参数
  • 3亿数据量 插入一条sql语句发现很慢 怎么调优
  • drop delete truncate 区别 能不能回滚
  • 1w个数据无序的 怎么找出前1000个最大的 有序的呢     topK问题
  • Spring MVC流程

二面(1个半小时)

  • 项目难点 平时怎么学习看书的
  • zookeeper应用场景
  • 负载均衡 Nginx七层负载均衡、DNS怎么做负载
  • 缓存和数据库的一致性怎么保证
  • 服务器压力一样,连接过来怎么保证负载均衡,用zookeeper
  • 对大数据的了解
  • 算法:归并排序
  • 算法:设计一个重试执行器

网易有道(Java研发工程师)

8.3笔试 8.16 一面 8.30 二面 9.6 三面 9.12hr面(都是视频面)

一面(40分钟)

  • 常用的数据结构
  • 各种链表之间的区别
  • 算法:链表归并排序。递归写法和非递归写法两种
  • 归并排序的难点
  • 数据库 索引 什么时候不适合用

比较基础

二面(80分钟)

  • 算法:实现根号2,保留10位小数

牛顿迭代

  • 算法:实现一致性hash

一、前言

在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载均衡的作用。

但是普通的余数hash(hash(比如用户id)%服务器机器数)算法伸缩性很差,当新增或者下线服务器机器时候,用户id与服务器的映射关系会大量失效。一致性hash则利用hash环对其进行了改进。

二、一致性Hash概述

为了能直观的理解一致性hash原理,这里结合一个简单的例子来讲解,假设有4台服务器,地址为ip1,ip2,ip3,ip4。

一致性hash是首先计算四个ip地址对应的hash值hash(ip1),hash(ip2),hash(ip3),hash(ip3),计算出来的hash值是0~最大正整数直接的一个值,这四个值在一致性hash环上呈现如下图:

面试刷题10-7_第3张图片

  • 一致性hash底层用的什么数据结构

一致性hash算法通过一个叫作一致性hash环的数据结构实现

  • 介绍项目
  • HTTP协议1.0、1.1、2.0的区别

重点是长连接和短连接。

  • HTTPS协议双方确认传输密钥过程

 

  • 场景:select name, age from user的数据库查询过程,以及怎么优化,有索引以及无索引时
  • update age from user无索引是行锁还是表锁,为什么
  • mvcc隔离级别怎么防止幻读

InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,但是不能解决幻读问题。
什么是幻读?
事务A读取了一个范围内的数据,此时事务B在该范围内插入了一条数据,并立马提交了事务,此时事务A再次读取这个范围的数据时,发现多了一条,就好像幻觉一样。

什么是MVCC?
多版本并发控制。InnoDB为每行记录添加了一个版本号(系统版本号),每当修改数据时,版本号加一。
在读取事务开始时,系统会给事务一个当前版本号,事务会读取版本号<=当前版本号的数据,这时就算另一个事务插入一个数据,并立马提交,新插入这条数据的版本号会比读取事务的版本号高,因此读取事务读的数据还是不会变。
例如:
此时books表中有5条数据,版本号为1
事务A,系统版本号2:select * from books;因为1<=2所以此时会读取5条数据。
事务B,系统版本号3:insert into books ...,插入一条数据,新插入的数据版本号为3,而其他的数据的版本号仍然是2,插入完成之后commit,事务结束。
事务A,系统版本号2:再次select * from books;只能读取<=2的数据,事务B新插入的那条数据版本号为3,因此读不出来,解决了幻读的问题。

  • 主从同步过程,binlog两种类型的区别
  • 场景:用数据库实现分布式数据库唯一id递增
  • 每个数据库缓存失效的那一刻怎么办
  • 说下对dubbo、zk等分布式的理解
  • 自己设计一个PRC框架要考虑什么
  • 用Tomcat主要是解决什么问题

Web 服务器

  • SpringBoot了解吗

三面(30分钟)

  • 怎么设计一对多关系数据表、多对多关系数据表
  • 数据库第一第二第三范式

第一范式(1NF)

强调的是列的原子性,即列不能够再分成其他几列。 
考虑这样一个表:【联系人】(姓名,性别,电话) 

如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。 

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。

第二范式(2NF)

首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 

考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 
因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。 

可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。

 第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

第三范式(3NF)

在1NF基础上,任何非主属性不依赖于其它非主属性[在2NF基础上消除传递依赖]。

第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。

首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。 

其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。 

通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。 

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

  • 数据库死锁
  • HTTP的get、post、delete之类
  • 算法:矩阵走方格的最短路径,有障碍物(BFS)
  • 设计微信发朋友圈、浏览朋友圈、删除朋友圈的整个流程和存储结构
  • 说项目和论文……
  • 工作岗位意向 想做哪方面
  • 团队部门更喜欢哪个


 

网易有道(Java研发工程师)

8.3笔试 8.16 一面 8.30 二面 9.6 三面 9.12hr面(都是视频面)

一面(40分钟)

  • 常用的数据结构
  • 各种链表之间的区别
  • 算法:链表归并排序。递归写法和非递归写法两种
  • 归并排序的难点
  • 数据库 索引 什么时候不适合用

一面比较简单

 

腾讯(后台研发工程师)

8.12 CDG 一面 9.4 TEG腾讯云 一面(均电话面) 8.15笔试

CDG 一面(一小时)

  • 项目和论文介绍了半小时:很对口的面试官,感觉对我的研究方向很了解
  • TCP拥塞窗口 滑动窗口
  • 慢启动算法底层是怎么做的 好处坏处
  • 拥塞变化的原因
  • DDOS攻击 防御
  • HTTP 3.0 2.0 1.0
  • HTTP 2.0 服务器push怎么做的,怎么知道客户端需要哪些资源 为什么要这样做
  • 给N个数找最大的K个数 算法怎么做
  • 说一下堆结构的实现

这是面到现在方向最对口的了!面试官和我都觉得挺合适的,但是他部门在深圳,面试官说如果不接受的话后面就不继续了,没办法真接受不了深圳只能拒绝了……后面面试官又打了两次电话确认我的意向,还是拒绝了深圳,心痛到流泪T_T

TEG 腾讯云 一面(半小时)

  • 说项目
  • 慢启动算法用的哪一个 区别
  • 内核源码中TCP窗口大小怎么计算的
  • WIN_SCALE怎么计算
  • 多个客户端窗口大小不一致 什么原因 怎么设置
  • SO_RCVBUF设置的作用 仅对一个socket
  • 怎么保证所有TCP连接都能有效 什么数组设置
  • 内核源码角度说一下TCP三次握手
  • 全连接和半连接
  • TCP服务器连接过多,怎么排查
  • syncookie关闭了就不能保存连接了吗
  • Linux 查看网络流量 iftop
  • Linux 查看TCP连接状态 netstat
  • netstat参数中的Recv-Q和Send-Q什么意思,Recv-Q爆满了是什么原因

计算机网络问的太难了,太专业了

美团(系统开发工程师)

8.15 一面 8.23 二面(都是电话面)9.24 三面+HR面(现场面)

一面(一小时)

  • 说项目
  • 令牌桶算法
  • 登录验证码怎么做
  • Cookie和Session存在哪 如果是多机存储都会有什么问题 带id去找重复了怎么办 多用户修改了怎么办
  • zookeeper数据结构 写节点的内存限制 在dubbo里作为什么角色
  • dubbo中服务调用的几种形式
  • RPC过程 怎么知道要调用的远程主机的方法
  • 怎么把一个异步过程的返回结果转为同步的
  • IOC的循环依赖 怎么解决 有哪几种
  • AOP原理
  • 你遇到的常见异常

 

  • StringBuilder和StringBuffer区别
  • ==和equals的区别
  • HashMap、concurrentHashMap
  • HTTP有哪些方法 get和post的区别
  • 设计模式
  • CAS实现原理

compare and swap

  • ThreadLocal原理,底层,放在哪
  • AQS实现原理 队列为啥要双向的
  • Condition队列
  • 平时怎么学习的
  • 给你自己的技术打几分、学习能力打几分

二面(40分钟)

  • TCP和UDP的区别
  • TCP时间和资源消耗具体在哪
  • 滑动窗口大小初始值
  • TCP和UDP可以共用端口吗
  • socket先启动服务器还是先三次握手 对应关系
  • 三次握手过程中存在的问题

 

  • Linux进程通信方式 最常用的哪种

 

  • 共享内存生命周期
  • Linux堆栈和Java堆栈区别
  • Java线程池 ScheduledThreadPool
  • 项目应用属于io密集还是cpu密集
  • Spring的优点和缺点
  • Bean对象作用域有哪些
  • 知道什么别的类似于Spring这样的框架
  • 反向代理为啥叫反向不叫正向
  • Nginx和Apache 为什么Nginx快 底层实现是什么
  • 数据库mysql存储引擎 innodb优势 其他引擎
  • 用索引一定快吗 什么情况下查询快/慢

 

三面(一小时)

  • 深挖项目 挨个问一遍
  • 对Spring架构的理解 画类关系继承图
  • 对Dubbo的理解 结构是什么样的
  • 设计题:电商系统设计 画类图和UML图表示之间的负责关系
  • 如果给你一个大型系统开发 如何分工统筹 按什么原则分
  • 项目中和别人遇到冲突的例子 怎么解决的
  • 平时为什么看源码 如何读源码 按照什么顺序学习
  • 对架构设计有什么看法
  • 了解领域驱动设计吗

 

 

网易游戏(游戏研发工程师)

9.7笔试 9.19 一面(视频面)  9.27 二面+HR面(现场)

一面(40分钟)

  • 算法:M个元素的数组随机返回N个(M>N),等概率
  • 算法:实现Map的迭代元素遍历,删除一个元素

 

  • String和StringBuilder的区别
  • 各种Map介绍一下 put/get操作
  • HashMap是线程安全的吗 会有什么问题
  • ArrayList/LinkedList 前者扩容是迭代器会有问题吗

 

  • 说一下红黑树
  • 矩阵按行遍历和按列遍历的效率一样吗
  • Java内存模型
  • Java如何进行内存回收
  • Java 8之前的类对象可以回收吗
  • 编译之后的对象放在哪
  • 类加载过程
  • Socket TCP的客户端和服务器的连接通信过程设计
  • accept是阻塞的吗
  • Socket TCP客户端和服务器的断开过程
  • 出现大量的CLOSE_WAIT状态如何排查
  • 操作系统的虚拟内存
  • 页面置换算法 LRU用什么数据结构

 

  • 图形学了解吗
  • 玩过哪些游戏
  • 场景题:进入游戏界面时大量玩家排队, 中途有玩家退出 如何设计这样的场景,用什么数据结构
  • 场景题:二维地图 很多点 找离自己最近的玩家

二面(一小时)

  • 算法:N个数字打印全排列(DFS)
  • 深挖项目……
  • Linux源码中各包的架构流程
  • TCP滑动窗口的作用 人为能修改吗
  • 单链表O(1)时间删除节点 思路
  • 数组和链表遍历谁快 为什么
  • 进程如何访问内存空间
  • Cache 用来做什么的 快表页表怎么用
  • LRU算法底层实现原理 增删查时间效率
  • 数据库用过哪些 大概说一下
  • Redis和mysql一致性保证
  • 场景题:设计聊天室服务端整体架构 画图
  • 概率题:圆中随机取一点 设计思路
  • 对游戏研发具体做什么的理解
  • 具体要学习哪些技术 自己的了解
  • 互联网加班压力自己怎么看 家人怎么看
  • 投了哪些公司 offer情况
  • 期望工作地点&期望薪资

HR面(20分钟)

  • 大概介绍下自己的研究生课题&项目
  • 会经常性地去了解新技术吗 平时怎么学习的
  • 喜欢挑战性的工作还是固定一些的
  • 项目中遇到的最大困难 如何解决的
  • 说下自己的学习能力
  • 人际交往能力怎么样 举例子
  • 投了哪些公司 目前的offer
  • 期望薪资

网易游戏是唯一一家北京没有工作地点报的厂,报着对游戏的情怀也要去面试hhh。第二天晚上就出结果了,今年网易游戏给的太有诚意了!

 

华为(通用软件开发工程师)

8.21笔试 9.20 技术一二三面(现场面)

一面(半小时)

  • 算法:正整数n最少由多少个平方数组成(DP,leetcode279)
  • 项目介绍……
  • 论文介绍……
  • 代码量 git维护
  • 说下快速排序和堆排序

二面(半小时)

  • 算法:替换k个字符的最长重复子串(滑动窗口,leetcode424)
  • 项目介绍……
  • 数据结构 树 用过哪些 区别 B+树 红黑树

三面(半小时)

  • 聊人生……

今年华为确实不水了,手撕代码题还是挺有难度的,问基础不多,主要是深挖项目。官网状态目前是“面试已完成录用排序中”。

 

微软(SWE)

9.22笔试 等结果

笔试题A了2.8,不知道能不能进面试,祈祷一下,待更新……

 


 

只贴本人面试过程中面试官问到的题目,不贴答案(因为我的想法可能不正确,误导别人),下面回复问我,我可能会发表一下自己的想法

腾讯 事业群wxg

总共4次技术面 1次hr面

操作系统

1.谈谈你对内核态的理解,操作系统什么时候会陷入内核态,如何避免
2.什么是内核线程
3.fork()函数族和clone()函数族的区别,什么是写时复制,为什么要用这种方式
4.exec()和fork()的区别
5.常用linux指令,查看端口情况,网络情况,内存情况的指令

网络netstat

内存free
6.linux有两种实时调度策略,谈谈你对它们的理解
7.linux提供了哪些同步方法
8.谈谈对linux中信号量的理解

网络

1.如何判断一个你打向的ip在国内还是国外,用什么工具?

百度可以查
2.判断你的请求数据包被转发了几次,路径是什么,用什么工具?
3.Http状态码 205、401、403、503是什么
4.内部接口互相调用,如果要增加鉴权,鉴权是放在header里还是body里,为什么
5.外部接口调用,如果要有防重放的攻击检测,如何保证安全性
6.tcp为什么要四次挥手,为什么不是三次
7.http1.0和1.1的区别 1.1和2的最大区别

8.ssl和https
9.洪水攻击原理

数据结构

1.什么是堆,什么场景下用堆
2.你有看过什么语言下的数据结构相关的sdk源码,有看过STL中的吗(C++问题就不列举了)
3.有实现过某种二叉平衡树吗,难点在哪里,红黑树呢
4.map为什么能o(1)时间复杂度完成set/get操作,hashMap扩容如何保证在新的map里hash取到原来的值,并且这种hash是公平的

组成原理

1.cpu栈寄存器 指针寄存器
2.smp对称多处理器 是如何在总线上实现信号的同步,如何实现各个cpu中缓存行的一致性
3.有研究过x86吗
4.l1 l2 l3 cache

算法

1.给n个人 再给n个人的朋友关系 1-2这种表示1和2是朋友 2和1也是朋友,再给一个int k,问能否把这n个人分成k组,每组的人彼此都不是朋友,如果能,输出这种结果

2.excel里的列数如下 A,B,C…Z…AA,AB,AC…AZ,BA…AAA…给你一个字符串 问它是excel里的多少列 如AB就是28列

3.一个正整数k 问有没有一个所有位数都是1的数字,正好整除这个k,如果有,返回所有合法数中最小的那个的的位数,没有返回-1,如给你3,那么111是合法数中最小的,返回3

阿里 部门蚂蚁金服

总共4次技术面 1次hr面

操作系统

1.进程间通信有哪些,详细说明自己在哪种场景下用过哪种方式
2.死锁产生的条件
3.java中的线程有几种状态?详细说明
4.os中管道的实现,问的很深,记不到具体的问题了
5.分段和分页解释一下
6.虚拟地址、逻辑地址、线性地址、物理地址的区别
7.协程和线程和进程的区别,谈谈你的理解

网络

1.三次握手四次挥手,三次挥手可不可以
2.OSI和TCP/IP的区别(第一个问题是问我网络看的哪本书学习的,我说tcp/ip详解)
3.http server服务,现在要做一个针对用户维度或者接口维度的频控,假设一秒100这种,问在不改变原有接口服务的情况下,你如何实现
4.网络安全相关,csrf这种攻击如何防范
5.各种协议问我了解过没有,例如TCP/UDP/ICMP,这个问题比较常见
6.微服务和http服务的区别,你对两者的理解

数据库

1.你自己使用mysql中遇到过乱码问题没有,如何解决的,产生原因是什么
2.Select * From table_name where filed_name != NULL 这个sql语句是什么意思,你觉得有没有问题
3.关键字where和having的区别

 


4.介绍一下mysql数据库引擎innodb,及mysql的四种隔离级别

三、MySQL事务隔离级别

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)


5.用过什么索引,使用这个索引有什么要注意的
6.数据的分库分表会产生什么问题,如何解决
7.写一个sql语句,给表t_score 字段 id(int),score(varchar),team1_id(int),team2_id (int)
给表t_team 字段id(int),name(varchar),完成输出这种效果的语句(一条完成):id:xx,team1_name:中国,team2_name:日本,score:4:1

算法

1.给你一个正整数k,可能会很大但不超过integer_max,再给你一个正整数m(0-9),问1-k中间有多少个数,m出现了多少次,如给你k=12,给m=1,那么11,1,12这三个数,1一共出现了4次
2.一个N阶int矩阵,人从(0,0)开始走,只能往上或者往右走,矩阵内的数值是该坐标的分值,分值只能获取一次,问这个人从(0,0)走到(N-1,N-1)再走回来,往返获得的分值最大是多少

redis

1.redis里的五种数据类型
2.解释一下redisObject和SDS
3.redis里的sort set为什么要用跳表不用红黑树,那跳表实现原理说一下
4.缓存不一致如何解决
5.redis持久化,aof里的文件写入和文件同步解释一下
6.redis持久化aof和rdb分别适用于什么场景
7.redis各种数据结构,操作的时间复杂度
8.redis的主从复制原理,有没有可能写操作写到主,读操作读到从,那么读不到最新的数据,但是我如果偏要保证一致性,那如何解决

kafka

1.概念解释,producer/consumer/partition/topic/offset/broker
2.kafka为什么和其它mq比起来,吞吐量高这么多,你有思考过kafka适用于什么场景吗,或者你说下你对不同mq产品的对比
3.kafka高可用里的cap理论,谈一下你的理解
4.kafka如何保证消息不被重复消费
5.kafka里的消息我要指定存到不同的数据源该怎么做

小米 部门小米广告风控

总共2面技术面 1面hr面

算法

1.给一颗二叉树,节点的val只有两种:0或者1,每个节点有一个开关,可以无限使用,每使用一次,这个节点的下下层(孙子节点)所有数值反转(0变成1,1变成0),那么现在给你两颗形状一模一样的二叉树A和B,问A能不能通过若干次使用开关变成和B一样,如果可以,在哪些节点上按开关
2.给一个int数组, A和B每次要从两边取一个数(可以取左边或者最右边),A和B都很聪明,问A先取,能否有一种取法一定赢

数据库

1.写一个sql语句(要用到having,具体忘掉了)
2.mysql的binlog解释一下
3.mysql索引谈谈你的认识
4.mysql的事务和隔离级别

一、事务的基本要素(ACID)

  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

   2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

   3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

   4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

 

二、事务的并发问题

  1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

  小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

 

三、MySQL事务隔离级别

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

 

其它

小米问的实习问题比较多,想不起来了

总结

之前有些人私信我,问面试题目和难度,我 今天总结了一下,希望对大家有用
助各位面试顺利,收到心仪的offers

你可能感兴趣的:(算法)