比较注重网络部分:

1进程的状态转换图画一下:

贝壳(4)贝壳(4)

2:内核态和用户态的切换,系统调用。

什么是内核态和用户态:

因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录、页表等,这些操作显然不能随便让任何程序都可以做,于是就产生了特权级别的概念,与系统相关的一些特别关键性的操作必须由高级别的程序来完成,这样可以做到集中管理,减少有限资源的访问和使用冲突。Intel的X86架构的CPU提供了0到3四个特权级,而在我们Linux操作系统中则主要采用了0和3两个特权级,也就是我们通常所说的内核态和用户态。

行于用户态的进程可以执行的操作和访问的资源都受到极大的限制,而运行于内核态的进程则可以执行任何操作并且在资源的使用上也没有限制。很多程序开始时运行于用户态,但在执行的过程中,一些操作需要在内核权限下才能执行,这就涉及到一个从用户态切换到内核态的过程。

这里再明确一个概念,每个进程都有一个4G大小的虚拟地址空间,在这个4G大小的虚拟地址空间中,前0~3G为用户空间,每个进程的用户空间之间是相互独立的,互不相干。而3G~4G为内核空间,因为每个进程都可以从用户态切换到内核态,因此,内核空间对于所有进程来说,可以说是共享的,不过这么说有些不太严谨,应该说内核空间中大部分区域对于所有的进程来说都是共享的,这不共享的小部分区域是存储所有进程内核栈的区域,为什么这么说,因为每个进程都存在一个内核栈,而各个进程的内核栈之间一定是不共享的。

下面正式开始进入由用户态向内核态切换的过程。

1、发生系统调用时

这是处于用户态的进程主动请求切换到内核态的一种方式。用户态的进程通过系统调用申请使用操作系统提供的系统调用服务例程来处理任务。而系统调用的机制,其核心仍是使用了操作系统为用户特别开发的一个中断机制来实现的,即软中断。

2、产生异常时

当CPU执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行的进程切换到处理此异常的内核相关的程序中,也就是转到了内核态,如缺页异常。

3、外设产生中断时

当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作的完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

可以看到上述三种由用户态切换到内核态的情况中,只有系统调用是进程主动请求发生切换的,中断和异常都是被动的。

https://www.cnblogs.com/vampirem/p/3157612.html 详细。

库函数工作在用户态,系统调用工作在内核态。

所有的操作系统都会提供一些服务用以访问/操作设备等,操作系统会为这些服务提供接口。这些接口就是系统调用 。用户态程序通过调用系统调用可以切换到内核态,访问内存意外的数据,操作外围设备等。

不同的操作系统提供的系统调用会有所差异。

Unix为每个系统调用在标准C库中设置一个具有同样名字的函数 。 一般我们是称这些函数为系统调用。(如标准C库中有函数write(), write()函数直接使用write系统调用相应的内核服务)。 所以一般说write(),指的不是write()这个函数,而是系统调用write。

linux常用命令,看日志怎么看(tail -f)

4:了解redis吗?如果用redis做缓存实现一个商场秒杀怎么做。(大概就是利用redis的原子操作特性,维护一个队列,然后有一个例程每次取队头)

参与过抢购活动就知道,很明显的一点是商即便商品实际没有了也是可以下单成功的,但是在支付的时候会提示你商品没有了。

贝壳(4)
贝壳(4)
贝壳(4)
redis保存数据时都有key和value,key和value要么是String类型的,要么是byte[]类型的
贝壳(4)
贝壳(4)

贝壳(4)

贝壳(4)

贝壳(4)

5:mysql的引擎知道的有哪些(innoDB,mysiam),区别是什么,锁的粒度,事务四个特性(ACID),索引原理(B+tree,聚簇索引,辅助索引),怎么存储的。

贝壳(4)
贝壳(4)

6:数据库-锁(概念、分类、粒度)
(1)概念:
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。
加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。
(2)锁的分类:
共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:更新锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。因为使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁,读取数据,然后将共享锁升级为排它锁,然后再执行修改操作。这样如果同时有两个或多个事务同时对一个事务申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为排它锁。这时,这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请更新锁,在数据修改的时候再升级为排它锁,就可以避免死锁。
(3)锁的粒度:

在sql server2000中锁是具有粒度的,即可以对不同的资源加锁。锁定在较小的粒度的资源(例如行)上可以增加系统的并发量但需要较大的系统开销,从而也会影响系统的性能,因为锁定的粒度较小则操作可能产生的锁的数量会增加;锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少,所以在这里是一种互相制约的关系。

Sql server2000中锁定的粒度包括 行、页、扩展盘区、表、库等资源。

7:事务的四个特性:
贝壳(4)

8:多线程下(或多进程)下访问共享资源的情况

贝壳(4)
贝壳(4)
贝壳(4)

9:B-tree/b+tree 原理以及聚簇索引和非聚簇索引

贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)

贝壳(4)

贝壳(4)
9:http和https的区别,TCPIP四层模型,OSI七层参考模型,DNS在哪一层?
贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)

贝壳(4)
贝壳(4)

贝壳(4)

10:http和https的区别,TCPIP四层模型,OSI七层参考模型,DNS在哪一层?

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

贝壳(4)

https://www.cnblogs.com/wqhwe/p/5407468.html 详细的在这里。
三、HTTPS的工作原理
四、HTTPS的优点
五、HTTPS的缺点
六、http切换到HTTPS

贝壳(4)

贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)

贝壳(4)
11:《数据结构和算法》之中缀表达式、后缀表达式转换

贝壳(4)
贝壳(4)
贝壳(4)

贝壳(4)

https://blog.csdn.net/huangchijun11/article/details/60963444 来源

贝壳(4)

贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)
作者:潇湘Blake
链接:https://www.nowcoder.com/discuss/106653
来源:牛客网

12:还有点时间我们再来写个算法题吧,给你一个数组,返回最大的四个元素(感觉好简单,自己主动加了点戏,先写了一个代码行数最少的,直接排序然后输出,但是因为涉及排序,时间复杂度肯定在o(nlogn)以上了,又通过插入排序思想写了一个复杂度为o(n)的,并解释了一下)

13:正则表达式用的多吗(这个一般我得看着文档才写。解释了一下正则效率其实不如字符串函数,尽量用字符串函数更好)那你写一个解析url的函数吧,要求得到协议,域名,端口,路径,以及参数键值对(直接用explode就完事了)

贝壳(4)

贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)
贝壳(4)

贝壳(4)

什么是URL?
贝壳(4)
贝壳(4)

相关文章: