面经总结 - 持续更新

 

目录

 

协议层次

1、HTTP协议常见响应

Linux操作

1、启动过程 + 排查启动故障

线程

创建线程

线程状态

线程方法

sleep()和wait()的区别


具体的知识点是记不完的,知道框架,知道框架下具体知识的作用和意义,这样会让人更好的理解记忆。

 

协议层次

 

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()唤醒指定的线程或者所有线程,才会进入锁池,不再次获得对象锁才会进入运行状态;
     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值