介绍
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的 IO 性能,时常用于服务端的反向代理和负载均衡。
上图基本上说明了当下流行的技术架构,其中Nginx有点入口网关的味道。
正向代理:
反向代理:
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助VPN来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。
当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。
保障应用服务器的安全(增加一层代理,可以屏蔽危险攻击,更方便的控制权限)
实现负载均衡(稍等~下面会讲)
实现跨域(号称是最简单的跨域方式)
Nginx的Master-Worker模式
启动Nginx后,其实就是在80端口启动了Socket服务进行监听,如图所示,Nginx涉及Master ...
困难现状
软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?
用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。
如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:“它在我的机器可以跑了”(It works on my machine),言下之意就是,其他机器很可能跑不了。
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。
但是会有以下的问题:
(1)资源占用多
虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 ...
题目解答
一 基础知识
1.若CPU的寻址能力是 2^n字节(Byte),那么地址总线宽度为 n 位。
8KB = 2^13byte
所以为13
2.1KB存储器的地址范围, 1KB = 1024个存储单元,地址从0开始编号
所以为0-1023
3.1KB存储器可存储的数据量,1KB = 2^13bit
可存储 2^13 bit
可存储 2^10 Byte
4.常见的转换:::
1KB = 2^10Byte
1MB = 2^20Byte
1GB = 2^30Byte
6.传输1024字节所需次数
若数据总线宽度为 n 位,则每次传输 n/8 字节
所需次数 = 总字节数 ÷ 每次字节数
8086(16位)→ 一次2B → =512 次
80386(32位)→ 一次4B → =256 次
8080:8位 → 1B
8088:8位 → 1B
8086:16位 → 2B
80286:16位 → 2B
80386:32位 → 4B
二 寄存器
1.补充完整:
mov 是赋值指令,不影响标志位。
add 是加法指令,结果存入目标寄存器。
ax 包括 ah(高8位)和 al(低8位)。
指令演示: ...
web基础
1.JavaWeb是什么(静态资源和动态资源)
JavaWeb 是基于 Java 技术的 Web 开发体系,用于构建浏览器/服务器(B/S)架构的动态网站或服务。
核心组成部分:
模块
说明
Servlet
JavaWeb 的核心,用于处理 HTTP 请求
JSP / Thymeleaf
页面展示层,用于动态生成 HTML 内容
Filter / Listener
过滤器和监听器,提供请求过滤、生命周期监听等功能
Web.xml
部署描述文件,用于配置 Servlet、Filter 等组件(Spring Boot 多用注解配置)
静态资源
纯前端文件,如 HTML、JS、CSS、图片等
动态资源
由 Servlet / Controller 处理、运行时生成的内容
类型
描述
是否经过服务端处理
静态资源
浏览器请求后直接返回内容(如 HTML/CSS/JS/图片)
❌ 不经过 Java 代码处理,直接由服务器返回
动态资源
运行时由后端生成(如 .jsp、Servlet、Controller 响应 JSON)
...
计算方法——公式汇总
第一章:误差分析
绝对误差
Δ=∣x∗−x∣\Delta = \bigl|x^* - x\bigr|
相对误差
δ=∣x∗−x∣∣x∗∣\delta = \frac{\bigl|x^* - x\bigr|}{\lvert x^*\rvert}
四舍五入误差限(保留到第 nn 位有效数字)
Δmax=12×10−n,δmax=Δmax∣x∣\Delta_{\max} = \tfrac12 \times 10^{-n}, \quad \delta_{\max} = \frac{\Delta_{\max}}{\lvert x\rvert}
有效数字与相对误差关系
若已知相对误差 ε\varepsilon,则有效数字位数 nn 满足
12 10−(n−1) ≤ ε < 12 10−(n−2).\frac12 ,10^{-(n-1)} ;\le; \varepsilon ;<; \frac12 ,10^{-(n-2)}.
误差传播
乘除法:
δ(f(x1,…,xk))≈∑i=1kδ(xi).\delta\bigl(f(x_ ...
架构
项目分为四个主要模块:
backend:数据库核心功能实现
client:客户端实现
transport:网络传输层
common:公共工具和异常处理
后端
dm/数据管理:实现数据页面的管理和持久化
DataManager.java:数据管理器接口
DataManagerImpl.java:数据管理器实现
PageOne.java:特殊页面,存储元数据
PageX.java:数据页面
Logger.java:日志管理
im/索引管理:实现B+树索引
BPlusTree.java:B+树实现
Node.java:B+树节点
LeafNode.java:叶子节点
InternalNode.java:内部节点
tbm/表管理:实现表的创建、删除和管理
Table.java:表的抽象
TableManager.java:表管理器接口
TableManagerImpl.java:表管理器实现
Field.java:字段定义和管理
tm/事务管理:实现事务的ACID特性
ransactionManager.java:事务管理器接口
TransactionManagerIm ...
日志
1.在 Mydb 数据库中,日志模块是如何实现崩溃恢复的?请详细说明日志格式、校验机制、写入流程和恢复逻辑,并分析可能存在的性能瓶颈及优化方案。
日志设计
redo log:记录事务提交后的数据修改,用于崩溃后重做已提交事务(如数据页修改记录);
undo log:记录事务提交前的原始状态,用于回滚未提交事务(如行版本号、旧值)。
12[全局校验码(4B)][日志条目1][日志条目2]... 日志条目格式:[条目长度(4B)][校验码(4B)][数据内容(N字节)]
日志文件头部 4 字节为全局校验码,每条日志以[4字节长度+4字节校验码+数据]组成。启动时会从头部开始校验每条日志的 checksum,若全局校验码不一致则截断文件尾部。”
崩溃恢复
校验
从文件头部开始读取每条日志,校验单条日志的 checksum;
累计计算全局校验码,与文件头部校验码比对,不一致则截断文件尾部。
redo
扫描日志,提取所有状态为COMMITTED的事务记录;
按日志顺序重新执行数据修改操作(如更新数据页)。
undo
扫描日志,找到状态为ACTIVE或ABORTED的事务;
...
知识点分布
计算:
1.进制转换
10进制,8进制,16进制,20进制
2.源码反码补码
3.余三码
4.公式运用转换
化简,卡诺图,公式
数字逻辑
两个简答,三个计算二进制转8 10 16饭吗不拿 雨伞吗
化简
函数化简,标准语或表达式
卡诺图化简
组合逻辑电路分析
函数逻辑表达,nc图,功能
隐含表
状态化简
时序逻辑电路,什么型的
死胎针指标
状态相应队列
简答题
与非门/或非门型R-S触发器差异
同步与异步时序电路对比
组合与时序逻辑区别
逻辑函数三种描述方式(真值表、代数表达式、卡诺图)
卡诺图化简步骤与规则
1.根据所采用的半导体器件不同,集成电路可分为哪两大类?各自的主要优缺点是什么。
根据所采用的半导体器件不同,集成电路可分为两大类:一类是采用双极型半导体器件作为元件的双极型集成电路;双极型集成电路的主要特点是速度快、负载能力强,但功耗较大,集成度较低;
另一类是采用金属-氧化物-半导体场效应管作为元件的单极型集成电路,又称MOS集成电路。MOS集成电路的特点是结构简单、制造方便、集成度高、功耗低,但速度较慢。
2.简述晶体二极管的静态特性
1.正向特性 :
正向电压 ...
6.11模拟面试
1.什么是 Java 的面向对象编程?它的核心特性有哪些?
面向对象编程是OOP是说就是用“对象”来组织代码,java就是一门面向对象编程的语言。
java的面向对象的三大特征是封装继承多态
封装:反射,修饰符
继承:构造方法调用,final
多态:方法重载,方法重写
抽象:抽象和接口
静态:
2.说说 Java 中 ArrayList 和 LinkedList 的区别,以及各自的适用场景
底层:
遍历和插入:
arrayList扩容:1.5,数组的复制
内存占比:
使用场景:
线程安全:
3.HashMap 的底层原理
特点:
底层实现,1.7/1.7之后,头插和尾插
put过程
转换红黑树/扩容:当链表长度≥8 且数组容量≥64 时转红黑树 为什么用红黑树
线程安全:
concurrenthashmap,底层,put过程
4.Spring 框架中,Bean 的作用域有哪些?请分别说明它们的生命周期和应用场景
5 大标准作用域:
Singleton:全局唯一实例,Spring 容器加载时创建,适用于无状态服务;
Prototype:每次获取新实例,适用于有状态对象 ...
业务
service
ShopServiceImpl:
使用redis设置和查询店铺的状态。redistemplate.opsforvalue.set/get(key)
AddressBookServiceImpl:
新增地址,实体类设置字段的值,然后调用mapper的insert方法。
修改地址,调用updata调用主键去更新方法更新
设置默认地址,设置默认地址,然后获取当前用户的id,然后在sql中set用于默认地址,where userid。然后更新默认字段 return
使用LambdaUpdateWrapper去写一个查询条件
1234567891011Long userId = BaseContext.getCurrentId();// 1. 将该用户的所有地址设为非默认LambdaUpdateWrapper<AddressBook> wrapper = new LambdaUpdateWrapper<>();wrapper.eq(AddressBook::getUserId, userId).set(AddressBook::getIsDefaul ...
基础语法回顾
1.SQL110 插入记录(一)
牛客后台会记录每个用户的试卷作答记录到exam_record表,现在有两个用户的作答记录详情如下:
用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分;
用户1002在2021年9月4日上午7点1分2秒开始作答试卷9002,并在10分钟后退出了平台。
试卷作答记录表exam_record中,表已建好,其结构如下,请用一条语句将这两条记录插入表中。
Filed
Type
Null
Key
Extra
Default
Comment
id
int(11)
NO
PRI
auto_increment
(NULL)
自增ID
uid
int(11)
NO
(NULL)
用户ID
exam_id
int(11)
NO
(NULL)
试卷ID
start_time
datetime
NO
(NULL)
开始时间
submit_time
datetime
YES
(NULL)
提交时间
score
tinyint(4)
YES
(NULL) ...
基础知识
关系代数
关系代数就是:一种抽象的查询语言用对关系的运算来表达查询
关系看上去像一张二维表,每个表由行和列组成
行代表一个元组,即数据记录。列代表属性,即字段
关系的域为一组原子值(不可再分割的值)
关系中的元组必须各不相同(元组的唯一性)
符号表示
元组 t 与 t[Ai] :
t 就是一行数据,t[Ai] 就是这一行中某一列的值。
假设表 R 结构是:
学号
姓名
年龄
101
张三
20
这一行是一个元组 t。
t[学号] = 101,t[姓名] = 张三,t[年龄] = 20
属性组 A、t[A]、Ā :
表 R:
学号
姓名
年龄
班级
101
张三
20
A1
如果我们说 A = {学号, 姓名},那:
t[A] = (101, 张三)
Ā = {年龄, 班级}
元组连接 tr ⨝ ts :
表 R(学生):
学号
姓名
101
张三
表 S(成绩):
课程
成绩
数学
95
将 tr ∈ R 和 ts ∈ S 连接(拼接)起来:
→ 结果元组为:
学号
姓名
...













