博客项目总结
本章对Blog项目的技术进行总结
具体技术实现见相关文章
多模块项目
项目分为前后台,两套系统可能都会用到的代码可以写到一个公共模块中,让前台系统和后台系统分别取依赖公共模块。
① 创建父模块123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLo ...
操作系统
操作系统的基本概念操作系统是指一种管理计算机系统硬件和软件资源的程序,它负责控制和管理计算机的硬件资源和软件资源,为其他应用程序提供基本的服务和支持。
换句话说,操作系统是计算机系统的管理者和调度者。
操作系统的资源管理功能
资源管理:操作系统负责管理计算机系统的硬件和软件资源,如内存、CPU、I/O设备、文件系统等
进程管理:操作系统能够创建、调度、管理和终止进程,控制进程之间的并发和同步,确保系统中的进程能够正确地共享资源并协同工作。
内存管理:操作系统负责管理内存资源,为进程提供虚拟地址空间和内存保护机制,从而保证系统的安全性和稳定性。
文件管理:操作系统能够管理计算机系统中的文件和目录结构,提供对文件的访问和保护,以及文件共享和备份等功能。
设备管理:操作系统负责管理和调度计算机系统中的各种输入输出设备,如磁盘、打印机、键盘、鼠标等
操作系统的特性
并发性(Concurrency):操作系统需要同时处理多个进程或线程的请求,因此,操作系统必须具有并发管理的能力,确保这些进程或线程能够按照一定的优先级和调度算法得到合理的分配和调度。
共享性(Shari ...
Nginx
Nginx介绍Nginx是什么?Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
正向代理
反向代理
正向代理的 Proxy 是多对一,反向代理的 Proxy 是一对多。
反向代理是代理服务端,对外暴露反向代理服务器的IP,不暴露真实服务器的IP,客户端发送请求到 ...
剑指Offer【二叉树中和为某一值的路径】
题目描述给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例 1:
12输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]
示例 2:
12输入:root = [1,2,3], targetSum = 5输出:[]
示例 3:
12输入:root = [1,2], targetSum = 0输出:[]
提示:
树中节点总数在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
注意:本题与主站 113 题相同:https://leetcode-cn.com/problems/path-sum-ii/
解法
回溯+状态记录
1234567891011121314151617181920212223242 ...
剑指Offer【数组中数字出现的次数】
题目描述一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
示例 1:
12输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]
示例 2:
12输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]
限制:
2 <= nums.length <= 10000
解法
位运算
相同的数异或为0,不同的异或为1。0和任何数异或等于这个数本身。
所以,数组里面所有数异或 = 目标两个数异或 。 由于这两个数不同,所以异或结果必然不为0。
假设数组异或的二进制结果为10010,那么说明这两个数从右向左数第2位是不同的
那么可以根据数组里面所有数的第二位为0或者1将数组划分为2个。
这样做可以将目标数必然分散在不同的数组中,而且相同的数必然落在同一个数组中。
这两个数组里面的数各自进行异或,得到的结果就是答案
12345678910111213141516171819202122232425cla ...
剑指Offer【二叉搜索树与双向链表】
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
为了让您更好地理解问题,以下面的二叉搜索树为例:
我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。
下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。
特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。
解法
中序遍历
123456789101112131415161718192021222324252627282930class Solution { public Node head; public Node pre; public Node treeToDoublyList(Node root) { //1.中序遍历构建有序链表 if ...
RabbitMQ
MQ相关概念
什么是MQ?
MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常 见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。
为什么要使用MQ?
流量消峰
举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
应用解耦
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合 调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列的方式后,比如物流系 ...
剑指Offer【二叉搜索树的后序遍历序列】
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
参考以下这颗二叉搜索树:
12345 5 / \ 2 6 / \1 3
示例 1:
12输入: [1,6,3,2,5]输出: false
示例 2:
12输入: [1,3,2,6,5]输出: true
提示:
数组长度 <= 1000
解法
递归判断
后序遍历定义: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为 “左、右、根” 。
二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。
划分左右子树:遍历后序遍历的 [i,j]区间元素,寻找第一个大于根节点 的节点,索引记为m 。此时,可划分出左子树区间 [i,m−1] 、右子树区间[m,j−1]根节点索引 j。
左子树区间:[i,m−1]内的所有节点都应 <postorder[j] 。而划分左右子树 步骤已经保证左子树区间的正确性,因此只 ...
Dubbo
1.基础知识什么是分布式系统?
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
分布式系统(distributed system)是建立在网络之上的软件系统。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的**分布式服务框架(RPC)**是关键
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的**资源调度和治理中心(SOA)[ Service Oriented Architecture]**是关键。
什么是RPC?
RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。
它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。
即程序员无论是调用本地的还是远程的函数,本质上编写的调 ...
ZooKeeper
概述
Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变,Zookeeper 就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
Zookeeper=文件系统+通知机制
特点
① Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
② 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。
③ 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
④ 更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
⑤ 数据更新原子性,一次数据更新要么成功,要么失败。
⑥ 实时性,在一定时间范围内(数据同步时间),Client能读到最新数据。
数据结构
ZooKeeper 数据模型的结构 ...