随笔

随笔

敲得码黛
敲得码黛
2022-09-26 14:44

liquibase:数据库管理工具,可以实现数据库脚本管理。与git的作用类似,可以记录所有的变更操作。

0
敲得码黛
敲得码黛
2022-09-21 16:35

今天接手了一套代码,是运营平台的后台管理系统,其中也涉及到了一些资金相关的功能。不看不知道,一看才发现权限竟然只控制到了菜单级而不是接口级,一个金融型的后台,权限竟然只控制到菜单级别,那么别人完全可以通过接口进行越权访问,于是计划对部分模块进行整改。。
整改目标如下
1:对于查询接口可以控制到菜单级(无须整改)
2:对于新增、修改、删除操作必须控制到接口级(需要整改)
3:对于新增、修改、删除操作的粒度必须划分到功能,不能多个功能共用同一个权限(需要整改)

总结:在开发过程中,不应该单单为了满足业务需求,也更应该注意一些安全上的隐患,还有一些逻辑上的漏洞,程序员还是要严谨一点。

0
敲得码黛
敲得码黛
2022-09-13 15:10

最近公司开发的一个新产品即将上线了,我负责其中的一个模块,开发了很长时间,功能已经错综复杂了。临近上线,有些复杂的功能我仍然无法看到全貌,我觉得这可能会带来很大的问题。。于是我打算在上线前将它们梳理清楚。
1、资金流:超级重要!!!否则将面临资金混乱的情况
2、订单溯源:超级重要!!!否则将面临订单无法进行追溯的问题
3、日志告警:建议添加,产品初期可能会出现各种问题,需要能够及时的发现问题。
为了能够更加直观的了解系统现状,于是我打算通过画图的方式描述系统的一些关键信息,例如架构图、服务链路图(描述各服务之间的依赖关系)、资金流。。。通过架构图,基本上了解了现有的服务以及各服务的基本职责,然后通过服务链路图发现了系统之间的耦合关系。。通过资金流了解到了资金的流向。。

通过这些图,发现了很多的问题,有个别服务耦合严重、资金流对不齐。。同时希望自己可以进一步的提高自己的画图技巧,以便可以清楚的描述更多的系统状况。

0
敲得码黛
敲得码黛
2022-09-12 16:06

系统告警功能引发的思考
最近在开发工作中,遇到了一些会中断用户流程的异常,由于第三方服务不稳定,所以异常还是蛮多的,于是我开始考虑在系统中增加告警功能:当触发到中断用户流程的异常时,可以将错误信息主动推送到开发者。。。
考虑了很多因素,我们决定采用日志监控的做法。。原因有以下几点:
1、通过日志监控异常异常信息对业务没有侵入性
2、通过日志分级可以将异常进行分类处理,例如error级别需要立即处理,而warn级别可以稍后处理
3、通过接入钉钉机器人实现异常推送
如果采用了此方案,那么有一些情况必须要进行要达成共识。
1、开发者团队需要对日志进行分级打印
2、开发团队需要知道在什么情况下打印何种级别的日志(个人建议:中断用户流程的必须打Error日志,不中断用户流程但是需要开发者特别的注意的可以打印warn日志,记录型的日志建议打info级别,参数细节部分建议打印debug级别)

0
敲得码黛
敲得码黛
2022-08-19 13:58

昨天遇到一个很奇怪的问题:
有个同事朋友的云服务器(生产环境)一直处于CPU100%的状态,我们通过top/ps命令却找不到占用cpu的进程。然后我通过netstat命令看到有很多SYN_SEND状态的TCP链接,这些链接指向了很多不同ip的6379端口,这意味着服务器内肯定有应用程序一直在尝试链接网络内的redis服务。我猜测是中病毒了,而且这个病毒还在尝试扫描其他的6379端口。

因为第一次遇到这样的情况,所以就产生了一些好奇的地方。
1:黑客是怎样将病毒植入到服务器中的。
(网上看了一些资料,猜测是将redis服务暴露在了公网上,黑客通过redis将公钥写入/root/.ssh/的认证文件中,然后就可以通过ssh链接到云服务器)
2:为什么top/ps命令无法查询到服务占用的进程

1
敲得码黛
敲得码黛
2022-08-17 12:13

TCP半链接队列与全连接队列

  • 每个端口都有各自的半链接队列(Syn-Queue)与全连接队列(Accept-Queue),链接队列大小受限于应用及系统内核参数的影响。

  • 当服务端收到客户端发送的SYN包时,内核会分配一个socket放入半链接队列,此时服务端的socket处与SYN_RECV状态(可以使用netstat -ant|grep SYN_RECV查看当前半链接队列的数量)

  • 客户端与服务端完成三次握手后,内核会将半链接队列中的Socket放入全链接队列中等待应用读取,此时客户端与服务端的socket均处于ESTABLISHED(通过ss -lnt可以查看全连接队列大小与当前全链接队列中的socket数量。)

  • 当应用调用accept()后,socket将从全链接队列中移除,socket仍然处于ESTABLISHED状态,此时代表应用程序正在处理。此时的处于ESTABLISHED状态的socket也有两个队列,Recv-Q和Send-Q,分别代表应用程序未读取的数据,与未收到客户端ACK的数据。

  • 当全连接队列空间不足时,系统内核默认会主动丢弃客户端的ACK,这样当全连接队列有空间并接收到客户端重发的ack时就可以成功创建tcp链接

  • 正常状态全连接队列的数量应该始终为0,因为这样代表了应用可以迅速的处理用户请求,不会堆积在tcp队列中

0
敲得码黛
敲得码黛
2022-08-09 15:24

Io多路复用的几种实现方式:select、poll、epoll

1
敲得码黛
敲得码黛
2022-08-09 10:27

Tomcat各版本源码下载地址:https://archive.apache.org/dist/tomcat/

0
敲得码黛
敲得码黛
2022-07-28 18:21

Tomcat是如何监听本地端口的?
Tomcat的IO模型是怎样的?
Tomcat中的BIO与NIO有什么不同?

4
敲得码黛
敲得码黛
2022-07-28 17:47

kafka实现延迟消息

0