6.4 笔试 6.12 面试(现场面)
不能,整个类共有的。
不能,Static是编译时就定了
底层就是用HashMap,只有key
遍历数组
这个面试题比较基础
6.30 笔试 7.7 技术一二三面 7.12 hr面(都是视频面)
滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):
中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。
中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。
中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。在众多关于中间件的定义中,比较普遍被接受的是IDC表述的:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
7.18 一面 7.19 二面 7.22 三面(都是电话面)
底层是红黑树
(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语句
MVCC多版本并发控制(Multi-Version Concurrency Control)是MySQL中基于乐观锁理论实现隔离级别的方式,用于实现读已提交和可重复读取隔离级别。
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
阿里云 7.24 一面 8.2二面 (都是电话面)
DNS,TCP,HTTP
HTTP协议解析
1.8
switch表达式后面的数据类型只能是byte,short,char,int四种整形类型,枚举类型和java.lang.String类型(从java 7才允许),不能是boolean类型。
8.3笔试 8.16 一面 8.30 二面 9.6 三面 9.12hr面(都是视频面)
比较基础
牛顿迭代
一、前言
在解决分布式系统中负载均衡的问题时候可以使用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环上呈现如下图:
一致性hash算法通过一个叫作一致性hash环的数据结构实现
重点是长连接和短连接。
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,因此读不出来,解决了幻读的问题。
Web 服务器
强调的是列的原子性,即列不能够再分成其他几列。
考虑这样一个表:【联系人】(姓名,性别,电话)
如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。
首先是 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)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
在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:非主键列是直接依赖于主键,还是直接依赖于非主键列。
8.3笔试 8.16 一面 8.30 二面 9.6 三面 9.12hr面(都是视频面)
一面比较简单
8.12 CDG 一面 9.4 TEG腾讯云 一面(均电话面) 8.15笔试
这是面到现在方向最对口的了!面试官和我都觉得挺合适的,但是他部门在深圳,面试官说如果不接受的话后面就不继续了,没办法真接受不了深圳只能拒绝了……后面面试官又打了两次电话确认我的意向,还是拒绝了深圳,心痛到流泪T_T
计算机网络问的太难了,太专业了
8.15 一面 8.23 二面(都是电话面)9.24 三面+HR面(现场面)
compare and swap
9.7笔试 9.19 一面(视频面) 9.27 二面+HR面(现场)
网易游戏是唯一一家北京没有工作地点报的厂,报着对游戏的情怀也要去面试hhh。第二天晚上就出结果了,今年网易游戏给的太有诚意了!
8.21笔试 9.20 技术一二三面(现场面)
今年华为确实不水了,手撕代码题还是挺有难度的,问基础不多,主要是深挖项目。官网状态目前是“面试已完成录用排序中”。
9.22笔试 等结果
笔试题A了2.8,不知道能不能进面试,祈祷一下,待更新……
只贴本人面试过程中面试官问到的题目,不贴答案(因为我的想法可能不正确,误导别人),下面回复问我,我可能会发表一下自己的想法
总共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)再走回来,往返获得的分值最大是多少
1.redis里的五种数据类型
2.解释一下redisObject和SDS
3.redis里的sort set为什么要用跳表不用红黑树,那跳表实现原理说一下
4.缓存不一致如何解决
5.redis持久化,aof里的文件写入和文件同步解释一下
6.redis持久化aof和rdb分别适用于什么场景
7.redis各种数据结构,操作的时间复杂度
8.redis的主从复制原理,有没有可能写操作写到主,读操作读到从,那么读不到最新的数据,但是我如果偏要保证一致性,那如何解决
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