Linux端口占用如何查看

  1. netstat -anp | grep 端口号
  2. netstat -nultp //查看当前所有已经使用的端口情况

lsof -i
netsat -anp
Linux文件权限
chmod 权限数字 文件名

软硬链接

字节一面2 - 图1
链接文件:用于解决文件的共享使用,可分为硬链接和(符号链接)

硬链接

字节一面2 - 图2
通过索引节点来进行链接【linux中,保存在磁盘分区中的文件都会分配一个编号,即索引节点Inode,为文件或目录在同一文件系统中的唯一标识】
在linux系统中,允许多个文件名指向同一索引节点
作用:

  1. 允许一个文件拥有多个有效路径名,防止”误删“源数据

    linux文件系统:只要文件的索引节点还有一个以上的链接,只删除其中一个链接不影响索引节点本身和其他链接。 只有当最后一个链接被删除时,此时若有新数据写入磁盘,该索引对应的数据块和才会被释放,空间被新数据覆盖

软链接

即符号链接,类似于windows中的快捷方式,其就是一个普通文件,其存放的内容是另一个文件的路径名指向,通过该方式可快速定位源文件实体。
作用:

  1. 软连接是存放另一个文件路径的形式存在
  2. 软链接可跨文件系统,硬链接不可
  3. 软链接可对不存在的文件或目录链接,硬链接不可
  4. 软链接可以对目录链接

相对于硬链接:

  1. 相对于文件副本存在
  2. 不允许链接目录
  3. 硬链接仅在同一文件系统才可创建
  4. 删除最后一个硬链接才影响源文件

kafka在增加分区之后,分区中的信息怎么调配

Session和Cookie

session跟踪是Web程序中常用的计数,用来跟踪用户的整个会话。常用的会话跟踪计数是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务端确定用户身份。

Cookie

一个用户的所有请求都应该属于同一个会话!即用户A在TB购买的任何商品都应在A的购物车内,不论什么时间购买。
Web程序基于HTTP协议传输数据,HTTP协议是无状态协议**。一旦数据交换完毕,客户端和服务端的连接关闭,再次交换数据需要建立新的连接。**这就意味着服务器无法从连接上跟踪会话。
Cookie就是这样一种跟踪会话的机制。

原理

HTTP作为一种无状态协议,服务器无法确定客户端身份。故Cookie即使客户端的通信证,用于服务器确认身份。

cookie实际是一小段文本信息

字节一面2 - 图3

  1. 客户端请求服务器,若服务器要记录客户端状态,则发送response向客户端颁发一个cookie
  2. 客户端保存cookie
  3. 客户端请求网站时,连同请求和cookie一同提交给服务器
  4. 服务器检查cookie,以此辨别用户状态

    服务器可根据需要修改cookie内容

cookie对象使用**键值对保存用户状态,一个cookie对象保存一个属性对**,一个request或response有多个cookie。

性质

  • 不可跨域名性:
    不同网站直接不能互相操作cookie
  • 有效期:
    若属性maxAge为正数,浏览器会将cookie持久化,即写入对应的cookie文件。

若为0,则删除该cookie

  • 修改:

若想修改cookie只能用同名的cookie覆盖

  • 安全性:

若不希望cookie在HTTP等非安全协议中传输,设置cookie的secure为true

永久登录

实现方法:

  1. 把登录信息如账号、密码等保存在cookie中,并控制cookie有效期,下次访问时再验证cookie中的登录信息。
  2. 把登录信息加密后放入cookie,登录时解密与数据库比较

    session

    session是服务器端使用的一种记录客户端状态的机制,但增加了服务器存储压力

    概念

    cookie机制是通过检查客户端的“通信证”来确定客户身份的话,session机制便是通过检查服务器 上的“客户明细表“来确定客户身份。
    session相当于在服务器上建立一份客户档案,客户来访时查询客户档案表即可。
    session对象是在客户端第一次请求服务器时创建的。

性质

生命周期

session在客户端第一次访问服务端时创建【注意:访问静态资源时不会创建session】,
在生成后,只要用户继续访问,服务器就会更新session的最后访问时间,并维护该session

有效期

为了防止内存溢出,服务器会把长时间未活跃的session删除,即session的超时时间。

session与cookie

session不能通过http连接来判断同一客户,故需要cookie作为识别标识。服务器向客户端发送一个sid的cookie,其值为该session的id。

URL地址重写

对于不支持cookie,url重写是将该用户session的id信息重写到URL地址中
服务器能够解析重写后的URL获取session的id。
即使客户端不支持cookie,也可用session来记录用户状态!

Cookie和Session的区别

**

Cookie Session
存储位置 客户端 服务器
生命周期 预先设置的生存周期,或永久的保存于本地的文件。(cookie) IE启动到IE关闭.(浏览器页面一关 ,session就消失了)

TCP 拆包和粘包

MSS:Maximum segment size,最大分段大小,即传输数据(不包含头部信息)的大小 MTU:最大传输单元,即MSS+头部信息的大小,即发送出去的最终报文大小。 为了达到最大传输效能,TCP会通过滑动窗口协商MSS大小,第一次发送的MSS大小由网络带宽决定

概念

假设客户端向服务器发送两个数据包,用packet1和packet2标识。

粘包:不同数据包粘连

字节一面2 - 图4
原因:

  • 发送端原因:由于nagle算法,判定先放入packet1可用数据过小,将packet2也放入缓冲区,合并成一个大包发送给服务端,服务端无法区分p1和p2的数据
  • 接收端原因:服务器未能即使处理首先发来的p1包,又接收到了客户端发来的p2包,服务端读取缓存时无法区分

解决方案:

拆包:同一数据拆分发送

字节一面2 - 图5【此处同时发生了粘包和拆包】
原因:

  • 发送的数据>套接字缓冲区
  • 发送的数据>MTU

    解决方案

    无论拆包和粘包,其本质问题都是无法区分包界限

  • 消息数据定长,不足补空格

    • 缺点:浪费存储空间和带宽
  • 消息数据使用特定分隔符区分界限
  • 消息数据中添加消息头,且消息头中至少包含【消息的长度数据】,服务端收到后便直到数据的边界

    Reactor

    基于事件触发机制,待事件触发时,才会调用处理器进行数据处理。一个线程处理大量的事件 作为事件驱动模式,对于事件的处理是基于回调函数去进行处理。若有事件触发,reactor将其压入线程池中的任务队列,等待线程空闲,并调用对应的回调函数来执行该事件

Reactor模式称为反应器模式或应答者模式,是基于事件驱动的设计模式,拥有一个或多个并发输入源,有一个服务处理器和多个请求处理器,服务处理器会同步的将输入的请求事件以多路复用的方式分发给相应的请求处理器

单线程Reactor模式

Reator: 负责响应IO事件,当检测到一个新的事件时,交由handler处理 handler: 将自身与事件绑定,负责事件的处理。

字节一面2 - 图6
字节一面2 - 图7
单线程Reator模式,线程是个多面手,负责多路套接字分离,建立新连接,以及任务的分派

多线程Reactor模式

字节一面2 - 图8
在单线程Reator模式基础上,做如下更改:

  • handler交由线程池处理
  • reactor可仍为单个线程。若服务器为多核处理器,也可将Reator拆分为多个线程

优点

  • 响应快,不必为单个同步时间所阻塞
  • 编程简单,可最大程度避免线程间的同步与互斥问题
  • 可扩展性,可通过增加reactor的数量来充分利用服务器资源
  • 可复用性,reactor框架本身与业务逻辑无关,具有很高的复用性

    缺点

  • reactor需要OS底层同步事件信号分离器支持