面试刷题10-26

1.发起Http请求涉及哪些协议

TCP, DNS, IP, ARP等

2.TCP,UDP区别

3.面向报文面向连接

4.哈希表的有序怎么保证

在维护一个链表,记录key

5.redis数据类型,zset讲一下

有序集合,底层是跳跃表

6.HashMap原理,线程安全问题,ConcurrentHashMap原理,Hashtable

7.Synchronized

同步关键字,可以修饰代码块,以及修饰方法

8.MySQL索引原理,为什么用B+树不用B树

B+ 树数据全在叶子节点,可以存放更多的数据

9.红黑树

10.TCP四次分手原理

11.如何实现可靠的UDP

12.tcp无状态

13.cookie,session,密码设置过期时间并确保安全性,怎么用sessionID和cookie确保

14.http和https,ssl加密解密原理

15.优先级队列

16.设置一个id生成器 唯一且不可以递增

17.数据库隔离级别

18.可重复读怎么实现的 然后给出了一道InnoDB可重复读级别的题

写的部分:

1.循环递增数组输出最小值的下标

2.查找第一个缺失的正整数

3.复杂链表的复制

剑指offer原题

4.对2000万高考考生总分进行排序

桶排序

5.给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata,问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,
返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3。

6.二叉树的蛇形遍历

7.MySQL查询男性平均年龄最大的城市,给了id,name,sex,city,写语句并设计索引

 

8.AB赌博,A赢2局或以上获胜,B赢3局或以上获胜,求A,B获胜概率

9.不公平硬币,有没有正反面概率相等的时候


 

spring用到了哪些设计模式;

了解spring

你了解的设计模式有哪些?介绍一下都有哪些应用场景;

事务的传播属性和隔离级别

虽然可重复读理论上会导致幻读,但InnoDB中采取了什么机制来避免这种情况的发生。

Redis的底层数据结构是怎么样的

写一个线程安全的懒汉式的单例模式

jvm的内存分配是怎样的

survivor To 和 from 的内存大小为什么默认是1:1

 



一:Java基础
String 类能被继承吗,为什么

不能, final关键字
String, Stringbuffer, StringBuilder 的区别

String 不可变, Stringbuffer 和 String Builder可变, 前者线程安全
讲讲JAVA8 的 ConcurrentHashMap
线程安全的HashMap

抽象类和接⼝的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么

类只能单继承,接口可以继承多个接口,类可以实现多个接口
继承和聚合的区别在哪
描述动态代理理的⼏种实现⽅方式,分别说出相应的优缺点
写出三种单例模式实现
error 和 exception 的区别, CheckedException, RuntimeException 的区别

错误和异常

编译时异常,和运行时异常


有没有可能 2 个不相等的对象有相同的 hashcode

可能,hash碰撞
Java 中的 HashSet 内部是如何⼯工作的

底层原理是HashMap
什么是序列化,怎么序列列化,为什么序列化,反序列化会遇到什么问题,如何解决
枚举类可以继承其他类吗?为什么
了解强引用,软引用,虚引用和幽灵引用吗?谈谈它们的⼀个使⽤场景

二:JVM知识
Jvm 包括那⼏大部分
什么情况下会发生栈内存溢出
JVM 的内存结构, Eden 和 Survivor ⽐例
JVM 内存为什么要分成新生代,⽼年代,持久代。新⽣代中为什么要分为 Eden 和Survivor
JVM 中一次完整的 GC 流程是怎样的,对象如何晋升到⽼年代
Jvm 什么情况下会回收⽅法区
你知道哪几种垃圾收集器,各⾃的优缺点,包括原理,流程,优缺点
详细介绍下 CMS 垃圾回收器


三: spring 和 mybatis
讲讲 Spring 事务的传播属性。
Spring 如何管理理事务的。
bean是单例的吗?为什么
mybatis  #{} 和 ${} 区别,怎么实现分页


四:OS
⽤一行命令输出正在运行的 java 进程。

ps -ef | grep java

进程和线程的区别

多线程
多线程的⼏种实现⽅方式,什么是线程安全
volatile 的原理,作用,能代替锁么

不能
画一个线程的⽣生命周期状态图
sleep 和 wait 的区别
⽤过线程池吗,如果用过,请说明原理,并说说 newCache 和 newFixed 有什么区别,构造函数的各个参数的含义是什么,⽐如 coreSize, maxsize 等
CAS 机制是什么,如何解决 ABA 问题


网络:
TCP 三次握手和四次挥手的流程,为什什么断开连接要 4 次
TCP/IP 如何保证可靠性
Http 和 https 有什么区别


mysql:
Mysql MyIsam 和 InnoDB 引擎索引结构有什么区别
数据库隔离级别有哪些,各⾃的含义是什什么, MYSQL 默认的隔离级别是是什么
什么是幻读
MYSQL 有哪些存储引擎,各自优缺点
谈谈 explain 结果中⽐较关键的指标,以及指标的含义


redis:
Redis 的数据结构都有哪些,各⾃都适合什么样的场景
redis主从复制怎么完成的
redis有哪些优化的方式


算法题:
leetcode上的 3sum问题

二面主要聊项目

三面聊项目和软实力

 

一面 (基础技术面)

  1. redis的几种数据类型,redis是单线程的,如何优化? redis为什么能做到这么快 ?
  2. Spring的核心设计理念,SpringMVC的请求流程,MVC的分层在Spring中的实现
  3. ORM框架如何配置主从数据源,Mybatis原理
  4. 垃圾收集器用的哪种?CMS和G1的区别,讲一讲CMS垃圾收集的步骤,哪些步骤是并发哪些是并行。知道哪些垃圾收集算法
  5. 数据库索引了解多少?组合索引的最左原则,innodB和mylSAM的使用场景和区别,簇族索引和非簇族索引的存储区别
  6. sql优化怎么做,如何判断sql能否用到索引或者大约需要扫描多少行数据。
  7. HTTP1.0/1.1/2.0 HTTPS的区别与特性
  8. 讲讲NIO的原理与实现?NIO用到了哪个经典技术思想?JDK1.8中NIO有做什么优化
  9. SpringMVC、SpringBoot、SpringCloud之间的关系?SpringCoud的注册发现与RPC的实现。
  10. 知道哪些RPC的方式?有哪些框架?如果让你设计RPC数据交换报文格式你会怎么设计?最重要的是什么?
  11. 用过哪些日志框架、日志框架间的比较?
  12. Java中的锁有哪几种?Synchronized 的特性和底层实现?ReentrantLock了解么?AQS锁了解么?
  13. Java经典特性封装继承多态中的继承,Java的继承有什么缺点?wait()、notify必须在什么情况下使用

二面(经理面)

  1. 讲讲项目中的RocketMq服务化
  2. Java中的锁知道多少
  3. 有5000w数据的场景,如何做查询性能优化
  4. 线程、进程、协程的关系。
  5. 知道Go么,有没有学习过,排不排斥新语言的学习使用
  6. nginx的高可用,redis的高可用,redis的集群方案,一致性哈希和哈希槽模式下缓存服务器宕机,数据如何迁移
  7. 怎么让一个定时任务在集群模式下只有一个实例执行?怎么实现分布式锁?怎么高可用?怎么保证一定有且只有一个实例的定时任务成功

三面 (部门领导面)

  1. 讲讲项目中的高可用实现,知道zookeeper选举算法么?这个nacos如何实现的一致性,知道raft的原理么?选举的机制是什么样的?具体是怎么投票的?
  2. DNS原理,DNS的轮询规则是怎样的,一个DNS请求是怎样的,如何使用自己的DNS服务器
  3. 如果现在有一个活动,一共赠送用户100000点券,有一个获取点券的按钮,一个用户只能获取一次,获取的点券算法是一个函数do(s,l),s是用户的等级,L是目前剩余的点券。在这个业务场景下,最需要考虑的是什么(不是多线程竞争问题)
  4. 现在有一个游戏,玩家有一群建筑,这些建筑一开始是1级,然后点击升级按钮会扣除金币,同时建筑进入升级倒计时。如何设计这个建组等级相关的数据存储?如果有一个排行榜显示用户的建筑等级排行怎么办?如果用户升完级就退出,排行榜怎么保证排名的正确。用户下一次进来如何保证时间的准确性
  5. 在一个场景下:客户端使用TCP连接服务端通信。服务端如何检测出客户端断开连接?发送心跳是客户端发送好还是服务端发送好?如何在不用客户端/服务端发心跳包的情况下可以检测得到客户端tcp连接已经异常断开?


 

今日头条后端一面社招面经。内容比较偏计算机基础和项目,全程50分钟左右。问的问题大概包含以下几点:

1.自我介绍,挑一个你最熟悉的项目说一下?你这个项目最大的难点是什么?在项目中有没有遇到什么难题?你说你在项目中用到了一些设计模式,都讲讲你是怎么用的。项目中有分布式事务处理吗?有哪些常见的分布式事务处理方式?说一下你们在项目中怎么用的。

2.建立HTTP连接的三次握手的过程?,客户端和服务端分别是什么状态。讲一讲Http和Https的区别。

3.线程间通信的方式?假如现在在同一台机器上开两个java项目,有几个java虚拟机?产生死锁的四个必要条件还记得吗?聊聊linux吧,lsof这个命令用过吗?讲一讲linux系统的启动过程?

4.数据库事务的隔离级别有哪些?Mysql默认的隔离级别?不同的隔离级别是通过什么实现的?mysql的explain有用过吗?讲一讲数据库的慢查询?数据库的悲观和乐观锁都说一下吧,什么时候用乐观锁比较合适?什么时候用悲观锁呢?

5.你对tomcat有多少了解,nginx呢?把你知道的都说一下。有做过tomcat调优吗?

6.Java的内存模型,分为哪几块存储区,各个存储区域的作用?说一说volatile,一般什么时候用这个,给我举个例子呗。在项目中有用过ThreadLocal吗?为什么要用这个?ThreadLocal内存泄漏问题了解吗?要不你说下为什么会有这个现象?

7.如果web服务器突然出现频率很高的FullGC,可能是什么原因?你会怎么去排查呢?

8.讲一讲类加载器工作机制?你知道强引用、弱引用和软引用吗?为什么要有这些东西?他们有什么作用?你在项目中用过吗?

基础知识先问这么多,平时有刷题的习惯吗?要不咱写个题吧。

题目很基础leetcode110原题. 平衡二叉树。还是很幸运的。

给定一个二叉树,判断它是否是高度平衡的二叉树。题目描述如下:

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

 

示例 1:给定二叉树 [3,9,20,null,null,15,7]

 

3

/ \

9 20

/ \

15 7

 

返回 true 。

 

示例 2:

 

给定二叉树 [1,2,2,3,3,null,null,4,4]

 

1

/ \

2 2

/ \

3 3

/ \

4 4

 

返回 false 。

 

时间也差不多了,今天就聊到这吧,你有什么想问的吗?问了下过去是不是要转go语言,面试官说是的,不过会给一段时间作为适应期。问了下我排斥转语言不?那当然是不排斥了。。。


 

昨天晚上曹操出行的笔试,不太简单也不太难,java基础考的多

就是那道算法题没想出来:两个有序数组求中位数,要求时间复杂度为对数级。后来看了网上的才懂

今天上午的现场面试:

1. 自我介绍 ...

2. 五层网络结构

3. (我简历上有写去一家公司实习了解过流媒体技术(其实啥也没学到)),面试官问我流媒体的协议,它们工作在哪一层,怎么保证数据的传输可靠

4. 路由器的作用是什么,工作在哪一层 , 交换机工作在哪一层

路由器工作在网络层,交换机工作在链路层

5. 我们从浏览器输入一个URL一直到连接到主机经历了哪些过程?

6. 然后就是java基础了,比较简单: C++和java的区别,抽象类和接口的区别 ,抽象方法等等...

7. 面试官问我主要用的jdk版本,我说1.8, 就问我1.8有哪些新特性?我就记得一个好像是hashmap底层改用红黑树了...

8. hashmap经典的结构,怎么解决哈希冲突,它是线程安全的吗,它何时扩容

9. java有没有多线程,synchronized 和 lock 的区别

10. (我简历有写学了ssm框架,其实只是用过),面试官问我spring有什么好处,为什么用它,它用了哪些设计模式。。我不太清楚...

11. 然后是数据库,一上来就问索引的结构,如何通过索引列找到非索引列的数据...

好像就这么多了,一直没问数据结构与算法...

加油吧!

 

 

 

 

 

计算机网络:TCP/IP细节以及HTTP(1.1和2.0)的各种特点一定要明白,UDP的使用场景,以及与TCP之间的区别(TCP是面向连接的稳定的数据流传输,UDP是非面向链接的不稳定的数据报传输这个应该可以帮助记忆)

操作系统:基本的操作需要熟知,以及一些比较高级的操作(crontab,ipcs,tcpdump等),进程线程之间的操作,死锁,网络IO模型,线程通信,进程通信,虚拟地址空间。目前没有很好的文章推荐,百度上可以多看看,操作系统的面试比较灵活

C++:首先就是STL中的vector(出现频率相当高),然后就是map,set(为什么用红黑树,什么是红黑树,为什么不用平衡树),智能指针,构造析构能否虚函数,怎么检查内存泄漏。

数据库:目前我遇到的都是Redis和Mysql的问题,Mysql中索引问的比较多,其次是各种日志,以及ACID特性,Redis的持久化方式,以及跳表怎么实现,同样需要自己扩充。

项目方面:我做了几个小项目,有需要的同学可以参考,具体的注释我全部都写了,如果有问题可以

,大佬可以自行忽略(狗头保命)

(顺便厚颜无耻的求star和follow,如果可以的话推荐自己实现一下,一下项目感觉可以在面试中吹一下)

  1. 线程池的实现,使用c++11完成,可以帮助同学们理解线程池,实现比较简单可以参考
  2. Web服务器的实现,目前还没有上传测试结果,准备使用locust进行测试,目前代码和注释已经完成
  3. 短网址服务,百度的面试题,使用Redis和go语言完成,同学们可参考

面试最后一般会有一个场景题,如果有场景题的话我感觉这个面试是很稳了,场景题一般是入职之后第一个要写的东西,请尽力所答,不要放弃,加油!

以下是面试中遇到的一些问题:
c++:

  • vector的底层实现
  • map和set的底层数据结构是什么,为什么使用红黑树(腾讯,头条),给我讲一下红黑树的性质(头条)
  • 空类的大小(腾讯),线程池写过吗,讲一讲(腾讯)
  • 内核态和用户态之间怎么转换的(头条)
  • 构造函数可以使用virtual修饰吗(头条)
    go:
  • go的协程怎么实现的与c++的区别(小米)
  • 顺序定义defer最后怎么执行
  • 讲一下你用go实现的项目
    数据库:
  • 各种索引的理解(头条,小米,腾讯)
  • 各种日志的理解(头条,小米)
  • 怎么看哪一个查询是慢查询(头条)
  • Redis的跳表(头条)
  • Redis的持久化(小米,头条)
  • Redis和Memcache的区别(小米,腾讯)
    操作系统:
  • 各种奇怪的命令(阿里(文本三剑客),小米(各种常规操作),腾讯(crontab,ipcs))
  • IPC方法(谁都问,大家都知道)
  • 进程与线程的区别(谁都问,大家都知道)
  • Epoll和poll以及select的区别(设计IO模型,腾讯)
  • Linux中的网络IO(小米,腾讯)
    计算机网络:
  • TCP三次握手和四次挥手的各种状态(谁都问)
  • 四次挥手中的TIME_WAIT状态存在的意义(小米,腾讯)
  • TCP为什么可靠(腾讯,小米,头条)
  • 滑动窗口是什么(腾讯,小米,头条)
  • HTTP和HTTPS的区别(一般都会问感觉)

算法题:
变化多端,头条喜欢动态规划和强思维(leetcode中等偏上),腾讯重思路,小米同样看重思路
头条:

  • 最大1矩阵(dp)

腾讯:

  • 我现在有两个玻璃球,已知玻璃球在某 一个高度扔下去会摔碎,请用这两个球测试那个临界楼层,尽可能少的测试。

小米:

  • 二分

 


 

1、出身:纯正非科班

2、面试公司:同城艺龙、招商、海康威视、高德、百度、美团、新浪、迅雷、欢聚时代、去哪儿网、zoom、科大讯飞、当当、vivo等。。。

3、投递岗位:C++方向。。。。

4、c++复习书籍:C++ primer、STL源码剖析、深度探索C++对象模型、Effective C++、设计模式、王道等。。。

5、数据结构书籍:数据结构教程、数据结构与算法分析、算法导论。。。

6、数据结构知识点:

1>链表:链表的反转、回文链表、链表相交、有环无环链表等。。。

2>栈队列:最小栈、栈实现队列、队列实现栈等。。。

3>字符串:BF、KMP匹配。。。

4>树:二叉树的性质、二叉树的递归非递归遍历以及层次遍历、二叉树的构造、二叉树的深度、二叉树的路径、镜像二叉树、搜索二叉树、平衡二叉树、并查集、B树、B+树等。。。

5>图:图的广度优先搜索、深度优先搜索、生成树和最小生成树、最短路径、拓扑排序等。。。

6>查找:线性表查找、树表查找、哈希表查找。。。

7>排序:八大排序算法,其中归排、堆排、快排问的最多。。。

7、计算机网络书籍:计算机网络自顶向下、TCP/IP卷一、协议森林。。。

8、计算机网路知识点

1>数据链路层:ARP地址解析、循环冗余检测。。。

2>网络层:子网划分和子网掩码、CIDR、ICMP网际控制协议、DCHP协议工作流程等。。。

3>传输层:TCP与UDP的区别以及应用范围、TCP三次握手四次挥手、TIME_WAIT原因、TCP可靠传输(累计确认、超时重传、选择重传、滑动窗口、拥塞控制、慢开始、拥塞避免、快重传、快恢复)、TCP/                    UDP头部等。。。

4>应用层:Http报文格式、Get/post区别、http与https区别、DNS域名解析流程等。。。

9、操作系统知识点:

1>进程管理:进程、线程、进程通信与进程同步、调度算法、死锁等。。。

2>内存管理:逻辑地址空间与物理地址空间、内存分配管理方式、虚拟内存管理等。。。

10、数据库:SQL语句、事务、索引、视图、锁。(数据库玩的比较少)

11、Linux:Linux常用命令、shell、gdb断点调试。(Liunx玩的比较少)

12、算法:剑指offer(至少两遍)、牛客网、LeetCode中国、算法(动态规划、贪心、回溯、分治)等。。。

13、逻辑推理:乒乓球称重、老鼠喝水、海盗分金币、城市有多少出租车、多少理发店等。。。

14、海量数据处理:Top N问题,公共数据问题,内存Top N问题等。。。

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值