计算机网络面试题
对TCP协议的了解
TCP的特性以及为什么是可靠的?
三次握手?为什么要做三次握手?
三次握手说一下,ACK为啥加一。
time_wait状态知道不,说一下
HTTP请求报头,状态码
ios模型七层是什么,为什么分层。
TCP和UDP有什么区别?9
TCP怎么三次握手的?
说下TCP断开连接的过程。
TCP的可靠是怎么保证的
三次握手、四次挥手、timewait意义
http状态吗
http报头有什么
传输视频用什么协议、传输文件用什么协议
10亿的数据如何找前10大的
TCP流量控制怎么实现
TCP建立链接后,网线突然拔掉,在插上,链接还在不在
TCP保活定时器应用层能知道吗
TIME_WAIT会不会占用端口号?TIME_WAIT占用大量端口号,客户端链接不上服务器,怎么解决?
- Udp如何实现可靠性传输
- 遥控器控制电视是用tcp还是udp
syn攻击解决方法(回答了一种)
四次挥手 timewait没有会发生什么(提示下回答)
epoll 两种模式 边沿触发和水平触发(提示下回答出来)
虚拟内存 交换区
set和无序的set谁的效率高为什么
HTTP的了解 post和get的区别
HTTP详细的(不会,跳过)
6.浏览器输入www.maoyan.com发生了什么?
http长链接与短连接?长链接一直不断开会出现什么问题?怎么解决这个问题?
长链接实现原理?
http中GET和POST请求的方式?
http状态码含义,500和502的区别?401?
ARP协议?
http中的一些请求方法。
8、Time_wait 状态的作用
三次握手解决了什么问题
两台主机能同时相互进行三次握手连接嘛
ARP协议
.为什么有了ip地址还要mac地址
Tcp有可能被劫持吗? tcp传输过程中信息会泄露吗?
HTTPS怎么保证安全的
查看tcp状态用哪个命令
把这些状态统计起来用哪个命令(比如time_wait状态有几个)
粘包问题
说一下管道,进程间的五种通信方式,三种线程同步方式
为什么用无名管道不用有名管道
除了管道,具体说一下其他方式
.一般网络上的视频传输用的是什么协议
微信支付中客户端发起一笔支付用tcp还是udp
HTTP协议常见的状态码
对称加密和非对称加密的区别
数字签名
tcp拥塞控制知道吗?讲一下拥塞控制
慢启动中的起始值是1,单位是什么?
tcp报文头部有哪些信息,怎么知道自己可以发送多少数据给对方?
socket编程里象征三次握手的地方在哪儿?TCP三次握手四次挥手的状态,如果没有TIME_WAIT状态会怎样,time-wait状态如果很多,怎么避免?
udp发送的数据一定是完整的嘛?
为什么分层?(1)多层之间相互独立,灵活性好(2)结构上可分割开来,易于实现和维护(3)促进标准化工作
问我怎么获取ip地址,我给他讲了从应用层到各层的数据段封装。他说不是,然后让我用电脑打开cmd 输入ipconfig /all 看一下DHCP服务器问我DHCP是干啥的?我说不清楚,然后他给我讲了5分的DHCP原理
问了下进程通讯及目的,进程间内存隔离。
fork3次之后创建几个进程
linux两台主机之间拷贝数据命令
三次握手的过程?每一次都携带什么数据?为什么要给确认报文段中的ack的值加1,为什么不是2,3,4?
(1)客户端请求建立连接,发送序列号
(2)服务器确认连接,发送确认报文,并发送自己的序列号
(3)客户端发送确认报文
如果是在建立连接的过程中,那么这仅仅是一个规定,三次握手的协议就是如此说明的。在数据收发的过程中,确认号也表示了在次字节之前的数据已经收到的到确认,可以放心发送后边的数据,加一可以确定下一次发送应该其实的位置。四次挥手最后主动断开方为什么要等待2MSL?TIME_WAIT状态是什么?
(1)保证安全的断开连接,假设被动断开方第一次发送的断开请求报文在网络滞留了,收不到确认又重新发了一次,第二次收到了确认则连接断开,如果此时滞留的报文又到达了,此时主动断开方有可能已经重新建立的tcp连接,就会收到一个错误的报文
(2)保证迟到的报文被丢弃管道是半双工、socket是全双工
TCP和UDP的区别?如何处理TCP粘包问题?
Tcp是面向连接的可靠的流式服务
Udp是无连接的不可靠的数据报服务
粘包问题的解决方法:
(1) 暴力解决,每次需要发数据时再建立tcp连接,发送结束就断开连接
(2) 定常数据结构,如果规定每次发送的数据报长度是一定的,那么接收方每次读取固定长读的报文即可
(3) 不定长数据结构:多数情况我们使用的不是定长的数据结构,第一种方法可以规定一个特殊的符号作为结束符,每当遇到这个结束符才认为该报文接收结束,但是该方法只适用于字符数据,因 为对其他二进制数据无法确定是结束符还是要发送的数据第二种方法是,在固定的偏移位置写入报文的长度,接收方每次读取先获取到报文的长度,再接收该长度大小的报文即可HTTP协议的报头是什么?请求方法?
Http协议的报头是用来区分报文的类型,比如客户端发送一个请求报文,那么该报文是请求报文就要在报头中说明,是响应报文也要在报头中说明。
Get、Posttime_wait的意义,2 MLS指的是什么
HTTP协议头部的TTL字段代表什么?代表报文的最大跳数(最长生存时间),主要是为了防止报文段在网络中一直循环的进行传输所设置的,当达到最大跳数后该报文段会被自动丢弃。
操作系统
- 进程间通信
- 线程间通信,
- 线程间的同步方式具体说
- 说下共享内存 ,有两个进程,连接同一共享内存,这两个进程映射到共享内存上的虚拟地址是相同的吗? 两个进程之间通过共享内存共享一段内存地址空间,这个是怎么实现的?
- 共享内存解决互斥
- 进程线程的资源分配的区别
- select和epoll吗?有什么区别?
- 怎样解决线程互斥
- 虚拟空间地址大小用户态和内核态
- 系统调用从用户态到内核态的过程
- epoll的ET、LT模式 简短的说下
- 内存泄漏,怎么解决?
- 用户态内核态,切换过程
- 如果很多个用户同时用了一个系统调用,会发生什么情况?怎么解决?
- Linux2.6版本后内核的抢占式,是依据什么可以进行抢占的
- 内存对齐,内存对齐是编译器还是操作系统实现的?为什么要有内存对齐?
- 分页管理和分段管理的区别
- 软链接和硬链接的区别
- udp发送的数据报在网络层丢失了怎么办?应用层会不会知道这个包丢失了?udp知不知道
- 连续多次malloc和free之后是否能直接使用内存(不懂)
- 僵尸进程的概念、处理方法?通过信号调用wait函数可能出现的问题?
- 死锁
- 协程比线程有哪些优势
- .两个进程之间使用管道会启动新进程吗
- 管道是怎么实现的
- 多进程和多线程区别?微信底层用的是多进程,你怎么看?(多进程相比多线程的优势),
- select,poll,epoll的区别。
- 代码里面从一个文件读内容,操作系统都做了什么
linux命令
- 文件夹按时间排序显示的命令(没答出来),那ls -t中-t参数是什么意思
- 查看进程的命令(回答的ps -ef),-ef所表示的意思是什么
- 用过head命令吗
- linux文件合并,进程状态查询,cpu内存使用查询,磁盘内存查询。
- 如何在Linux下查看磁盘空间?
- 如何查看端口有没有监听?
- 查看网络状态的命令
- liunx命令,查看进程,查看负载均衡
- 介绍管道,项目中用的是什么管道,项目中怎么用的管道
- Linux中对文件和进程等相关操作的命令。
- Linux 查看系统IO的命令
- 建立软链接的命令
- 修改文件的读写权限用到的命令,这个命令有哪些参数?
- 统计文件有多少行、多少字节用什么命令?
- 查找文件里字符串的命令?
- ps的参数
- 了解脚本,awk sed
- 如何查看tcp状态,用什么命令?查看进程的命令,查看负载均衡的命令,linux脚本里如何获取文件的某一行某一列数据
- 如何查看tcp的状态 netstat
- 如何查看共享内存 ipcs
- Tcp查看状态用什么命令,具体的参数,会出现什么状态?TIME_WAIT和CLOSE_WAIT有什么区别?
- ttl
- 缺页中断
- strcpy函数原型和实现
- 内存泄漏了怎么办?有哪些内存泄漏?内存泄漏的检测工具?
- 布隆过滤器
- read和fread的区别,哪个效率高
- 查看内存运行状态命令(一个八核的系统,如何查看所有内存运行状态)
- .Linux下操作指令执行过程
- .recv函数返回值的意义
- 查看共享内存命令
- pwd命令怎么实现的
- top和ps命令
- 在linux下,程序出现了死循环,会产生什么现象,除了jdb调试,还有其他什么方法可以查看出现了死循环
- linux下buff、swap。。。。。。什么什么的区别
- Linux查看资源使用情况,具体是什么函数比较消耗资源。
- 当你top命令时,每一列的含义是什么讲一下。
- 已经连接上了,服务器down了,客户端会作何反应。
- 连接池知道吗?讲一下。
- io复用(select和epoll的区别)
- 要求回答关于进程操作等命令
- 如果某一进程造成CPU满了,是什么原因造成的,如何解决?
- 如何查看系统性能/系统监测的命令
- top命令中关于负载的命令是什么,loadavg知道吗
- 负载在操作系统里跟什么关联,怎么判断一个服务负载很高(不会,他解释说跟物理核数有关,任务比核数多会导致CPU频繁切换,负载高,比核数少会让CPU闲置)
- 随便说,说明操作系统是怎么应用的,当你进行一个操作时,操作系统在这个过程中都做了什么事情,操作系统怎么运转的(我说的是系统调用这个点)
- 怎么设计一个分布式存储系统
数据库
- 数据库引擎知道哪些,有什么区别
- 什么是索引,索引的存储结构是什么
- 给你一个sql语句,怎么优化
- mysql索引方式
- 数据库提高查询效率的方法?索引的实现原理?
- 操作系统内存管理?
- 说一下第二范式和第三范式
- 索引的底层实现,为什么要用索引?加了索引,还是查询很慢,问题出在哪里?
- 索引是可以优化查询,那还有其他优化方式吗
- 索引单列索引和多列索引有什么区别
- 有哪些Sql优化
- 聚集索引高效,为什么要有非聚集索引
- 为什么要建立索引,好处和坏处。
- 左连接、右连接、内连接讲一下。
- ?mysql可不可以对多个字段建索引?
数据结构
- 如何解决哈希表的冲突?
- B+和B-的区别是什么?b树和b+树有什么却别,分别适合应用在什么场景
- map的底层,红黑树的特点,为什么用红黑树而不用别的树
- 了解nat吗?
- map中的key可不可以是结构体?是结构体的话怎么判断key重复
- 二叉树,平衡树 二叉树:红黑树,平衡二叉树(问的比较细,时间复杂度,特征)
- 堆栈的区别
- 堆栈的数据结构
- 一个email表,有id/name两列,用sql语句删除重复的name,只剩下一个(这个真的触及到盲区了,面试官说可以用join做)
场景题
- 如果有一个项目跑了两天之后崩溃了,怎么查这个原因?
- 在Linux下有调试过吗?如果CPU达到100%,怎么调试?如果只有一个程序?如何确认是因为多个线程为响应造成的CPU达满?
- 除了多线程和多进程之外,什么也可以用来实现并发,提高效率?
- 对分布式系统的了解,多个地方的服务器怎么保证数据的一致性?
- 遍历一个文件获取文件后十行(我说用tail命令,他让我不要用命令自己想办法实现,又说了好几种方法他都不满意,最后提示我用快慢指针解决)
- 设计题:设计一个类似于朋友圈或者微博的软件,上线之后看关注的好友的发的最新动态
- 情景题:有64皮马,一个马场里有8个跑道,用最少的场数确定跑的最快的4皮马,
- 买火车票经常出现无法访问,服务器负载过大,如何解决? 客户端方向和服务器方向思考 如何降低服务器上的连接数量。
- 了解过cache方面的编程么?
- TCP和UDP的使用场景。
- 服务端要给别人回包,但是对端套接字已经关了,服务器会出现什么情况 ?如果只是客户端的进程退出了,会怎么样,从网络交互方面回答
- 3、有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎,请问到哪一层会摔碎?(说思想,说了一种方法让继续改进),如果照你说的,先扔x层的思想,怎么确定这个分组。
- linux命令中的mv,cp,mv,cp谁的效率快?为什么他们有什么区别?结合指针谈谈他们的实现?如果让你写一个mv,和cp,你会怎么设计?(有什么更好的办法?)。
- 缓存知道不?作用是什么?在数据库之间加缓存,缓存属于内存吗?数据库的数据在哪儿放着?
- 10.编程题找10亿个数字前100大
- udp报文最大发送大小
- 读文件找出积分最高的100个用户 大顶堆 treemap (其实我的思路是优先队列,但面试官要我用treemap)
算法:
- 找到一个链表环的入口
- 二进制转换成8进制
- 大文件去重排序
- ,冒泡、归并、快排、选择排序的时间复杂度?
- atoi
- 快排怎么实现的,讲思路
- 怎么用两个栈实现一个队列?有没有更好的办法
- 编写代码,求二叉树的宽度
- 将100,101,102,103,104,105以数组的形式写入到Dest.txt文件中,并以相反的顺序读出显示在屏幕上。
- 给出10G的数据,每条存储的一条ip地址,求重复率最高的top5
- 有s个人,围着桌子坐,随机选取一个人开始报数,报到m号时将他剔除,重新开始报数,依次进行,输出剔除序列(主要说数据结构)
- 对数据进行排序,选择算法进行排序(我选了快排加插入)?排序思想
- 海量数据进行排序
- 排序有没有考虑堆排?我说堆排适用于topk之类的算法
- 1~10000个数随机取出一个数,且乱序,找出这个数
- 链表找环
- 大根堆,小根堆。
- 一个单向链表,应该怎么样设计一个方法,看里面是否存在一个环 除了快慢指针还有什么办法 要求空间复杂度是O(1)
- 寻找数组中前10大的数据?时间复杂度?排序:如果数字基于有序:插入排序、希尔排序 如果数字毫无规则:快速排序 如果数字集中在某个较小的区域内,建立哈希表
- 升序数组找出和为指定数字的所有对(小米)
- 1 3 5 6 4 1类似这种先升后降的单链表 将其变成排好序的链表(小米)
- 一个数组中一个数出现两次,其它数都出现四次,要求找出这个数,要求时间复杂度nlogn,空间复杂度logn,
- 进程间通讯的方式有哪些?使用同一块共享内存的进程使用的虚拟地址相同吗?为什么?
信号、信号量、共享内存、消息队列、管道、套接字
有可能相同有可能不同,共享内存实际上已相当于文件,对于共享内存的文件映射到内存,如果两个进程完全相同的话,虚拟地址就是相同的,比如fork出来的进程和父进程访问同一个共享内存虚拟地址就可能相同。而进程如果有一点细微的不同,那么虚拟地址就会有差异
语言方面:
- i++是原子操作
- 多态
- new一个对象,new之后java后台做了哪些工作
- 类加载过程
- 双亲委派模型的好处
- 怎样破坏双亲委派模型
- 互斥锁 读写锁 读写锁怎么用 手写实现一个读写锁(。。。不会)
- 用多线程手写一个生产者消费者模型(。。。也不会)
- 事务 并发事务造成的问题 事务的隔离级别
- 索引 聚集 非聚集 B+树 唯一性索引 普通索引 全文索引 最左前缀 联合索引
- 锁 表锁中共享读锁 独占写锁 行锁中共享锁 排他锁
- 乐观锁 悲观锁 间隙锁 (当时忘讲意向锁了)
- 项目中用到的索引有啥?
- 实际应用中有用到锁机制吗?
- 多线程锁的区别
- Java访问修饰符的区别
- 为什么重写equals方法必须重写hashcode()方法。
- 如何实现子线程结束父线程才能结束
- Spring AOP的原理
c++;
- 说下基类派生类的构造析构顺序?
- 构造函数能不能是纯虚函数? 不能的原因?
设计模式
- 观察者模式是什么?大致说一下代码
- 单例模式 手写单例模式(写的双重if判断带锁的)-》问怎么优化?饿汉模式、懒汉模式 以及具体使用场景 使用单例模式应该注意什么
为什么要使用单例模式
(3)工厂模式 普通工厂 抽象工厂
(4)观察者模式
Java面试题
- 多级缓存是怎么做的,怎么保证缓存中的数据是最新的
- 分布式下,怎么保证多个定时任务服务不会重复执行?
- 一个用户订单表,一个用户有可能多个订单,查询出每个用户的最新订单(当时脑子抽筋了,想太复杂了,后面想了一下好像只要先group by 再 max(date))
- Java 新建线程有哪几种方式
- Java 内存区域,new出来的对象分配在哪里,堆内存里面是怎么划分的,为什么要分为新生代,老年代
- 线程有哪些状态,阻塞状态和等待状态有什么区别
- 数据库建立索引的原则,复合索引的命中规则
- zookeeper 节点类型
- 说下 spring 的 IOC 与 AOP
- Java 反射有哪几种方式
- -1000 到 1000 这两千个数用什么排序比较好
- 100 万个数用什么排序比较好
- 解决哈希冲突的方法
- HashMap 的源码,把知道的都说说,后面追问 HashMap 扩容后怎么确定的元素在新的数组中的位置
- B 树与 B+ 树的区别
- redis 为什么快
- 怎么解决缓存穿透和缓存击穿,例如有黑客一直请求 id=-1 的数据怎么办?
- Java的集合有了解吗,有哪几种
- 了解HashMap吗
- HashMap的原理讲一下
- HashMap和HashTable有什么区别
- HashTable和ConCurrentHashMap的区别
- HashMap的get实现是怎样的一个过程
- 多线程了解吗,讲一下线程的操作
- sleep和wait的区别
- 线程池有了解吗
- 有哪几种线程池
- 线程池的优点
- java的泛型了解吗,一般用在什么场景 泛型就是把类型参数化,在编译的时候才会确定具体的参数。可以用在类、接口、方法中。场景:我觉得当类 方法 接口 这些 当我们不确定使用的对象的类型是啥 或者 可能存在多种类型的可能的时候,可以使用泛型。最熟悉的就是集合类的实现都用到了泛型,这样我们在用的时候可以在<>中指定自己的需求,而不针对每种类型设计一个新的类。用上泛型可以提高类型的安全性,避免强转等。(有官方回答的求指导)
- 什么场景用String,什么场景用StringBuffer 看需求 是否存在线程安全问题,空间限制,时间限制
- JVM怎么判断对象是否可以回收(可达性分析法)
- 可达性分析法中一般可以选哪些对象作为GC root,常量可以吗?虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中静态属性引用的对象。方法区中常量引用的对象。本地方法栈中(Native方法)引用的对象
- springBoot启动流程
- springMVC请求流程(不会,答适配器模式,json互相转换,就硬扯)
- springboot自动配置原理(好多次问到我这个了,我是真的不会呀,八股文一背就会,一说就废)
- 定义了事务但是事务失效的场景
- 拦截器原理(不会)
- mybatis动态SQL原理(不会)
- 已经在zookeeper中注册了的类,再次注册会怎样(知识盲区,不会)
- Redis的5种数据类型以及底层数据结构
- ArrayList和LinkedList的区别和应用场景
- 上面的两个集合对应的线程安全类
- LinkedBlockQueue源码
- CopyOnWriteArrayList源码
- HashMap源码
- ConcurrentHashMap源码
- 问多线程了解吗(因为框架答得不好,就说了精通多线程,哈哈哈,头铁)
- 线程创建方式
- FutureTask如何获取返回值
- Java线程生命周期和操作系统生命周期
- 多线程的debug
- 如何解决并发问题
- AQS源码
- 公平锁,非公平锁,可重入锁,不可重入锁怎么设计的
- CountDownLatch源码
- 四种引用类型以及应用场景
- threadlocal源码
- synchronized修饰静态方法和非静态方法区别
- 字节码中两个monitorexit分别代表什么
- 读写屏障
- synchronized可重入原理
- 从OS层面讲一下为什么synchronized要尽量减小加锁范围和避免重入
- synchronized锁升级过程
- 如何判断对象锁状态
- 偏心锁的记录过程
- 什么情况下hash码处不能放线程ID
- hashcode如何计算
- 对象如何分配,垃圾如何回收,经历了哪些流程
- 很多线程同时往Eden区同时申请内存,分配对象,虚拟机怎么减少往同一块内存上分配对象的冲突
- gc分代年龄最大值,为什么最大值是15
- 假设你设计jvm,你会在哪存gc年龄
- cms是老年代垃圾回收器,它的搭档有哪些?
- cms为什么使用串行垃圾回收器作为备案
- cms如何调优
- G1垃圾回收过程
- 散射标记法(完全没听过)
- 颜色指针
- B+树数据结构,聚簇索引,回表
- 没有唯一值,还有聚簇索引吗
- explain会关注哪些信息
- 索引失效场景
- jmm
- volatile
- 指令重排序,内存屏障
- cas/aba问题
- synchronized锁升级过程
- 自旋锁一定会提高效率?
- 重量级锁的原理
- 线程池七大参数&拒绝策略&工作原理
- JUC相关知道哪些?
- 集合ArrayList,hashmap,linkedlist,concurrentHashmap原理&扩容机制
- 知道哪些Gc算法,可达性分析算法什么对象做为根对象?
- Tcp知道什么(说了保证可靠性的机制&提高性能的机制)
- 幂等性的实现
- 线程池中的线程为什么可以一直处理任务不销毁
- mvc 和 servlet 的关系
- ping 在什么层
- 创建一个存放100个元素的 hashmap 应该设置多大保证不扩容
- linux进程之间怎么通信的。(IPC)
- 多态问的很底层 两个方法,一个参数string,一个参数obj, 调用传参null,问调用哪个方法, 不会
- 10亿个数找两个重复数字
- 10亿个数找最小10个