Linux防火墙命令
linux系统常用的防火墙分别是iptables和firewall防火墙,记录一下常用的命令 firewall防火墙12345678910111213141516171819202122232425#查看firewall服务状态systemctl status firewalld#查看firewall的状态firewall-cmd --state# 开启service firewalld start# 重启service firewalld restart# 关闭service firewalld stop#查看防火墙规则firewall-cmd --list-all # 查询端口是否开放firewall-cmd --query-port=8080/tcp# 开放80端口firewall-cmd --permanent --add-port=80/tcp# 移除端口firewall-cmd --permanent --remove-port=8080/tcp#重启防火墙(修改配置后要重启防火墙)firewall-cmd --reload 参数解释firwall-cmd:是Lin...
Windows系统SSH服务安装指南
最近在做Jenkins的持续集成,公司的应用服务器大多是Windows系统,平时的运维主要是靠远程桌面的方式,为了使用Jenkins自动部署,需要在windows系统上安装SSH的服务,这里介绍微软官方的解决方案,详细介绍可以参考官网wiki。基于PowerShell的OpenSSH: https://github.com/PowerShell/Win32-OpenSSH/releases 安装步骤 进入链接下载最新的OpenSSH-Win64.zip,解压至 C:\Program Files\OpenSSH 打开cmd,进入 C:\Program Files\OpenSSH安装目录,执行以下命令 1powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 设置服务自动启动并启动服务 12sc config sshd start= autonet start sshd 修复主机端的文件权限,进入 C:\Program Files\OpenSSH,右键 FixHostFilePermissions.ps1【使...
Spring MVC接口监控必备:原始路径模板获取全解析
问题场景原始路径模板:/users/{id}实际获取路径:/users/40000478 在监控和统计场景中,带具体参数值的路径会导致: 相同的接口被统计为多个不同的路径 难以进行有效的聚合分析 通知信息不够清晰直观 解决方案:Spring MVC路径模板获取Spring MVC在处理请求时,会在请求属性中存储丰富的映射信息。通过以下方式可以获取原始路径模板: 12345678910111213import org.springframework.web.servlet.HandlerMapping;import javax.servlet.http.HttpServletRequest;public class MonitoringUtils { public static String getOriginalPathPattern(HttpServletRequest request) { // 获取最佳匹配的路径模式,如 /ad/launch/task/sendConfirmEmail/{id...
Typora安装与配置
Typora安装注册 先安装 typora-setup-x64-1.2.4.exe,并记录安装路径,下载地址 将 app.asar 替换到安装路径下的resources文件夹,替换掉app.asar文件 重启typora!!!!!! 输入邮箱、注册码,邮箱随便输入,注册码:E8Q9Y5-KXMTL5-7578SL-4S5XKS 仅供学习,请在下载24小时之内删除,请支持正版 图片上传文件 -> 偏好设置中设置图像相关配置,上传服务我使用的是PicGo-Core(command line),其实和PicGo-Core(app)一样,主要是我不想托盘中多出一个程序放在那里,看着不舒服 点击下载或更新,下载更新完成后,点击打开配置文件,配置图床的地址,有些版本能直接打开,有些无反应,需要手动进到指定的目录进行修改config.json文件 picgo 的默认配置文件为~/.picgo/config.json。其中~为用户目录。不同系统的用户目录不太一样。 linux 和 macOS 均为~/.picgo/config.json。 windows 则为C:\Users\你的用...
VSCode Python开发配置
Jupyter VSCode中安装jupter插件 使用#%%分割代码块 .ipynb文件中使用jupyter vscode中运行jupter时提示需要安装ipykernel,安装报错可以执行以下脚本进行安装 打开工程:code + 路径 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ipykernel Pylance Python › Analysis: auto format string Python › Analysis › Inlay Hints: Call Argument Names 选择partial Python › Analysis: Type Checking Mode 选择standard Python › Analysis: inlay Hints:Function Return Types IntelliCode CompletionsAI自动补全功能 Code Spell Checker单词拼写检查 Error lens错误检查
Spring事务代码重构实战:用事务回调优化业务逻辑
背景在开发过程中我们更多的是使用Spring的声明式事务,也就是使用@Transactional注解。 需要注意的是@Transactional在很多种情况下失效,总结起来大概两种场景,第一没有经过Spring Bean的AOP代理,比如同一个bean中,一个方法调用另一个方法,如果第二个方法使用声明式事务处理就不会生效。 第二是在异步线程中,Spring的声明式事务不会达到预期的效果,在方法中启动了一个异步线程,异步线程中事务控制,这种情况对于事务的处理会达不到预期效果,因为主线程和异步线程拿到的数据库连接不同,无法保证主线程和异步线程的事务一致性。 在很多场景下,可能会有分布式事务问题,但是由于各种历史原因,或者引入的成本太高,或者这个场景对一致性的要求并不是特别的高,我们一般会尽量的去保证做到事务的一致性,并没有引入本地消息表、事务消息等去实现。 在开发过程中,我们要保证事务尽量小。因为开启关闭事务是有资源消耗成本存在,另外就是数据库的连接池也是有限的,如果存在大事务,他持有的这个线程一直不释放,那么对于整个线程池的吞吐量会有影响,所以在代码实现时需要避免大事务,能批量...
配置nginx实现https访问
安装nginx在官网下载和系统匹配的nginx,解压即可 安装OpenSSL若网站有https的证书跳过2、3、4步即可,若没有证书则需要自己生成 由于代理https需要使用证书,这里我们使用OpenSSL生成自签名的证书,可以下载与系统相匹配的OpenSSL程序进行安装,安装过程一直下一步即可,下载地址 配置环境变量 新增环境变量 OPENSSL_HOME,变量值为 D:\OpenSSL-Win64,指向OpenSSL的安装路径 新增环境变量 OPENSSL_CONF,变量值为 D:\OpenSSL-Win64\bin\openssl.cfg,指向openssl.cfg文件目录 在环境变量path的末尾添加 %OPENSSL_HOME%\bin 生成证书在nginx安装目录创建 ssl文件夹,用于存放证书,如我的是 F:\nginx-1.16.1\ssl,以管理员权限运行cmd并进入创建的ssl目录 创建私钥在命令行中执行命令 openssl genrsa -des3 -out demo.key 1024 ,demo是私钥文件名,可以自定义,此处需要输入和验证密码,输入的密码...
面向对象的设计原则
什么样的代码可以称之为好代码?又如何评价代码比较差?每个人也许都有自己的标准,但是在软件设计领域中,有一套通过经验总结出来的,可以有效解决问题的指导思想和方法论,遵从这些原则,可以事半功倍,反之则有可能带来一些麻烦。 SOLIDSOLID是五种设计原则首字母的缩写,有趣的是这个单词本身就有稳定的含义,遵从这些设计原则,有助于我们设计出更灵活,易于拓展和维护的软件系统。 Single Responsibility Principle(SRP):单一职责原则 Open Close Principle(OCP):开闭原则原则 Liskov Substitution Principle(LSP):里氏替换原则 Interface Segregation Principle(ISP):接口隔离原则 Dependency Inversion Principle(DIP):依赖倒置原则 SOLID原则之间并不是相互孤立的,彼此间存在着一定关联,一个原则可以是另一个原则的加强或基础;违反其中的某一个原则,可能同时违反了其他原则。其中,开闭原则和里氏代换原则是设计目标;单一职责 原则...
深入解析StackOverflowError:从递归到迭代的优雅转型
栈溢出机制深度剖析在Java程序执行过程中,每个线程都拥有独立的栈空间用于存储方法调用和局部变量。当函数被调用时,JVM会创建一个新的栈帧(Stack Frame)并压入栈中,包含方法的参数、局部变量和返回地址等信息。 栈溢出的根本原因12345// 递归调用导致栈帧不断累积public void recursiveMethod(int n) { if (n <= 0) return; recursiveMethod(n - 1); // 每次调用都创建新的栈帧} 当递归层次过深时,栈帧数量超过栈容量限制,就会抛出java.lang.StackOverflowError。 系统化解决方案算法重构:递归转迭代核心思路:用显式的栈数据结构替代系统调用栈优势: 堆内存远大于栈内存,可处理更深层次的数据结构 避免方法调用的开销,提升性能 内存使用可控,不易出现溢出 尾递归优化(理论层面)虽然Java编译器不支持自动尾递归优化,但了解其原理有助于写出更好的代码: 1234567891011// 非尾递归public int factorial(i...
技术成长困境与突破
现状1、产品提需求,讨论开发,熟悉数据库,增删改查,加班,恶性循环 2、有些人比较爱学习,刷视频。视频讲的都挺好,源码课看了,喜欢看,但是越看越累,看完也不知道这东西怎么用,在公司就负责某个模块,天天围绕着几张表,处理不完的杂事 3、面试突击背题,背完就忘 4、不知道最精通的技术是什么,每天都在用Spring、SpringBoot,面试的时候稍微往深了问,发现并不知道底层的原理,也觉着底层原理并没有什么用,因为工作中用不到 5、在公司学不到什么东西,迷茫,没有人指引 6、没有人指导代码,实现功能就行,平时的工作就是增删改查 7、没有大公司的开发经验,思维局限 产生这些问题的原因是什么?没有场景 面试过程中为什么要问项目经验?其实就是要知道遇到某些场景时是如何处理的,为什么要问场景,是因为公司需要! 公司要的是什么?1、订单交易系统是老团队做的,需要有人接手。会SpringBoot,SpringCloud一定能短时间内接手吗?公司是不是更倾向于招一个有相应业务经验的人接手? 2、单体应用需要微服务重构,如何重构,以什么样的维度进行重构,服务如何拆分? 3、功能需要提升性能,用什么技...
从JUnit到Mockito:构建可靠Java单元测试
JUnit 4以下是JUnit 4中一些常用的类和注解的相关API: 注解: @Test:标记测试方法。 @Before:在每个测试方法之前执行的方法。 @After:在每个测试方法之后执行的方法。 @BeforeClass:在整个测试类之前执行的静态方法。 @AfterClass:在整个测试类之后执行的静态方法。 @RunWith:指定自定义的测试运行器(Runner)。 @Ignore:忽略某个测试方法或测试类。 断言(Assert): Assert.assertEquals(expected, actual):判断两个值是否相等。 Assert.assertTrue(condition):判断给定条件是否为真。 Assert.assertFalse(condition):判断给定条件是否为假。 Assert.assertNull(actual):判断给定对象引用是否为空。 Assert.assertNotNull(actual):判断给定对象引用是否不为空。 测试运行器(Runner): BlockJUnit4ClassRunner:默认的JUnit 4运行器,用...
线程池中的隐形陷阱:任务依赖导致的线程饥饿锁
故障现象为提升接口响应速度,将聚合接口的串行调用改为异步并行。上线后不久,系统抛出大量异常: 123456Exception in thread "main" java.util.concurrent.ExecutionException: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@42936575[Not completed, task = xxxxx] rejected from java.util.concurrent.ThreadPoolExecutor@33f18ac[Running, pool size = X, active threads = X, queued tasks = N, completed tasks = M] 线程池和队列均已被耗尽。 第一反应是线程池参数设置太小,但深入分析后发现:代码逻辑有问题——提交到线程池的任务存在相互依赖关系。 核心问题:在有限大小的线程池中执行相互依赖的任务,可能产生死...







