面试准备笔记

一、内存管理笔记

1. 物理地址和逻辑地址
物理地址:加载到内存地址器中的地址,内存单元的真正地址。编号从0开始一直到物理内存最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,有没有特权级检查
逻辑地址:CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。
2.Paging,分页内存管理
(1)分页的最大作用就在于:使得进程的物理地址空间可以是非连续的
逻辑地址:页号+页内地址
物理地址:块号+页内地址
根据逻辑地址转物理地址:先将逻辑地址分成页号和页内地址两部分,根据页号查询页表得到块号,则物理地址=块号+页内地址。

操作系统为什么有物理地址和逻辑地址,为什么分页管理内存

进程和线程的区别,进程间通信方式

根本区别:进程是资源分配最小单位,线程是程序执行的最小单位。
图片说明
地址空间:进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。
资源拥有:进程之间的资源是独立的;同一进程内的线程共享本进程的资源。
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
线程是处理机调度的基本单位,但是进程不是。
系统开销:进程执行开销大,线程执行开销小
进程间通信方式
1.无名管道( pipe ): 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

2.高级管道(popen): 将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。

3.有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

4.消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5.信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

6.信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

7.共享内存( shared memory ) : 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

8.套接字( socket ) : 套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

讲讲TCP/IP的四层结构,他们分别含有哪些协议,浏览器在哪一层,QUIC讲一下

HTTP1.0 / 1.1 / 2.0都有什么不同

Java类加载机制,双亲委派模型有可能被破坏吗

volatile关键字的作用

讲讲数据库读写分离的实现方式

sql语句,怎样查找不重复的字段,distinct,还有其他方法吗,group by。

说一下Redis有哪些数据结构,ZSet底层数据结构是什么

讲一下分布式事务,讲讲分布式锁

讲一下Spring Boot 的 starter

算法题:买卖股票的最佳时机(只能有一次买卖,可以最多两次买卖)

反问

二面
数据库B+树一个非叶子节点的大小是多少(这题不会所以记得比较清楚)
写一个sql代码:给一个学生表有学生id,课程id,成绩共三列,找出至少3门课成绩大于80分的学生

算法题(leetcode原题):给一个数组,例如[1,2,3,4,5],a[i]表示在该位置可以向前行走的距离,判断是否可以到达数组的最后一个元素

三面

sql题:给一个学生表有学生id,课程id,成绩共三列,找出语文成绩大于60且数学成绩小于90的学生

把上面的表行转列

算法题:让你设计一个微信发红包的api,你会怎么设计(面试官问我下一个数字(1234-->1243)这道题做过吗,我说做过,他就现场出了这道题),不能有人领到的红包里面没钱,红包数值精确到分。

作者:牛客329909327号
链接:https://www.nowcoder.com/discuss/414964
来源:牛客网

一面
四道算法,注重代码质量
大数相加
判断并输出一个字符串的重复子串,如abcabcabc输出abc,aaa输出a,af输出空
输出最靠近\sqrt{x}
x

的整数,x为long型,不能使用库函数和非整数变量
根据二叉树的前序和后序遍历构造二叉树
二面
自我介绍
项目
操作系统
线程和进程的区别
进程的调度算法
内存模型,堆和栈有什么区别?
多线程访问堆会有什么问题(我只答出了原子性问题和死锁,还有可见性问题和重排)
举个死锁的例子
计算机网络
网络分为哪几层
TCP、UDP区别
TCP为什么是可靠传输,采取了哪些措施
快重传是什么
TCP是如何建立连接的
三次握手头两次会传输什么
HTTP在那一层
get,post,put分别代表什么
状态码讲讲,200,302,404,500
HTTPS和HTTP的区别
HTTPS建立连接的过程
CA证书是里面有些什么
算法
两个升序链表,合成一个降序链表
寻找输出两个链表的公共节点
用1毛 2毛 5毛组成n块钱有多少种方式
三面
自我介绍
项目
操作系统
操作系统线程模型
内核空间下的线程
轻量级进程和用户线程的对应关系
程序创建一个线程的过程,用户态内核态都讲讲
虚表有什么用
编译时多态和运行时多态
Java基础
讲讲Hashmap
算法
一颗二叉树两个节点的公共祖先 递归和非递归
反问
总结
打好基础,操作系统和计算机网络是考察重点
项目要准备好,用到的技术,优化的空间
每一面都有算法,基本的代码能力不能丢
感谢牛客前辈的经验

全部评论

相关推荐

心中的变压器:简历需要突出重点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务