- 博客(130)
- 收藏
- 关注
转载 SpringBoot 事务失效的场景
在使用 @Transactional 注解声明事务时,有时我们想自定义回滚的异常,spring 也是支持的。可以通过设置rollbackFor参数,来完成这个功能。@Slf4j@Service如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了 SqlException、DuplicateKeyException 等异常。而 BusinessException 是我们自定义的异常,报错的异常不属于 BusinessException,所以事务也不会回滚。
2024-04-29 18:07:41 313
原创 Kafka---总结篇
Kafka的message是按topic分类存储的,topic中的数据又是按照一个一个的partition即分区存储到不同broker节点。确定好消息的topic+partition后,直接发送给对应leader副本所在的broker。LSO 的值等于事务中第一条消息的位置(firstUnstableOffset,如上图所示),对已完成的事务而言,它的值同 HW 相同。其中轮询策略是默认的分区策略,而随机策略则是较老版本的分区策略,不过由于其分配的均衡性不如轮询策略,故而后来改成了轮询策略为默认策略。
2024-04-25 16:21:39 2836 6
原创 NSQ消息队列---总结篇
就是客户端连接上nsqd之后,会告诉nsqd它的可接受的消息数量是多少,每当nsqd给客户端推送一条消息这个RDY就会减一,而客户端消费完毕并且发送一个FIN之后,这个RDY又会加一(其实这个设计有点类似tcp中的用来控制流量的窗口机制)。如果客户端没有回复, NSQ 会在设定的时间超时,自动重新排队消息 (有个协程定时查看,根据当前时间跟最大堆的顶元素比较)。(1)根据配置指定的nsqd的ip, 选择一个机器,通过 HTTP API(也可以TCP)将消息发布到 nsqd的指定 topic。
2024-04-25 16:14:43 1013
原创 Java知识总结---并发篇
synchronized 关键字加到 static 静态方法和 synchronized(class) 代码块上都是是给 Class 类上锁;synchronized 关键字加到实例方法上是给对象实例上锁;尽量不要使用 synchronized(String a) 因为 JVM 中,字符串常量池具有缓存功能。Q:构造方法可以用 synchronized 修饰么?A:先说结论:构造方法不能使用 synchronized 关键字修饰。构造方法本身就属于线程安全的,不存在同步的构造方法一说。
2024-04-25 16:00:16 990 2
原创 Java知识总结-基础
** * 外部内、内部类 */ public class Outer { public static IAnimal getInnerInstance(String speak){ return new IAnimal(){ @Override public void speak(){ System.out.println(speak);当程序第一次引用该类的静态成员时,就会触发这个类的加载。
2024-04-25 15:52:42 1464
原创 Java知识总结-集合
/ 如果新容量大于 MAX_ARRAY_SIZE,进入(执行) `hugeCapacity()` 方法来比较 minCapacity 和 MAX_ARRAY_SIZE, // 如果minCapacity大于最大容量,则新容量则为`Integer.MAX_VALUE`,否则,新容量大小则为 MAX_ARRAY_SIZE 即为 `Integer.MAX_VALUE - 8`。基于红黑树实现,根据key键排序,默认是按照key的升序排序。的时候,那么就要考虑对数组的扩增了,也就是说,这个的意思就是。
2024-04-25 15:51:45 706
原创 SpringBoot Redis使用篇
完整的代码:https://github.com/chenguowei/project_java/blob/main/spring-boot-examples-demo/spring-boot-redis/README.md。
2024-04-25 15:40:26 270
原创 SpringBoot 拦截器使用篇
如果你需要自定义 Interceptor 的话必须实现 org.springframework.web.servlet.HandlerInterceptor接口或继承 org.springframework.web.servlet.handler.HandlerInterceptorAdapter类,并且需要重写下面下面 3 个方法:preHandler(HttpServletRequest request, HttpServletResponse response, Object handler) 方法在
2024-04-25 15:39:22 601
原创 SpringBoot Filter过滤器的使用篇
完整的代码github: https://github.com/chenguowei/project_java/blob/main/spring-boot-examples-demo/spring-boot-filter/README.md。2.**@Order(1)**表示如果有多个拦截器的话就是设置这个拦截器的运行等级,数字越小,越先执行。,当然你也可以不用写包的具体地址,不传参数,但是建议是传参数,并且这个采参数也可以传多个的。4.**doFilter()**核心方法,配置过滤器的逻辑代码。
2024-04-25 15:38:38 581
原创 SpringBoot 过滤器和拦截器简介
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。在WebWork的中文文档的解释为—拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个Action执行前阻止其执行。同时也提供了一种可以提取Action中可重用的部分的方式。拦截器将Action共用的行为独立出来,在Action执行前后执行。
2024-04-25 15:37:25 856
原创 SpringBoot Aop使用篇
Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。就是抽离出来的逻辑类,比如日志、权限等。Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
2024-04-25 15:34:34 716
原创 SpringBoot War打包部署
完整的代码:https://github.com/chenguowei/project_java/blob/main/spring-boot-examples-demo/spring-boot-war/README.md。如果部署成功,但Spring Boot 没有启动日志,并且访问 404,则可能有 tomcat 的版本和 spring-boot的版本不一致。需要查看 spring-boot-starter-web 对应的 内置tomcat 的版本。在 idea 中查看对应的 版本。
2024-04-25 15:31:52 434 1
原创 SpringBoot JPA使用
是 Spring 框架提供的一个模块,用于简化与关系型数据库的交互和数据访问。它基于JPA(Java Persistence API)标准,并提供了一组易于使用的API和工具,帮助开发人员更轻松地进行数据库操作。通过Spring Data JPA,开发人员可以通过编写简洁的代码来执行常见的 CRUD 操作,同时还支持高级查询、分页、事务管理等功能。它的目标是提供一种更简单、更高效的方式来处理数据库操作,减少开发人员的工作量,并提高应用程序的可维护性和可扩展性。
2024-04-25 15:22:29 1098
转载 随机数产生转换-根据(1,5)随机数生成器,生成(1,7)之内的随机数
转自:https://blog.csdn.net/zheng0518/article/details/509298261. 题目 给定一个随机数生成器,这个生成器能均匀生成1到5(1,5)的随机数,如何使用这个生成器生成均匀分布的1到7(1,7)的数?2. 思路 方法一:生成两个(1,5)的随机数,这样一共是25种情况,注意这两个数是有顺序的,从这25种情况中,取前21种,每三种代表(1,7)中的一个数字,如果取到的是这21种以外的情况,丢掉重新取。 方法二:生成三个(1,...
2020-05-10 12:48:02 1635
转载 内存寻址之段页存储机制分析
转自:https://blog.lecury.cn/2017/05/05/%E5%86%85%E5%AD%98%E5%AF%BB%E5%9D%80%E4%B9%8B%E6%AE%B5%E9%A1%B5%E5%AD%98%E5%82%A8%E6%9C%BA%E5%88%B6%E5%88%86%E6%9E%90/背景学习操作系统这门课的时候,曾不止一次的接触到操作系统的段页式管理机制,但当是都是浅尝辄止,不知道操作系统为啥要有这个机制。如今时间过去很久,关于这个机制的背后的原理和实现机制,早已忘记很久了
2020-05-09 17:40:32 643
转载 线程的查看以及利用gdb调试多线程
转载自:https://blog.csdn.net/zhangye3017/article/details/803824961. 线程的查看首先创建两个线程:#include <stdio.h>#include <unistd.h>#include <pthread.h>#include <stdlib.h>#include &l...
2020-05-08 14:59:55 1008
原创 grace(热重启)剖析
Beego中的热重启是以一个单独的模块二存在的,你可以在其他项目单独使用,例如:import( "log" "net/http" "os" "strconv" "github.com/astaxie/beego/grace" ) func handler(w http.ResponseWriter, r *http.Request) { ...
2020-05-06 13:42:32 986
原创 Mysql 的慢查询日志开启
慢查询日志其实就是将mysql 的 sql 执行过程中执行时间超过阈值的sql 语句记录下来,方便后续优化。而阈值的大小由 long_query_time 来设置,默认是10秒。 在默认的情况下,mysql 的慢查询日志事关闭的,需要人工手动开启。mysql> show variables like 'long_query_time'\G;*******...
2019-10-21 21:37:06 191
转载 乐观锁和悲观锁
前言乐观锁和悲观锁问题,是出现频率比较高的面试题。本文将由浅入深,逐步介绍它们的基本概念、实现方式(含实例)、适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官。目录一、基本概念二、实现方式(含实例) 1、CAS(Compare And Swap) 2、版本号机制三、优缺点和适用场景四、面试官追问:乐观锁加锁吗?五、面试官追问:CA...
2019-09-25 08:51:44 315
转载 Go 高性能编程技巧
1.在高并发队列任务分发的场景中RingBuffer比Channel的性能更好2.defer功能不是静态编译时提供的,而是运行时提供的,所以使用defer会产生一些额外的性能开销(了解就好,该用还是得用)3.encoding/json序列化是通过反射机制实现的,性能很差,可以使用ffjson生成encode/decode代码来提升性能。如果可能,使用MsgPack替代JSON,因为Msg...
2019-09-17 22:03:44 940
原创 go 字符串string 和 字符数组[]byte 的高效转换
在我们的程序里面基本都写成如下的转换var a = []byte("hello world")var b = string(a)这样的强制类型转换其实是调用底层的copy 函数进行转化,也就是说需要在内存中进行拷贝。这如果并发量达到千万级别,这样的转换是很耗性能的。那么我们是否可以使用 unsafe.Point() 这样的指针直接转换呢?首先我们的知道 string 和 []byt...
2019-09-16 22:48:27 6296 1
原创 类似微博的消息推送的两种实现方式
我们在微博上订阅并关注某些人的微博,这些关注的人发布一条微博的时候,我们打开微博浏览会看到一条条消息按照时间的逆序在我们的首页展示出来,我们可以不停地往下阅览这些消息。那么从消息发布到阅览,这背后的技术是怎么实现的呢?下面我们来一看究竟。方案一:在消息发布的时候插入同一个全局的消息主表中。当用户查看时间时,首先查找所有关注的对象,列出这些人的所有消息,最后以时间为序来排序合并。大概的关系型数据...
2019-09-08 12:33:45 5541
转载 redis的LRU算法实现
http://www.cnblogs.com/WJ5888/p/4371647.htmlRedis:https://github.com/zwjlpeng/Redis_Deep_ReadRedis中采用两种算法进行内存回收,引用计数算法以及LRU算法,在操作系统内存管理一节中,我们都学习过LRU算法(最近最久未使用算法),那么什么是LRU算法呢LRU算法作为内存管理的一种有效算法,其含...
2019-03-31 01:00:32 2536
转载 使用GDB调试GO
转自:https://blog.csdn.net/gua___gua/article/details/50481534GDB是FSF(自由软件基金会)发布的一个强大的类UNIX系统下的程序调试工具。使用GDB可以做如下事情:启动程序,可以按照开发者的自定义要求运行程序。 可让被调试的程序在开发者设定的调置的断点处停住。(断点可以是条件表达式) 当程序被停住时,可以检查此时程序中所发生的...
2019-03-10 15:13:01 835
原创 go net.http 每次都查询dns的导致的问题
在线上部署的一个程序,在某天突然在一天内出现多次 “dial tcp: lookup xxxx.com on 223.x.x.x:53: read udp 180.x.x.x:7792->223.x.x.x:53: i/o timeout” 的问题,导致线上告警触发了多次。后面查找问题,发现 go 每次发起 http 请求都会发起一个 dns 请求来进行域名解析,而我们服务器的dns...
2019-03-03 16:38:07 25926
转载 编程珠玑变位词算法
转自:https://blog.csdn.net/workformywork/article/details/16963613问题描述给定一个英语字典,找出其中的所有变位词集合。例如,“pots”,“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中的字母顺序来得到。解决思路首先想到的方法应该是使用一个两层循环,遍历字典,然后再比较每个单词是否是变位词,在比较单...
2019-03-03 12:21:27 230
原创 redis 4.0以上的module (一)
前两天查看redis的官方文档,发现在redis 4.0以上,redis支持了可扩展了module,让用户可以自己根据需求自己扩展redis相关的功能了。所以趁周末,查看了官方的module文档,写了个简单的demo。1. 下载并安装好 redis 4.0 以上的版本 (具体的安装步骤百度)2. 新建一个目录并包含 redismodule.h 文件,里面包含了 redis 相关的操作的函数...
2018-12-23 21:55:44 2781
原创 openresty+lua 实现简单的灰度发布
openresty 是在nginx之上集成了lua模块的第三方服务器,我们很容易基于lua对openresy进行简单的二次开发。下面就是一个简单的openresty+lua 的灰度发布的测试demo,简单地来说就是通过client的ip来访问不同的服务器。nginx.conf 配置文件如下:upstream client1 { server 127.0.0.1:8080; }...
2018-12-16 22:12:29 3065
转载 nc 用法
转自:https://www.cnblogs.com/nmap/p/6148306.html什么是ncnc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具nc的作用(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口(2)端口的扫描,nc可以作为client发起TCP或UDP连...
2018-12-05 23:52:37 326
转载 Linux 技巧:让进程在后台可靠运行的几种方法
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问...
2018-12-04 21:06:40 275
转载 nginx https 配置
转自:https://www.cnblogs.com/jingxiaoniu/p/6745254.html一、HTTPS简介1.https简介HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据2.https协议原理首先,客户端与服务器建立...
2018-12-02 23:02:44 185
原创 sublime中换行符替换成“,”
command + option + ffindwhat 中输入:command + shift + enter在Replace With 中输入 ","点击 replaceall
2018-10-21 21:38:02 4057 1
转载 MySQL 导入和导出数据
转自:https://blog.csdn.net/myron_sqh/article/details/13016945一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1、导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql#/usr/local/mysql/bin/ mysqldump -uroot -p...
2018-10-19 09:41:20 193
转载 MySQL用户管理:添加用户、授权、删除用户
转自:https://www.cnblogs.com/chanshuyi/p/mysql_user_mng.html添加用户以root用户登录数据库,运行以下命令:create user zhangsan identified by 'zhangsan';上面的命令创建了用户zhangsan,密码是zhangsan。在mysql.user表里可以查看到新增用户的信息:授权...
2018-10-18 19:36:37 173
转载 如何高效产生m个n范围内的不重复随机数
转自:https://blog.csdn.net/code_crash/article/details/4875601 如何产生不重复的随机数?最容易想到的方法,是逐个产生这些随机数,每产生一个,都跟前面的随机数比较,如果重复,就重新产生。这是个很笨的方法,且比较次数呈线性增长,越往后次数越多。其实这些比较是多余的,完全可以不进行比较,只要反过来,按顺序产生这些数,但随机产生它们的位置。例如下...
2018-09-09 09:07:44 1504
转载 程序员面试智力题
转自:https://blog.csdn.net/iteye_5501/article/details/81657038第一组 1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢? 2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻? 3.如果...
2018-09-07 17:49:00 842
原创 有100w个关键字,长度小于等于50字节(B)。用高效的算法找出 top10 的热词,并对内存的占用不超过1MB
昨天去面试 C++ 后台开发,给了一份笔试题,里面有道附加题:“有100w个关键字,长度小于等于50字节(B)。用高效的算法找出 top10 的热词,并对内存的占用不超过1MB”。刚开始看到这道题,我的第一反应觉得应该就是 大化小 的分而治之。然后给出的答案跟网上也差不多(回来之后百度的)。觉得还不错,所有记录下解决过程。(1)先把100w 个关键字 hash 映射到小文件,根据题意,100w...
2018-08-25 17:37:19 826
转载 Google开源协议Protobuf的简介及其序列化原理
转自:https://blog.csdn.net/chengzi_comm/article/details/53199278protobuf介绍及其序列化原理什么是probobuf、作用是什么: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平...
2018-08-24 10:45:18 7193
原创 int *p = NULL 和*p = NULL 有什么区别?
很多初学者都无法分清这两者之间的区别。我们先看下面的代码:int *p = NULL;这时候我们可以通过编译器查看p 的值为0×00000000。这句代码的意思是:定义一个指针变量p,其指向的内存里面保存的是int 类型的数据;在定义变量p 的同时把p 的值设置为0×00000000,而不是把*p 的值设置为0×00000000。这个过程叫做初始化,是在编译的时候进行的。明白了什么是初...
2018-08-22 18:36:27 1671
转载 LeetCode难度及面试频率
转自:LeetCode Question Difficulty Distribution 1 Two Sum 2 5 array sort set Two Pointers ...
2018-08-21 09:06:26 1185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人