获得徽章 0
#青训营 x 字节后端训练营#
网络规则和设计
接入层面向终端用户,功能是MAC地址过滤,可收集用户信息。
工作组服务器放置在接入层。可以使用集线器或交换机。
汇聚层作为楼群和小区的汇聚点,功能是 网段划分(VLAN路由)和广播域定义,
可实现网络的访问策略控制和流量控制。
核心层是所有流量的最终汇聚点,功能是 高速数据传输。
展开
评论
#青训营 x 字节后端训练营#
域名解析系统DNS的域名解析过程
正确的查询顺序:本地缓存记录 --- 区域文件 --- 转发域名服务器 --- 根域名服务器
客户端通过域名查找IP地址:
1. 本地解析:客户端DNS缓存 --- host文件
2. 直接解析:本地域名DNS服务器:区域文件 --- 缓存
3. 互联网域名解析器
递归解析:会对根域名解析器产生较大的压力,只有一条线路
主机 --- 本地域名服务器 --- 根域名服务器 --- 顶级域名服务器 --- 权限域名服务器(再返回到主机)

迭代解析
过程:主机 -- 本地;本地 -- 根,返回;本地 -- 顶级,返回;本地 -- 权限,返回(到本地);本地 -- 主机
主机 --- 本地域名服务器 --- 根域名服务器 --- 顶级域名服务器 --- 权限域名服务器(再返回到本地)
展开
评论
#青训营 x 字节后端训练营#
网工复习_无线局域网
5.2无线局域网
1. IEEE802.11标准(采用的工作频段是5GHz和2.4GHz)
名称 工作频段 数据速率
802.11 2.4GHz 1Mbps/2Mbps
802.11b 2.4GHz 11Mbps
802.11a 5GHz 54Mbps
802.11g 2.4GHz 54Mbps
802.11n 2.4GHz,5GHz 600Mbps
802.11ac 5GHz 1Gbps
2. IEEE802.11定义了两种网络拓扑结构
基础设施网络Infrarustructure Networking
无线终端通过接入点(Access Point,AP)访问骨干网设备;AP如同网桥,工作在数据链路层。
特殊网络Ad Hoc Networking(Peer to Peer网络)
是一种点对点连接;无需有线网络和接入点的支持,可通过无线网卡直接通信。
展开
评论
#青训营 x 字节后端训练营#
局域网与城域网复习
评论
#青训营 x 字节后端训练营#
限流实现
用户1427882387446于2023-05-09 17:12发布的图片
评论
#青训营 x 字节后端训练营#
Java内存模型与线程
硬件的效率和一致性
由于计算机的存储设备和处理器的运算速率有很多的差距,所以使用高速缓存来作为处理器和内存之间的缓冲。这样处理器无需等待缓慢的内存读写。
内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问过程的抽象。
展开
评论
#青训营 x 字节后端训练营#
锁的对比
偏向锁
加锁解锁不需要额外消耗。
如果存在锁竞争则带来额外锁撤销的消耗。
适用于只有一个线程访问场景。
轻量级锁
竞争的线程不会出现阻塞。
始终得不到线程竞争会自旋导致消耗CPU。
适用:追求响应时间。
重量级锁
线程竞争不使用自旋,不消耗CPU。
线程阻塞,响应时间慢。
适用:追求吞吐量。
展开
评论
#青训营 x 字节后端训练营#
探索Java装箱和拆箱的奥妙_02
1.为什么要包装类型
1 对象引用:基本数据类型不是对象,无法使用对象引用。包装类型是。
2 泛型:泛型不能使用基本数据类型,必须使用包装类型。如List<Integer>
3 null值:基本数据类型不能为null,包装类型可以。
4 类型转换:包装类型提供了许多类型转换方法,如字符串转整数。
5 方法重载:方法重载可以使用不同的参数类型。而基本数据类型和对象引用是不同的类型,所以可以在方法中对他们进行重载。
2.装箱和拆箱的进化过程
1 在Java1.4及之前,装箱拆箱需手动进行。如下代码
int x = 10;
Integer y = new Integer(x);//手动装箱
int z = y.intValue();//手动拆箱
2 在Java5开始,引入了自动装箱和手动装箱机制。如下代码
int x = 10;
Integer y = x;//自动装箱
int z = y;//自动拆箱
3 在Java9开始,引入了一种新的装箱方式:紧凑型装箱(compact Number Box)。
它能够更高效存储小范围内的数值,但只适用于byte,short和int类型。
由于这些类型取值范围都比较小,可以用一个byte或short类型的变量来存储他们的值,而无需使用一个整型变量。
展开
评论
#青训营 x 字节后端训练营#
探寻Java装箱和拆箱的奥妙_01
Java中的装箱和拆箱是指基本数据类型与其对应的包装类之间进行转换的过程。
1 装箱(基本数据类型——包装类)
1.自动装箱(auto boxing)由Java编译器实现。
2.手动装箱(manual boxing)调用包装类的构造函数实现。
2 拆箱(包装类——基本数据类型)
1.自动拆箱(auto unboxing)由Java编译器实现。
2.手动拆箱(manual unboxing)调用包装类的xxxValue()
方法实现。
展开
评论
#青训营 x 字节后端训练营#
多端登录如何实现踢人下线
1.项目背景
一个项目往往有小程序,APP,PC等多端访问。对于京东,淘宝等项目,有类似以下的业务:一台电脑登录PC端后,APP端强制下线;两个APP端不可同时登录,一APP端登录后,另一APP端请求登录时应先强制下线之前已登录的APP端。
2.项目只有PC端
1 用户在登录时,先获取redis中的session。如果查找不到则可以直接登录。
2 如果可以获取到session,说明之前用户已经有登录过。此时需要验证用户之前登录过的PC端是否是此时登录的PC端,如果不是,需要强制下线之前登录过的PC端。
根据session中的IP地址比对来进行判断。
补充:session是存放在redis中的,其中包含userId,登录的ip地址等一些用户信息。
3.项目有PC端,APP端,小程序端
1 项目一般会出现多种情况:单端登录,双端登录,三端登录
2 用户session存储的格式是
{
userId:用户Id
clientType:PC端,APP端,小程序端
imei:设备的唯一编号(对PC端指IP地址,其余指手机设备的唯一编号)
}
3 单端登录
拿到用户所有的session,根据clientType和imei号强制其它端的用户session删掉,通知客户端强制下线。
4 双端登录
1.已登录PC端和APP端,此时登录小程序,让APP端强制下线
拿到用户所有的session,此时会有两个用户session,拿到clientType=APP的session。然后通知客户端这个端要强制下线。
2.已登录一个PC端和APP端,此时另一台手机登录APP端,让一登录的APP端强制下线
拿到用户所有的session,此时会有两个用户session,拿到clientType=APP的session,对imei号不同的对应设备进行强制下线。

展开
评论
#青训营 x 字节后端训练营#
如何避免SSH连接中断
1.调整ClientAliveInterval和ClientAliveCountMax参数
应用:
在SSH服务器配置文件中添加
ClientAliveInternal 60
ClientAliveCountMax 3
记录,表示SSH服务器每60s向客户端发送一次"心跳"数据包,若连接3次未收到应答,则自动断开连接。
2.调整TCPKeepAlive参数
应用:
在SSH服务器配置文件中添加
TCPKeepAlive yes
记录,保证内核应向对等端发送TCP KeepAlive数据包以检测连接是否断开。
3.调整MaxStartups参数
应用:
在SSH服务器配置文件中添加
MaxStartups 10:30:60
记录,表示允许10个并发连接,若有多个连接尝试建立,等待30秒,仍未有空闲连接则再等60秒。
该参数控制允许同时建立到SSH服务器的最大连接数。
服务器的SSH config文件
根据操作系统和发行版的不同,一般有以下两种路径
/etc/ssh/sshd_config:SSH服务器的配置文件
~/ssh/config:SSH客户端的配置文件
展开
评论
#青训营 x 字节后端训练营#
Java字节码
1.在Java中,JVM可理解的代码就是字节码(扩展名为.class文件)
2.Java字节码只面向虚拟机
3.Java程序从源代码到运行的过程
.java(javac编译)——.class(解释器&JIT)——机器可理解的代码(机器码)
4.字节码——机器码的过程
1 解释器实现
JVM类加载器加载字节码文件。
解释器逐行解释执行。
2 JIT(just-in-time compilation)编译器实现
JIT编译器属于运行时编译。
JIT编译器完成第一次编译后,会将字节码对应的机器码保存下来,对于经常调用的方法和代码块(热点代码)可直接调用。
5.JDK9引用了一种新的编译模式AOT(Ahead of Time Compilation)直接将字节码编译成机器码,避免了JIT预热等各方面的开销。
展开
评论
#青训营 x 字节后端训练营#
数据库_数据库基础
1.常见的数据库
关系型数据库:MySQL,Oracle,PostgreSQL,SQLserver
非关系型数据库:Redis内存数据库,MongoDB文档数据库
2.MySQL操作命令
1 SQL(Structure query language)结构化查询语句
分为DDL(定义),DML(操作),DQL(查询),DCL(控制)
2 操作数据库步骤
1 连接MySQL
>mysql -h localhost -u root -p
其中-h服务器地址,-p回车后输入密码
-u登录账号,-P(大写)端口号
2 SQL语句可以转行,但要以分号结尾。
命令不区分大小写,关键字和函数建议用大写。
>SELECT * FROM user WHERE uid=17;
3 命令打错了换行不能修改,\c回车取消本次命令
>select * form
->user \c
展开
评论
#青训营 x 字节后端训练营#
实时联网游戏后台服务技术选型和挑战(网络接入层)
并发模型
1 进程:
有独立的运行空间
进程一次只能处理一个请求(简单)
请求进程——系统阻塞/时间片用完——调度执行新进程(导致上下文切换开销大:低效)
典型应用Apache
2 线程:
一个请求对应一条线程(多条线程共享地址空间:需额外的线程间互斥,同步机制)
线程由操作系统内核自动调度(调度上下文切换开销更小)
典型应用Tomcat
3 IO多路复用
典型应用Nginx,netty
4 协程
运行在用户空间
遇到阻塞/特定入口——显式调用切换方法主动让出CPU,由任务调度器选另一个协程执行
典型应用Lua,Python,golang
展开
评论
#青训营 x 字节后端训练营#
技术问题-经典网络模型
1 终端
2 接入层:二层交换机为主
trunk链路
access链路:隔离广播域,根据不同的vlan进行隔离
stp:生成树协议,防止路由换路
3 核心层:和接入层由svi接口连接
网关:svi接口网关
VRRP:防止接入换路配置stp
rstp:防止路由环路
4 出口:和核心层由OSPF路由连接
5 运营商:连接出口 通过ACL,NAT进行拨号
展开
评论
#青训营 x 字节后端训练营#
实时联网游戏后台服务技术选型与挑战_概述
1 从网络架构而言,网络游戏分为
C/S架构(客户端与服务器端的通信),
P2P架构(特指客户端间直连通信),
C/M架构(C/S和P2P架构混合)。
2 C/S和C/M相似,游戏后台可分为
网络接入层:连接PC和游戏逻辑层
游戏逻辑层:提供各种服务
数据存储层:进行数据存储

展开
评论
#青训营 x 字节后端训练营#
Innodb锁类型
1 加锁机制
乐观锁,处理数据之前不加锁,不会并发。
悲观锁,处理数据之前加排他锁(写锁),会并发。
2 锁粒度
1 表锁
开销小,加锁快,锁定力度大,锁冲突概率高,并发度低,不死锁。
表锁时会锁定表中所有数据,对表中任何请求都会堵塞,从而造成锁冲突概率高。(读写和写写会造成堵塞)
2 行锁
开销大,加锁慢,锁定力度小,锁冲突概率低,并发度高。
3 页锁
会死锁。
3 兼容性
1 共享锁(读锁/S锁)
一事务获取该锁,其他事务可获取共享锁(可读),不能获取排他锁(不可写)
2 排他锁(写锁/X锁)
一事务获取该锁,其他事务不可获取共享锁(不可读),不能获取排他锁(不可写)
4 锁模式
记录锁:锁定一个行记录
gap锁:锁定一个区间
next-key:锁定行记录+区间
意向锁:支持多种粒度锁存在
展开
评论
#青训营 x 字节后端训练营#
Innodb页
1.Innodb页结构
Innodb页为16K,分为7部分
1 File Header文件头,占38字节
2 Page Header页头,占56字节
3 Infimum+Supermum最大记录和最小记录,占26字节
4 User Records用户记录,不定
5 Free Space空闲空间,不定
6 Page Directory页目录,不定
7 File Trailer文件结尾,占8字节
2.在页中的存储流程
当插入1条记录时,会从Free Space中划分出一定空间,划入User Space中。
当Free Space空间用完,则需要重新申请新的页空间。
3.不同Innodb页的数据结构
需要多个页存放数据时,会通过File Header头中的FILE_PAGE_PREV和FILE_PAGE_NEXT在不同页之间形成双向链表。

展开
评论
#青训营 x 字节后端训练营#
Innodb逻辑存储结构
所有数据都存放在表空间Tablespace中
1 Tablespace表空间:是Innodb存储引擎逻辑的最高层。
所有数据存放在一共享表空间ibdata1中。
2 Segment段:常见的有三种
数据段:B+树的叶子结点
索引段:B+树的非索引结点
回滚段。
由引擎自身完成对段的管理。
3 Extend区(1MB):区由连续页组成。
为保证连续性,引擎一次性从硬盘中申请4~5个区。
4 Page页(16K):是Innodb磁盘管理最小单位
页类型有:数据页,undo页,系统页等
默认16K。Innodb1.2x版本后可通过innodb_page_size设为4K,8K,16K
展开
评论
下一页