目录
具体的知识点是记不完的,知道框架,知道框架下具体知识的作用和意义,这样会让人更好的理解记忆。
协议层次
1、HTTP协议常见响应
以下是我认为开发中会用到的客户端以及服务端的响应代码:
面试中很容易遇到这个问题,那如果想不起来有点偏的代码意义,我觉得可以跟面试官解释说,
你知道他是什么方向大概什么问题的错误(直到方向,可能比知道具体知识有用),比如503,如果说不出具体意义,可以说我知道他是服务器端的错误等等。
- 成功响应(2开头)
- 200 OK,客户端资源请求成功;
- 201 Created,创建新资源请求成功;
- 202 Accepted,请求已经接收到,但还未响应;(从英语角度上,个人认为这里是不是应该用received)
- 重定向(3开头)
- 300 Mutiple Choice,被请求的资源有一系列可供选择的回馈信息;
- 301 Moved Permanently,被请求的资源已永久移动到新位置;
- 302 Found,请求的资源在现状临时从不同的URI响应请求;
- 307 Temporary Redirect,请求的资源现状临时从不同的URI响应请求。;
- 308 Permanent Redirect,请求的资源永久移动到另一个URI;
- 客户端响应(4开头)
- 400 Bad Request,服务器看不懂客户端传来的请求;
- 403 FOrbidden,服务器已理解请求但拒绝执行;
- 404 Not Found,请求的资源不存在服务器上;
- 服务端响应(5开头,先客户后服务,先有客户才好服务)
- 500 Internal Server Error,服务器不知道如何是好;
- 501 Not Implemented,此请求方法不被服务器支持且无法被处理;
- 502 Bad Gateway,服务器得到一个错误响应;
- 503 Service Unavailable,服务器不可用没有准备好处理请求;
- 504 Gateway Timeout,服务器作为网关不能及时得到响应;
- 505 HTTP Version Not Supported,服务器不支持请求中所使用的HTTP协议版本;
参考文章:
https://www.cnblogs.com/sddai/p/5649939.html
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
Linux操作
1、启动过程 + 排查启动故障
启动过程大致分为五步:
- 内核的引导
- 运行 init
- 系统初始化
- 建立终端
- 用户登录系统
- 内核引导:
操作系统 + /boot
- 运行init:
init进程
许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
- 系统初始化
运行启动脚本,rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下
- 建立终端
rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。
- 用户登录
一般来说,用户的登录方式有三种:
- (1)命令行登录
- (2)ssh登录
- (3)图形界面登录
详细参考:https://www.runoob.com/linux/linux-system-boot.html
线程
创建线程
常见的三种方式:1、继承Thread类;2、实现Runnable接口(推荐,避免单继承局限性);3、线程池
https://blog.csdn.net/Longtermevolution/article/details/103803269
线程状态
线程方法
sleep()和wait()的区别
每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。
- 1、是否释放同步资源锁
- sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!);
- wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度);
- 2、使用地方
- sleep()方法可以在任何地方使用;
- wait()方法则只能在同步方法或同步块中使用;
- 3、从类的特点来看
- sleep()是线程线程类(Thread)的方法,调用会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复;
- wait()是Object的方法,调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,不再次获得对象锁才会进入运行状态;