- 博客(292)
- 收藏
- 关注
原创 面试知识点梳理及相关面试题(十五)-- spring
AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面” (Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。常见的AOP使用场景记录操作日志缓存处理Spring中内置的事务处理接口入参校验代码:(其中也包括了mybatis执行流程)//1。
2023-04-20 00:32:25
718
1
原创 mysql查询字段未加引号问题及隐式转换
最近线上出了个问题,用户明明没有投票,却提示已投票,我查询数据,刚开始没有查出数据,后来却查出数据了,以为没有问题,后来以为是插入的时候通过int类型插入,导致varchar类型的索引没有添加这条索引(天真的想法),再后来看到查出来的数据和我查询的数据并不一致,最后一位不太相同,知道应该是发生了mysql隐式转化问题。接下来就来研究下不加引号或者加引号的情况。
2023-04-19 14:35:25
1401
原创 Mysql学习(十一) -- 常见问题处理
null值会占用更多的字节,且会在程序中造成很多与预期不符的情况,比如错误的使用count(),group等。
2023-04-16 19:04:56
821
原创 Mysql优化(一)-- sql语句优化概述及数据库优化
设计数据表时应尽量遵循范式理论的规约,尽可能的减少冗余字段,让数据库设计看起来精致、优雅。通过建立中间表,将需要通过联合查询的数据插入到中间表中,然后将原来的联合查询改为对中间表的查询。冗余字段的值在一个表中修改了,就要想办法在其他表中更新,否则就会导致数据不一致的问题。表的规范化程度越高,表和表之间的关系越多,需要连接查询的情况也就越多,性能也就越差。对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新表。因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。
2023-04-16 18:53:06
446
原创 Mysql学习(八)-- mysql日志
error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow。
2023-04-14 18:10:21
852
原创 秒杀架构(二) -- nginx实现限流
限流(Rate Limitting)是服务降级的一种方式,通过限制系统的输入和输出流量以达到保护系统的目的。比如我们的网站暴露在公网环境中,除了用户的正常访问,网络爬虫、恶意攻击或者大促等突发流量都可能都会对系统造成压力,如果这种压力超出了服务器的处理能力,会造成响应过慢甚至系统崩溃的问题。因此,当并发请求数过大时,我们通过限制一部分请求(比如限制同一IP的频繁请求)来保证服务器可以正确响应另一部分的请求。nginx 提供了两种限流方式,一种是限制请求速率,一种是限制连接数量。
2023-04-13 11:43:26
1342
原创 RabbitMq(七) -- 常见问题:幂等性问题(消息重复消费)、消息丢失
/依赖注入 rabbitTemplate 之后再设置它的回调对象 // 此注解会在其他注解执行完成后再执行,所以rabbitTemplate先注入,再执行此初始化方法 @PostConstruct public void init() {// 设置rabbitTemplate的ConfirmCallBack为我们重写后的类 rabbitTemplate . setConfirmCallback(this);} /*** 交换机不管是否收到消息都会执行的一个回调方法。
2023-04-10 15:47:50
3930
原创 JVM问题(二) -- 内存泄漏
严格来说,只有对象不会再被程序用到了,但是GC又不能回收他们的情况,才叫内存泄漏。但是实际情况很多时候一些不太好的实践(或疏忽)会导致对象的生命周期变得很长甚至导致OOM,也可以叫做宽泛意义上的“内存泄漏”。
2023-04-02 17:19:19
599
原创 位运算符(逻辑、移位)详解
位运算符有七个,分为两类:逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)移位运算符:左移()、无符号右移(>>>)
2023-03-16 14:37:29
2286
原创 面试知识点梳理及相关面试题(十二)-- linux
firewall是centos7里面的新的防火墙命令,它底层还是使用 iptables 对内核命令动态通信包过滤的,简单理解就是firewall是centos7下管理iptables的新命令。A—B,假设B是A的硬链接,那么他们两个指向了同一个文件!允许一个文件拥有多个路径,用户可以通过这种机制建立硬链接到一些重要文件上,防止误删!软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。ps含义:process status 进程状态。
2023-03-14 17:38:21
294
转载 docker删除无用容器、镜像
根据容器的状态,删除Exited状态的容器删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器。
2023-03-10 11:26:07
2394
原创 面试知识点梳理及相关面试题(十一)-- docker
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因为能够绕过union file system提供一些用于持续存储或共享数据的特性。卷的设计目的就是数据持久化,完全独立于容器的生命周期,因为docker不会在容器删除时删除其挂载的数据卷。先pull官方版本centos镜像,拉下来的镜像并不包含vim,ifconfig,jdk8等内容,我们希望自己能制作一个镜像并拥有以上功能。下载一个jdk和Dockerfile放在一起。
2023-03-10 11:21:28
979
原创 面试知识点梳理及相关面试题(四)-- mysql
在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。
2023-02-09 18:01:19
3961
原创 多线程(五) -- 并发工具(二) -- J.U.C并发包(二) -- AQS及ReentrantLock原理
开始 Thread-0 持有锁,调用 await,进入 ConditionObject 的 addConditionWaiter 流程 创建新的 Node 状态为 -2(Node.CONDITION),关联 Thread-0,加入等待队列尾部。执行 transferForSignal 流程,将该 Node 加入 AQS 队列尾部,将 Thread-0 的 waitStatus 改为 0,Thread-3 的waitStatus 改为 -1。重入加锁时,让state自增,解锁时,让state自减。
2023-02-09 11:52:17
370
1
原创 面试知识点梳理及相关面试题(十)-- rabbitmq
Producer: 消息生产者,就是投递消息的程序Connection:producer/consumer 和 broker 之间的 TCP 连接。Channel信道:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。
2023-02-02 17:15:54
1466
原创 shiro(二):springboot整合shiro
/自定义realm public class CustomRealm1 extends AuthorizingRealm {//从传过来的token获取到的用户名 String principal =(String) token . getPrincipal();System . out . println("用户名" + principal);//假设是从数据库获得的 用户名,密码 String password_db = "123";} }
2023-02-01 15:38:28
1066
原创 shiro(一):shiro基本概念及基本使用(认证、授权)
身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。
2023-01-31 11:36:33
1314
原创 shiro相关源码解析
else {try {} } try {} }如果以后我们想要自定义用户名密码校验过程怎么做?定义一个类继承AuthorizingRealm类,并实现doGetAuthorizationInfo方法在方法中自定义用户名校验过程密码校验不需要我们完成,shiro会帮我们实现(通过校验token中的密码和doGetAuthorizationInfo中获取到的info信息中的密码是否一致)为什么不让我们自己做密码校验?
2023-01-30 18:03:56
667
原创 Redis -- IO多路复用及redis6的多线程
Redis 的 I/O 多路复用程序函数有 select、poll、epoll、kqueue。select 作为备选方案,由于其在使用时会扫描全部监听的文件描述符,并且只能同时服务 1024 个文件描述符,所以是备选方案。I/O 多路复用模型是利用 select、poll、epoll 函数可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉。
2023-01-12 16:26:36
1224
原创 集合(八) -- 阻塞队列ArrayBlockingQueue和LinkedBlockingQueue
用数组实现的有界阻塞队列。此队列按照先进先出(FIFO)的原则对元素进行排序。默认情况下不保证访问者公平的访问队列,所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入元素,先阻塞的消费者线程,可以先从队列里获取元素。通常情况下为了保证公平性会降低吞吐量。
2022-11-07 16:50:11
1052
原创 达梦数据库使用配置及问题整理
直接看官网文档:https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.html。
2022-11-01 18:10:54
14786
3
原创 Redis(十八) -- 布隆过滤器
布隆过滤器是由一个固定大小的二进制向量或者位图(bitmap)和一系列映射函数组成的。在初始状态时,对于长度为 m 的位数组,它的所有位都被置为0。如下图所示:当有变量被加入集合时,通过 K 个映射函数将这个变量映射成位图中的 K 个点,把它们置为 1。查询某个变量的时候我们只要看看这些点是不是都是 1 就可以大概率知道集合中有没有它了。
2022-10-20 17:29:14
1239
原创 Docker离线安装及启动镜像出现的问题记录
有时候有些服务器没有外网服务器,所以只能离线安装,今天离线安装了个docker,启动镜像的时候全是坑,这里记录下。
2022-10-19 18:07:33
1191
原创 WebSocket(四) -- 集群分布式+redis改造群聊
频道名称定义 redis : channel : msgToAll : websocket.msgToAll userStatus : websocket.userStatus # redis频道websocket.userStatus用来广播用户上下线消息 set : onlineUsers : websocket.onlineUsers # redis的set,用来保存在线用户信息。
2022-10-17 18:05:29
1682
原创 WebSocket(三) -- 使用websocket+stomp实现群聊功能
SpringBoot+websocket的实现其实不难,你可以使用原生的实现,也就是websocket本身的OnOpen、OnClosed等等这样的注解来实现,以及对WebSocketHandler的实现,类似于netty的那种使用方式,而且原生的还提供了对websocket的监听,服务端能更好的控制及统计(即上文实现的方式)。但是,真实项目中还是使用Stomp实现的居多,因为独立服务更方便,便于后期搭建集群环境做横向扩展,且内置的方法也很简单,既然如此,我们还是以主流实现方式为准来学习吧。
2022-10-14 15:46:51
2451
原创 WebSocket(二) -- 使用原生webSocket实现一个简单的聊天
上文中,我们已经基本了解了webscoket的原理以及部分api的实现,接下来我们就使用websocket来实现一个简单的聊天室功能。
2022-10-14 11:14:38
1196
原创 WebSocket(一) -- 原理详解
首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。
2022-10-13 18:20:36
10919
1
原创 Mysql group_concat函数长度问题
今天出了个线上bug,先通过其他手段把bug避免了,然后打日志查看具体原因,发现是一个sql查出来的字段内容少了很多,一查询原来是group_concat函数最大长度只有1024,超过长度会被截取。特别注意:只对当前会话有效。
2022-10-09 16:27:21
702
原创 Mysql学习(六)-- innodb如何避免幻读及MVCC和间隙锁详解
在之前的文章中详细的介绍了 MySQL 中的事务和隔离级别,在并发访问数据库造成的问题(脏读、不可重复读、幻读),而 MVCC 就是在尽量减少锁使用的情况下高效避免这些问题。MySQL 四大隔离级别:MVCC 全称 Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。同一行数据平时发生读写请求时,会上锁阻塞住。但 MVCC 用更好的方式去处理读写请求,做到在发生读写请求冲突时不用加锁。
2022-10-08 22:46:52
1565
3
原创 数据结构(二十八) -- 常用的十种算法(十) -- 骑士周游回溯算法
【代码】数据结构(二十七) -- 常用的十种算法(十) -- 骑士周游回溯算法。
2022-09-30 16:19:57
157
原创 数据结构(二十七) -- 常用的十种算法(九) -- Floyd算法
【代码】数据结构(二十六) -- 常用的十种算法(九) -- Floyd算法。
2022-09-30 14:38:04
319
原创 数据结构(二十六) -- 常用的十种算法(八) -- Dijkstra算法
从起始节点A开始,遍历剩余节点,找到直连的节点,这就是A到这些点的最短路径,并标记A为已遍历找出剩余节点中路径最短的节点B,以B作为起始节点,遍历B到其他节点的距离,判断B到当前节点的距离+A到B的距离是否小于A到当前节点距离的其他组合方式(如A到C到当前节点),如果小于则设置A到当前节点的最小距离为A到B再到当前节点重复第二步。
2022-09-29 16:49:03
507
原创 数据结构(二十五) -- 常用的十种算法(七) -- Kruskal算法
在含有n个顶点的连通图中选择n-1条边,构成一颗极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。用上图G4,来对Kruskal进行演示:(用数组R保存最小生成树结果)例如,对于上图G4所示的联通网可以有多棵权值总和不同的生成树。
2022-09-28 17:59:19
167
原创 数据结构(二十四) -- 常用的十种算法(六) -- Prim算法
Prim算法求最小生成树,也就是在包含n个顶点的连接图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图。
2022-09-28 00:02:03
176
原创 数据结构(二十三) -- 常用的十种算法(五) -- 贪心算法
贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪心算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。
2022-09-27 21:10:18
602
1
原创 数据结构(二十二) -- 常用的十种算法(四) -- KMP算法
Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++,继续匹配下一个字符;如果j!= -1,且当前字符匹配失败(即S[i]!
2022-09-27 18:27:37
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人