自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 论软件系统架构评估及其应用

2021年3月,我参与了某金融科技公司的基金网上交易系统的开发工作,该系统旨在为不同层次的客户提供优质的在线挑选和购买基金的服务,包括开户、风险评测、交易、资产明细查询、电子合同签署等功能。我在项目中担任系统架构师,主要负责系统的架构设计和技术选型。本文以基金网上交易系统为例,主要论述了项目中涉及到的软件系统架构评估及其应用。系统整体采用微服务架构,我们选用架构权衡分析法ATAM对架构进行了评估,评估过程共分为四个阶段进行。首先是描述与介绍阶段,对ATAM、项目需求和关键质量属性进行了介绍;

2024-07-19 14:40:45 806

原创 论微服务架构设计及其应用

2021年3月,我参与了某金融科技公司的基金网上交易系统的开发工作。系统旨在为不同层次用户提供优质的在线挑选并购买基金的服务,主要包括开户、风险测评、交易下单、资产明细查询、电子合同签署等功能。我在项目中担任系统架构师,主要负责系统的架构设计和技术选型。本文以基金网上交易系统为例,主要论述了微服务架构在项目中的具体应用。

2024-07-12 13:13:51 839

原创 2024年上半年软考高级—系统架构师考试总结(已通过)

2个小时75道选择题一般都能提前完成,这也意味着最多能有10.30-12.30的2个小时作答案例分析,时间也是充足的。说实话,考完后心态有点小崩,根本没想过能考过,主要是自己准备的论文没一个中的,连相关的也没有。最终选的论文题目是模型驱动架构,主要是因为题干描述和ABSD有点相近,自己强行给关联上,事后才发现偏题严重,全靠阅卷老师高抬贵手,放我一马。因为有考研的经历,计算机408的内容还历历在目,所以花在计算机基础知识上的时间相对较短,重点放在了软件工程、系统架构设计/风格/评估相关内容上。

2024-07-10 15:41:17 796

转载 openresty(nginx + lua)所有指令和内置API详细介绍

详见官方链接,需自行翻译。

2024-06-24 14:05:38 251

原创 PageHelper插件返回属性错误问题

所以说,构造PageInfo的操作并非一定要紧跟dao查询后,而是构造PageInfo的入参需要是Page对象,否则属性肯定设置不对。此外,如果转换操作不涉及到新的类,直接在原列表上操作对象的属性也不会出现这种问题,因为Page的属性仍然在。

2024-04-24 11:22:34 351

原创 spring执行异步任务,含子线程异常捕获、上下文传递、请求阻塞

通过CountDownLatch实现阻塞请求线程直到异步任务执行结束;向异步任务传列表(必须是线程安全的容器)入参,统计任务成功与失败条数,并保存失败原因;使用TaskDecorator在父子线程中传输上下文信息,让异步任务执行时可以访问类似WebContext的上下文。

2024-03-08 09:51:05 607 1

原创 关于@Valid或@Validated注解的重复校验问题

总结:使用@Valid或@Validated配合@NotNull、@NotEmpty等注解对参数进行校验时,不能使用lombok自动生成的getter和setter,否则会导致同一个参数被校验两次(字段本身一次与get方法一次),当校验不通过时会多出一次error结果。故怀疑是get方法出了问题,ReqVO类使用的是lombok的@Data注解自动生成的get方法,去掉@Data注解,当我使用postman发送如下参数的请求时,

2024-03-04 15:32:57 502

转载 转载——jQuery的formValidator详细使用教程

另外如果试用AJAX提交数据验证,可以试用下面方法完美解决不通过验证就提交的问题。

2023-11-15 14:58:58 319

原创 面试之消息队列

普通的消息队列可以指定x-dead-letter-exchange参数来指定死信交换机,以及x-dead-letter-routing-key参数指定死信的RoutingKey,当队列中的消息变为死信后就将其发送到死信交换机。绑定在死信交换机上的队列称为死信队列,死信交换机根据死信的RoutingKey分发给不同的死信队列。将需要被顺序消费的消息放入同一个队列,并保证该队列只有一个消费者,利用队列先进先出的特性保证顺序消费。此时除了普通的消费者外,还应有专门处理死信队列消息的消费者。

2023-09-27 21:01:50 51 1

原创 面试之Redis

获取到锁的进程在执行业务逻辑后需删除自己创建的节点,由于临时有序节点的特性,当获取到锁的进程的服务器宕机后,zookeeper会自动删除该结点,从而避免死锁的发生。其他的多台服务器作为slave节点,数据全部来自master节点,仅负责客户端的读请求。在这个过程中,哨兵们会通过投票机制让下线的master节点的某个slave节点晋级为新的master节点(修改配置文件),并通知其他slave节点改为复制新的master节点,当客户端试图连接下线的master节点时也会向其返回新的master节点地址。

2023-09-27 21:00:07 53 1

原创 面试之智力题

让第1只老鼠嘬一口所有二进制编号第1位为1的药水,第2只老鼠嘬一口所有二进制编号第2位为1的药水,依次类推则需要10只老鼠。24小时后如果第1只老鼠死亡,则毒药瓶二进制编号第1位为1,否则为0,依次推出每一位的值从而得出毒药瓶编号。,一开始A不知道自己的数字是因为自己可能是1或3,如果是1那么B应该可以推断出自己的数字是2,但B一开始说自己不知道,于是A知道了自己的数字3,进而B也知道自己的数字为2。只能利用大于等于1的整数这个条件,AB起初都不知道自己的数字则可以确定二者的数字都不是1。

2023-09-27 20:43:37 43 1

原创 面试之关系型数据库

聚簇索引的叶子结点存放的是完整的数据行,其他所有索引树的叶子结点存放的都是索引+主键。当有事务对一行记录修改/删除时会把即将被修改的数据cpoy到undo log中,同时往数据库中写入新的一行记录,新的记录除了被事务修改的显示字段外,对应隐藏字段的事务id会变为执行当前操作的事务id,同时回滚指针会指向刚才copy到undo log中的旧记录。普通索引,唯一索引(不允许值重复,可以为NULL),主键索引(特殊的唯一索引,不允许NULL),联合索引(组合不重复,不允许NULL),全文索引(类似搜索引擎)。

2023-09-27 20:42:15 112 1

原创 面试之计算机网络

如果客户端在TIME_WAIT期间再次收到了服务端的FIN报文,说明客户端上次发送的ACK丢失了,则重新发送最后一个ACK;2.

2023-09-27 20:41:15 33 1

原创 面试之操作系统

变量的定义和赋值通过“变量名=值”实现,=前后不能有空格,如果值是字符串可以加双引号或单引号,访问变量直接通过“$变量名”访问。变量默认都是字符串类型,数学计算通过**$((xxx))或者$[xxx]实现,且乘法 ‘*’ 需要加’ ’ 转义。通过脚本文件名执行脚本实质上是新开了子bash进程去执行脚本,故存在变量作用域的问题。全局变量指所有父子bash都能访问的变量,局部变量指仅当前bash能访问的变量。环境变量指的是系统提前创建好的全局变量,如$HOME,$PATH。

2023-09-27 20:39:45 41 1

原创 面试之Java八股文

有了双亲委派机制的存在,自定义的java.lang.String并不会被加载,因为在JVM启动时引导类加载器就加载了官方的java.lang.String。且用户自定义类的包名也不允许是java.lang包,编译会直接报错。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。

2023-09-27 20:34:33 38 1

原创 赛码网编程题--打字(Java全A)

小明很喜欢打字,今天小红给了小明一个字符串。这个字符串只包含大写和小写字母。我们知道,按下CapsLock键,可以切换大小写模式。我们在小写模式时候,同时按下shift+字母键,就能写出大写字母。在大写模式的时候,按下shift+字母键,就能写出小写字母。现在问题来了,给你一个字符串,问你最少使用多少个按键,就可以写出这个字符串呢?注意,按shift和字母键,算两次按键。开始时均为小写状态。每组数据一个字符串s,s的长度小于等于100。对于每组数据,输出最少按键次数。第一行一个T,表示有T组输入。.....

2022-08-07 15:54:41 3142 6

原创 idea添加方法注释模板

先展示结果具体步骤选择导航栏的File -> Settings -> Editor -> Live Templates。点击右边的加号,先创建一个Template Group(名字随意),选中创建的分组,再点击加号创建Live Template。在下方的Abbreviation中设置想使用的快捷键,我这里填的 ‘*’ 。Template text中填入如下模板信息,@Author后面跟姓名。** * @Author name * @Description * @Da

2022-05-24 17:29:37 1238

原创 使用idea自带的反编译工具 [FernFlower]

终端直接输入命令java -cp 参数1 org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true 参数2 参数3参数说明:参数1。IDEA安装目录下的反编译插件“java-decompiler.jar”所在路径,需要加上双引号。示例:“E:\IntelliJ IDEA 2020.2.2\plugins\java-decompiler\lib\java-decompiler.jar”参数2。需要反编译的文件

2022-05-24 15:24:35 1779

原创 记录自己分析ReentrantLock加锁与解锁及相关API的详细流程

下面是ReentrantLock非公平锁加锁流程:final void lock() { //调用CAS尝试获取锁 if (compareAndSetState(0, 1)) //尝试成功则修改当前拥有锁的线程是自己 setExclusiveOwnerThread(Thread.currentThread()); else //获取失败 acquire(1);}public final void acquire(int arg)

2021-10-29 21:01:00 154

原创 JAVA网络编程NIO实现简易多人聊天室

BIO模型BIO即blocking IO,顾名思义是一种阻塞模型。当没有客户端连接时,服务端会一直阻塞,当有客户端新建连接时,服务端会新开一个线程去响应(不用多线程的话服务端同一时刻最多只能接收一个连接)。但不断的新开线程对服务器的压力是巨大的,为了缓解压力可以采用线程池技术实现线程复用,但这种做法治标不治本,本质还是一个连接一个线程。代码如下://服务端public class BIOServer { private final static int PORT = 8888; p

2021-09-25 12:07:01 1316

原创 jdk实现的动态代理

概念代理的目标是在不修改现有代码的前提下对方法进行增强,实现在执行方法之前或之后进行某些操作,如日志记录、数据库事务操作等。静态代理。由我们自己去定义一个代理类,去包含要被代理的类(以下称为目标类),并暴露和目标类一样的方法供外界调用,然后在这个方法里面调用目标类的具体方法,此时就可以在调用目标类的具体方法前后进行其他操作了。动态代理。由jvm在程序运行期动态去创建代理类,这样就解决了静态代理的致命缺点:当目标类新增了要被代理的方法时需要再次修改代理类的代码。比较知名的动态代理实现主要有jdk与cg

2021-09-08 18:45:37 267

原创 JAVA实现跳表

在这里记录自己查询网上资料后自己实现的JAVA版本跳表的代码,比较简陋public class SkipList { private Node head, tail; //最左上头结点,最右上尾结点 private Random random = new Random(); //用于生成随机数 private static final double PROMOTE_RATE = 0.5; //结点向上扩展的概率

2021-07-15 17:20:04 185

原创 彻底记住i++和++i

知识前景:在java虚拟机的运行时数据中有一块地方叫虚拟机栈,每个线程独有。栈中存放一个一个栈针,每个栈针对应程序中的一个方法,若有main方法则位于最底层。栈针中有一个局部变量表:记录局部变量;和一个操作数栈:便于执行指令操作。i++和++i的操作不同于其他的赋值和加减乘除等操作,它是直接在局部变量表中操作,赋值和加减乘除需要使用到操作数栈。int i = 10;int i = i++;在执行i = i++这行代码时,会先将i的值10放入操作数栈,然后将局部变量表中的i加1,最后将操作数栈中的值

2021-04-08 15:27:04 145

原创 java多线程实现生产者与消费者模型

java多线程实现生产者与消费者模型//测试类public class TestPC { public static void main(String[] args) { SynContainer container = new SynContainer(); new Thread(new Productor(container),"生产者线程").start(); new Thread(new Consumer(container),"消费者线

2021-04-08 14:30:49 306 1

原创 jdbc连接mysql8.0版本需注意的点

今天在学习ssm时遇到了这个错误,然后在网上搜索了一大堆博客都是说mysql和mysql-connector-java的版本不对应。由于重装数据库太麻烦,我选择了下载最新版本的mysql-connector-java,但还是一直报这个错,前前后后下载了四五个版本也没用。后来尝试性将数据库连接的driver由com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver,大功告成。在网上搜说是mysql-connector-java 5以上的版本都需要加cj。(本人mysql.

2020-11-14 19:57:54 216 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除