![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
后端开发
文章平均质量分 69
java和golang等后端开发相关的知识
棉花糖灬
我就是我,是颜色不一样的烟火。
天空海阔,要做最坚强的泡沫。
我喜欢我,让蔷薇开出一种结果。
孤独的沙漠里,一样盛放的赤裸裸!
展开
-
后端开发岗面试中计算机网络相关的常见问题
1. OSI(开放系统互联)参考模型物理层:在物理媒体上为数据端设备透明的传输原始比特流。传输单位是比特数据链路层:成帧、差错控制、流量控制和传输管理。传输单位是帧网络层:对分组进行路由选择,并进行流量控制、拥塞控制、差错控制和网际互连。传输单位是数据报,即分组运输层:为端到端的连接提供可靠的传输服务,为端到端连接提供流量控制、差错控制、服务质量、数据传输管理。传输单位是报文段(TCP)或用户数据报(UDP)会话层:建立同步表示层:数据压缩、加密、解密、数据的格式转化应用层:为特定类型的网络原创 2021-06-17 08:52:12 · 344 阅读 · 0 评论 -
状态机的Go语言实现版本
为什么要使用状态机,我想主要是它可以对一个复杂的业务流程进行模块化拆分,使得代码更为易读。并且扩展性更好,如果后续有新状态加入,只需要在原来的基础上进行扩展即可,甚至不需要了解整个业务流程。其次,它将数据库实体的状态流转进行了模范化,避免了不同的开发人员在写更新数据库实体状态代码时可能导致的问题。原创 2023-03-08 22:39:20 · 1075 阅读 · 1 评论 -
分布式ID的生成方案
优点是空间占用小,主键自动增长,IO连续性好,数字类型查询速度明显优于字符串类型。雪花算法ID组成:1位符号位,41位时间戳(可以支持61年的时间跨度),10位机器ID,12位序列号(1ms可以生成4095个ID)UUID:UUID是通用唯一标识的缩写,其优点是生成速度块,ID全局唯一。缺点是空间占用多(16字符),且不是递增有序的。redis自增:redis计数器,原子性自增。优点是使用内存,并发性能好。缺点是数据已丢失,且容易暴露数据总量。雪花算法:优点是不依赖于外部组件,性能好。原创 2023-02-05 20:25:32 · 105 阅读 · 0 评论 -
【学习笔记】HBase概念、原理、适用场景学习笔记
HBase是 Google BigTable 的开源实现。它是一种分布式、可扩展、稀疏数据、准实时查询、支持海量数据存储的NoSQL数据库。逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。RowKey:行键,RowKey 是用来检索记录的主键。行键是有序存储的,因此为了提升查询效率可以把要同时读取的数据的行键设置的比较接近。访问 HBase Table 中的行,只有三种方式:通过单个 RowKey 访问通过 RowKey 的 Range(正则)全表扫描ColumnFamily原创 2022-07-13 15:46:36 · 811 阅读 · 0 评论 -
http状态码
HTTP 状态码分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599):分类分类描述1**信息,服务器收到请求,需要请求者继续执行操作2**成功,操作被成功接收并处理3**重定向,需要进一步的操作以完成请求4**客户端错误,请求包含语法错误或无法完成请求5**服务器错误,服务器在处理请求的过程中发生了错误常见的http状态码有:状态码状态原创 2022-05-15 13:52:17 · 176 阅读 · 1 评论 -
【golang/go语言】time.NewTimer()和time.After()两个计时器
1. time.NewTimer()time.NewTimer()对象包含一个时间类型通道的对象C,当获取通道内的时间值时正好过去了所设定的时间,于是起到了计时器的作用。也可以在获取通道值之前用timer.Stop()命令主动将其终止,此时返回的值为true,终止失败为false。package mainimport ( "fmt" "time")func main() { timer := time.NewTimer(3 * time.Second) fmt.Prin原创 2022-05-02 08:11:28 · 2175 阅读 · 0 评论 -
【学习笔记】事务与分布式事务
一、事务本地事务是在单个数据源上进行数据的访问和更新,分布式系统下由不同服务之间通过网络远程协作完成的事务被称为分布式事务。分布式事务的应用场景:微服务架构之间,即多服务器访问多数据库实例单体系统访问多数据库实例多服务访问同一数据库实例二、 事务的ACID特性该部分参考了文章事务的实现原理和MySQL事务的实现原理两篇文章。ACID即原子性(Atomicity),一致性(Consistency),隔离型(Isolation)和持久性(Durability)1. 原子性原子性通过und原创 2022-04-23 23:09:14 · 248 阅读 · 0 评论 -
【学习笔记】ElasticSearch(ES)基本概念和语句学习笔记
一、ES名词ES:ElasticSearch又称ES,是一个可伸缩的、分布式的、近实时搜索的开源全文搜索与分析引擎。index(索引):一个索引就是一个拥有几分相似特征的文档的集合。相当于MySQL中的数据库。type(类型):一个索引中可以定义一种或多种类型。一个类型是索引的一个逻辑上的分类/分区,其语义完全由你来定。相当于MySQL中的表。field(字段):相当于MySQL中表的字段。mapping(映射):mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分原创 2022-01-22 18:09:17 · 2865 阅读 · 0 评论 -
【学习笔记】SQL语句练习
1. 知识点ORDER BY的位置应该放在WHERE和GROUP BY之后,否则会报错。%通配符匹配0或多个字符,而_通配符匹配一个字符。GROUP BY子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。GROUP BY子句中出现的字段必须在SELECT语句中出现,反之则非必然。GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。HAVI原创 2022-01-25 16:20:29 · 1124 阅读 · 0 评论 -
【学习笔记】redis分布式缓存
在高并发情况下,服务器的访问压力主要有两部分,一是服务器的处理压力,二是数据库的读写压力。数据库的读写压力可以使用redis来缓解,对于热点数据可以拷贝一份到redis中,当查询数据库时,先去redis中读取,如果没有再去数据库中查询。1. redis集群的两种模式主从备份模式:当写入数据时,只往主redis中写,然后再从主redis同步到从属redis,而在读取时从从属redis中读取。但由于该模式只有一个主redis,应对不了海量数据的存储和读写。切片模式:将数据存储到不同切片的redis中,可原创 2022-04-23 21:19:39 · 653 阅读 · 0 评论 -
【学习笔记】单元测试之mockito学习笔记
Mockito库能够Mock对象、验证结果以及打桩(stubbing)。比如在测试时,可以用mockito模拟查询数据库的操作,即将查询数据库的方法拦截,并人工设置其返回值,这样就不用真正去数据库中拿取数据了。此外还可以对某个方法的运行结果进行验证等。1. 相关包和依赖的导入在使用mockito之前首先要导入包,建议采用静态导入:import static org.mockito.Mockito.*;,此外,还要在pom.xml文件中导入Junit相关依赖。<dependency>原创 2021-10-12 15:37:46 · 1600 阅读 · 2 评论 -
【学习笔记】MyBatis学习笔记
本文是动力节点MyBatis教程的学习笔记。第一章1. 三层架构(1) 三层的功能表示层(User Interface Layer):接受用户数据,显示请求的处理结果,包括jsp、html、servlet等。对应controller包;业务逻辑层(Business Logic Layer):接受表示层传递过来的数据,检查数据,计算业务逻辑,调用数据访问层获取数据。对应service包;数据访问层(Data Access Layer,DAL):也称持久层,与数据库打交道。对应DAO包。原创 2021-10-11 15:51:24 · 326 阅读 · 0 评论 -
【学习笔记】《RabbitMQ实战指南》笔记
本文摘录总结自《RabbitMQ实战指南》。一、消息中间件消息队列中间件(MessageQueueMiddleware,简称为MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。它一般有两种传递模式:点对点(P2P,Point-to-Point)模式和发布/订阅(Pub/Sub)模式。消息中间件的作用如下:解耦:消息中间件在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,这允许你独立地扩展或修改两边的处理过程,只要原创 2021-10-02 10:15:30 · 587 阅读 · 0 评论 -
【学习笔记】《Redis设计与实现》笔记
本文摘录总结自《Redis设计与实现》一书。Redis 是一个键值对数据库(key-value DB),数据库的值可以是字符串、集合、列表等多种类型的对象,而数据库的键则总是字符串对象。一、内部数据结构1. 简单动态字符串(1) SDS的定义SDS (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示,几乎所有的 Redis 模块中都用了 SDS。SDS的定义如下:typedef char *sds;struct sdshdr{ //原创 2021-10-02 10:05:53 · 382 阅读 · 0 评论 -
【学习笔记】Spring中的动态代理
本文参考了文章Spring AOP动态代理的实现方式和文章Spring中的动态代理。1. 动态代理的两种实现方式(1) 两种动态代理Spring中的AOP(面向切面编程)是基于动态代理技术实现的,而动态代理是基于反射设计的。动态代理的实现方式有2种:JDK动态代理和CGLIB动态代理。JDK动态代理:通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口,核心是InvocationHandler接口和Proxy类CGLIB(Code Generation Library)动态代理:CGLI原创 2021-09-13 09:11:01 · 1506 阅读 · 0 评论 -
【学习笔记】Spring中的AopContext.currentProxy()
本文参考了文章AopContext.currentProxy()和AopContext.currentProxy()解决同类中调用嵌套方法AOP失效。在使用@Transactional注解声明事务时,会有以下四种情况:在不同类中,事务方法A调用非事务方法B,事务具有传播性,事务生效;在不同类中,非事务方法A调用事务方法B,事务生效;在同一个类中,事务方法A调用非事务方法B,事务生效;在同一个类中,非事务方法A调用事务方法B,事务失效,这是由于使用Spring AOP代理造成的,只有原创 2021-09-13 09:10:22 · 2909 阅读 · 0 评论 -
【学习笔记】热点账户问题的解决方案
本文总结自知乎文章:浅谈热点账户技术解决方案。1. 热点账户问题简单来说,热点账户问题指的是短时间内有对同一个账户有大量写请求,从而导致高并发情况下冲突严重,产生性能瓶颈的问题。2. 解决方案(1) 汇总明细入账将多个请求合并为一个请求一次入账账户的写入操作不立即入账,而是由一个定时任务,每隔一段时间将所有未入账的操作记录计算一个金额之和,然后写入到账户中,这样就减少了对账户的写操作,避免了冲突。缺点:账户余额的更新有延迟,当入款操作没有入账,当前来了一笔出款时可能会因为余额不足而失败。()转载 2021-09-13 09:09:31 · 1450 阅读 · 0 评论 -
【学习笔记】Redis中有序集合zset的实现原理——跳表
面试的时候被问到了有序集合zset的实现原理,本以为是基于红黑树实现的,其实是基于跳表(skipList)实现的。本文主要讲解什么是跳表,它是怎么查找、插入和删除元素的,相比于红黑树它有哪些优劣。本文参考了文章redis中的Zset原理。1. 跳表(1) 跳表是什么跳表是一种多层的有序链表。先考虑一种特殊情况下的跳表,如下图所示。从底往上分别是第1~4层,第1层用链表有序地存放所有元素,然后从第 iii 层每隔1个元素取一个元素形成第 i+1i+1i+1 层的有序链表,并增加第 i+1i+1i+1原创 2021-09-13 09:08:27 · 1157 阅读 · 0 评论 -
【学习笔记】Spring中自定义注解
本文参考了文章@data注解_基础篇:深入解析JAVA注解机制和Spring项目中自定义注解的使用。简单来说Spring中的自定义注解是基于AOP(面向切面编程)来实现的,即在一个方法的执行前后对其做修改,以新增一些功能。所以在看本文之前需要先了解AOP的相关知识。1. 自定义注解类新建Maven工程,创建注解类MyAnnopackage ele.me;import java.lang.annotation.Documented;import java.lang.annotation.Elem原创 2021-09-13 09:07:13 · 185 阅读 · 0 评论 -
【学习笔记】Spring中的面向切面编程
首先要在pom.xml文件中引入aop的依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>编写切面类,作用在带有@GetMapping注解的方法上import org.aspectj.lang.annotation.Aft原创 2021-08-28 21:28:19 · 177 阅读 · 0 评论 -
【学习笔记】MacOS快捷键
简写:cmd:commond键opt:option键ctrl:control键tab:table键back:退格键cmd + M:最小化窗口cmd + ctrl + F:窗口全屏cmd + W:关闭窗口,此时在后台运行cmd + Q:退出程序cmd + opt + Esc:强制退出应用程序,类似于windows中的任务管理器ctrl + cmd + space:输入emoji表情cmd + space:调出spot light,类似于搜索功能在spot light中搜索ac原创 2021-08-28 21:26:32 · 635 阅读 · 0 评论 -
【学习笔记】Java中的锁Lock
本文参考自:Java并发编程:Lock。Lock锁并不是java内置的功能,其应用场景是在多线程并发访问时,为了避免冲突,需要每个线程先获取锁,避免其他线程的进入,等线程执行完后释放锁,允许其他线程进入。1. Lock锁与synchronized同步的区别Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLo原创 2021-08-28 21:25:36 · 1934 阅读 · 0 评论 -
【学习笔记】lombok的@Builder注解
首先需要了解下Builder模式:定义一个User类:public class User { private String firstName; private String lastName; User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public static Builder builder() {原创 2021-08-28 21:22:34 · 255 阅读 · 0 评论 -
【学习笔记】数据库中锁的分类
从锁的共享性/数据库管理角度划分,可以将锁分为共享锁和排它锁。共享锁(S锁):又称读锁,用于不修改数据的只读操作,如select语句。当一个事务对数据加共享锁后,其他事务只能对相同的事务再加共享锁,而不能加排它锁。获取共享锁的事务只能读取数据,而不能修改数据。排它锁(X锁):又称写锁,用于修改数据的操作,如insert、update、delete语句。当一个事务对数据加排它锁后,其他事务不能再对该数据加任何锁。获取排它锁的事务既能读取数据,又能修改数据。从加锁方式/程序员角度划分,可以将锁分为乐观锁和原创 2021-08-28 21:19:44 · 513 阅读 · 0 评论 -
【学习笔记】Git版本控制工具之git stash暂存功能
git stash的使用场景是:当已经在当前工作区做了修改但未提交到本地库,突然接到新的需求,需要在其他版本或分支上做修改,但又不想丢失已经修改的内容,又不想保存到本地库,此时就可以将当前工作区中已修改但未提交到本地库的代码暂存起来,然后就可以把代码恢复到上一个版本或者切换到另一个分支,等在其他版本或分支上的修改工作完成并push到远程库后,再把刚刚暂存起来的代码恢复到工作区,继续之前的工作。git stash:将代码暂存到一个栈中,当前的工作区会恢复到未修改之前的状态git stash save .原创 2021-08-28 21:18:25 · 294 阅读 · 0 评论 -
【学习笔记】依赖管理maven学习笔记
maven下载后只需要解压并添加环境变量即可,注意maven依赖于JAVA_HOME,在命令行输入mvn -v即可查看maven是否安装成功。maven统一将jar包存在一个仓库中,而不是存在每个项目中,这样大大减小了项目所占的空间,maven本地仓库的默认地址是系统盘当前用户目录下的.m2/repository目录,在联网情况下会从中央仓库自动下载jar包。而远程仓库也称为私服。代码可以分为:核心代码、配置文件、测试代码、测试配置文件四个部分。maven项目标准目录结构:src/main/java原创 2021-07-01 08:20:45 · 98 阅读 · 0 评论 -
【java笔记】java中ThreadLocal的原理和使用
本文参考了文章一针见血ThreadLocal和文章ThreadLocal作用、场景、原理。1. 概念ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。 ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发原创 2021-06-27 15:03:18 · 186 阅读 · 0 评论 -
【java面试】java后端开发岗面试中数据结构相关的常见问题
1. B树和B+树的区别(1) B-树的特点所有关键字分布在整颗树节点中每个树节点存储索引和数据搜索有可能在非叶子结点结束,最好情况O(1)就能找到数据(2) B+树的特点所有关键字都只在叶子节点出现内部节点不存储数据,仅起到索引作用为所有叶子结点增加了一个链指针,相邻叶节点按大小顺序链接起来查询时间复杂度固定为 O(log n)B+树更适合外部存储。由于内节点无数据域,每个节点能索引的范围更大更精确2. 排序算法插入排序直接插入排序折原创 2021-06-17 08:50:02 · 119 阅读 · 0 评论 -
【学习笔记】编程不良人老师的RabbitMQ教程的学习笔记
本文是B站up主“编程不良人”的RabbitMQ教程的学习笔记,up用的是CentOS,而我平常用Ubuntu比较多,所以本文是基于Ubuntu来操作的。此外貌似RabbitMQ需要root用户权限,所以以下所有的RabbitMQ相关的命令最好带有sudo,否则可能会报错。此外,如果队列和交换机重复创建时也会报错,在网页端删除即可。一、消息队列MQ1. 是什么是MQMQ(Message Queue) : 翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队原创 2021-06-06 08:56:22 · 1420 阅读 · 0 评论 -
【学习笔记】MacOS入门操作
鼠标滚轮的方向和Windows下正好相反所有软件可以通过在dock栏的启动台中找到安装软件时,双击软件,然后把安装包拖到应用程序中,然后在桌面的安装包上右键推出才算安装完成卸载软件时,在启动台长按软件,点击左上角的叉号删除(有些软件不能通过该方式删除),或者在访达 -> 应用程序中的相应软件上右键移到废纸篓最小化、最大化、关闭按钮在窗口左上方,且关闭不是真正的关闭,当dock栏的图标下面有个小黑点时,说明程序在后台运行,可以通过在dock栏右键退出或在软件界面command+Q才能完全退出文原创 2021-06-01 22:26:38 · 730 阅读 · 0 评论 -
【学习笔记】尚硅谷周阳老师的Docker教程学习笔记
本文是尚硅谷周阳老师的Docker教程的相关学习笔记,暂时还没有检查勘误过。一、Docker简介1. 简介Docker的出现是为了解决代码在本机可以正常运行,而部署到其他机器不能运行的问题。这是因为代码运行所需要的环境、系统、配置、数据等不同,Docker透过镜像将程序运行所需要的系统环境由下而上打包,达到应用程序跨平台间的无缝接轨运行。Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何原创 2021-05-27 22:07:13 · 5843 阅读 · 1 评论 -
Linux操作系统基础知识和常用指令学习笔记
本文是Linux操作系统相关的知识,参考的资料主要有《鸟哥的Linux私房菜-基础版(第四版)》的第四到第十二章,以及尚硅谷的Linux教程。笔记不可能面面俱到,但是常用的命令和知识应该都包括了,此外指令的选项有很多,笔记中也是只列出了常用的几个,较完整的介绍还请大家自行搜索。如果有什么错误还请大家指出。一、Linux基础知识1. Linux文件目录(1) 文件目录 /bin:binary的缩写,存储可执行文件/boot:存储开机会用到的文件/dev:存储装置和接口设备/ect:存储配置原创 2021-05-12 10:51:08 · 1813 阅读 · 1 评论 -
【学习笔记】Git和GitHub版本控制学习笔记
一、版本控制的功能1. 协同修改多人并行不悖的修改服务器端的同一个文件2. 数据备份不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态3. 版本管理在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约空间,提高运行效率,Git采用了文件系统快照的方式。4. 权限管理对团队中参与开发的人员进行权限控制对团队外的开发者贡献的代码进行审核——Git独有5. 历史记录查看修改人、修改时间、修改内容、日志信息将本地文件恢复到某一个历史状态原创 2021-05-12 10:50:06 · 179 阅读 · 0 评论 -
【学习笔记】nginx的学习笔记
nginx(engine x)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强。本文是基于ubuntu系统对nginx进行安装和使用的。一、nginx的安装和使用1. 安装sudo apt-get install nginxnginx -v # 查看是否安装成功安装和启动过程中碰到两个问题,一是日志和错误日志没权限的问题,可以通过sudo chmod 777 access.log命令修改权限,二是启动时报权限错误问题,可以改用sudo nginx启动。2. 目录说明/u原创 2021-05-05 19:41:45 · 3979 阅读 · 17 评论 -
【学习笔记】NoSQL数据库Redis的学习笔记
一、NoSQL1. 关系型数据库的发展历程(1) 单机MySQL的美好年代应用程序通过数据访问层(DAL)使用数据库问题:数据总量太大,一个机器放不下数据索引一个机器内存放不下访问量(读写混合)一个实例不能承受(2) Memcached(缓存)+MySQL+垂直拆分把常用数据放入缓存中, 并对数据库进行垂直拆分,即按照业务将表进行分类,分布到不同的数据库上面,减轻访问压力问题:读写集中在一个数据库上让数据库不堪重负(3) MySQL主从读写分离从库是主库的镜像,主数据库负责原创 2021-05-05 19:41:01 · 255 阅读 · 0 评论 -
python爬虫笔记
#!/usr/bin/python# -*- coding:utf-8 -*-import requestsimport osimport refrom bs4 import BeautifulSoup#访问网页并获取网页内容def getHTMLText(url): try: hd={'user-agent':'Mozilla/5.0'} r=requests.get(url,timeout=10,headers=hd) r.rai原创 2020-09-25 08:47:03 · 306 阅读 · 0 评论 -
Github使用笔记
创建仓库在 git 中,一个文件创建后的状态是 untracked;当用 git add 指令将其添加之后就变为了 staged 状态;用 git commit 质量将其提交之后就变为了 unmodified 状态;对文件进行修改后变为 modified 状态;移除该文件后又变回了 untracked 状态。在所要上传到仓库的文件夹下右击打开 Git bash。git config --global user.name “zuzhiang” #设置用户名git config --global us原创 2020-09-25 08:46:02 · 179 阅读 · 0 评论 -
《鸟哥的Linux私房菜:基础版》笔记
本文主要是关于《鸟哥的Linux私房菜:基础篇》中第四章到第十二章的笔记,有些自己已经理解或感觉很少会使用到的东西没有再做记录,笔记暂未整理,此外还加入了一些在别的地方学到的Linux的常用知识。在命令行中[]表示可选,<>表示必选,{}表示任选一个。第四章 首次登录与在线求助在桌面按下 Ctrl+Alt+[F1~F6]进入编号为1~6的文本模式(又称终端接口、terminal...原创 2020-04-09 15:50:53 · 777 阅读 · 0 评论