CentOS 安装翰高数据库
创建 highgo 用户创建用户1234# 创建用户useradd highgo -d /home/highgo# 设置密码 1qaz@WSXpasswd highgo
提升用户权限12chmod u+w /etc/sudoersvi /etc/sudoers
查找到 Allow root to run any commands anywhere,在 root 下增加一行命令
1highgo ALL=(ALL) ALL
准备安装包
hgdb6.0.4-enterprise-centos7-x86-64-20220127.rpmpostgis3.0-6.0.4-enterprise-centos7-x86-64-20220127.rpm
放到 /home/highgo 目录下
123# 修改安装包所属用户sudo chown highgo:highgo hgdb6.0.4-enterprise-centos7-x86-64-20220127.rpmsudo chown highgo:highgo postgis3.0-6.0.4-enterpr ...
可移动硬盘内的AppImage应用如何获取移动硬盘内的资源
当 AppImage 程序想使用移动硬盘内的数据时,就需要这种方式。
创建 home 目录假设我们的 AppImage 程序的名字叫做 App.AppImage,那么就在程序的同级目录下创建一个 App.AppImage.home 目录,然后将数据放到该目录下。
编写 .AppRun 文件123456#!/bin/bashcd $HOME/app/./jre/bin/java -jar windowapp.jar "$@" &disownexit 0
$HOME 就是 App.AppImage.home 目录。
参考链接:https://docs.appimage.org/user-guide/portable-mode.html
把Java程序打包为AppImage格式
AppImage是Linux程序的一种打包格式,让 Linux 应用随处运行。
准备工作
下载打包工具 AppImageKit:https://github.com/AppImage/AppImageKit/releases
准备 AppImage 的打包目录 App.AppDir
123456789App.AppDir/ usr/ bin/ jre/ app.jar <其他使用到的资源> app.desktop (必须) app.png (必须) <-- 256x256像素的png图片 AppRun (必须) <-- AppImage的启动文件
编写 .AppRun 文件AppRun是启动脚本,内容写启动jar包的命令,语法类似于shell脚本。
1234567#!/bin/bash HERE=$(cd "$(dirname "$0")"; pwd)cd $HERE/usr/bin./jre/bin/java -jar windo ...
流量控制与可靠传输
本文在数据链路层下进行讨论。对于链路层传输的数据被称为帧。
流量控制由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接受能力的现象,如果此时不对发送方的发送速率进行限制,那么接收方可能会被后面不断发送来的数据“淹没”,造成帧的丢失而出错。流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收能力。
可靠传输机制数据链路层的可靠传输机制通常使用确认和超时重传两种机制完成。确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收(有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认)。超时重传是指发送方在发送某个数据帧后就开启一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,就重新发送该数据帧,直到发送成功为止。自动重传请求(Auto Repeat reQuest,ARQ)通过接收方请求发送方重传出错的数据帧来恢复出错的帧。传统自动重传请求分为三种,停止-等待(Stop-and-wait)ARQ、后退N帧(Go-Back-N)ARQ和选择性重传(Selective Repeat)ARQ。后两种协议 ...
Mybaits 架构原理
学习 Mybatis 的执行流程
解决阿里云服务器中挖矿程序
解决阿里云服务器中挖矿程序top命令看不到cpu占用特别高的进程,但是总cpu的us高达96%。
使用此命令,可以发现跟跟阿里云的通知挖矿程序名一样
1netstat -nap | grep zzh
12tcp 0 0 172.26.68.13:35174 43.230.161.175:5443 ESTABLISHED 22764/./zzhtcp 0 0 172.26.68.13:57640 195.242.110.31:5443 ESTABLISHED 22818/./zzh
强行杀死两个进程
12kill -9 22764kill -9 22818
去zzh的目录卸载发现无法卸载
1rm /etc/zzh
查看文件隐藏属性,发现带有-aie:(—–ai——e) 表示无法修改(貌似e属性无所谓)
1lsattr /etc/zzh
A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发 ...
开发 Mybatis 插件
Mybatis 插件Mybatis 插件介绍Mybatis 借助于四大核心对象(Executor、StatementHandler、ParameterHandler、ResultSetHandler)对持久层的进行操作。支持用插件对四大核心对象进行拦截,增强核心对象的功能。增强功能本质上是借助于底层的动态代理实现的,所以 MyBatis 中的四大对象都是代理对象。MyBatis 所允许拦截的方法如下:
执行器 Executor(update、query、commit、rollback等方法)
SQL语法构建器 StatementHandler(prepare、parameterize、batch、updates query 等方法)
参数处理器 ParameterHandler(getParameterObject、setParameters方法)
结果集处理器 ResultSetHandler(handleResultSets、handleOutputParameters等方法)
Mybatis 插件原理在四大对象创建的时候
每个创建出来的对象不是直接返回的,而是通过 inte ...
Spring IoC 循环依赖问题
Spring IoC 循环依赖问题什么是循环依赖循环依赖其实就是循环引用,也就是两个或者两个以上的 Bean 互相持有对方,最终形成闭环。比如 A 依赖于 B,B 依赖于 C,C 又依赖于 A。
循环调用其实就是一个死循环,除非有终结条件。
Spring 中循环依赖场景有:
构造器的循环依赖(构造器注入)
Field 属性的循环依赖(set注入)
其中,构造器的循环依赖问题无法解决,只能拋出 BeanCurrentlyInCreationException 异常,在解决属性循环依赖时,spring 采用的是提前暴露对象的方法。
循环依赖处理机制
单例 bean 构造器参数循环依赖(无法解决)
prototype 原型 bean 循环依赖(无法解决)
对于原型 bean 的初始化过程中不论是通过构造器参数循环依赖还是通过 setXxx 方法产生循环依赖,Spring 都会直接报错处理。
Spring 不支持原型 bean 的循环依赖进入 AbstractBeanFactory#doGetBean 方法:
在获取 bean 之前如果这个原型 bean 正在被创建则直接抛出异常。原型 ...
Bean 创建流程
调用栈
通过之前的关键时机分析,知道 Bean 创建子流程入口在 AbstractApplicationContext#refresh() 方法的 finishBeanFactoryInitialization(beanFactory) 处。
进入 finishBeanFactoryInitialization。
继续进入 DefaultListableBeanFactory 类的 preInstantiateSingletons 方法,我们找到下面部分的代码,看到工厂 Bean 或者普通 Bean,最终都是通过 getBean 的方法获取实例。
继续跟踪下去,我们进入到了 AbstractBeanFactory 类的 doGetBean 方法,这个方法中的代码很多,直接找到核心部分。
接着进入到 AbstractAutowireCapableBeanFactory 类的方法,找到以下代码部分。
进入 doCreateBean 方法看看,该方法我们关注两块重点区域。
创建 Bean 实例,此时尚未设置属性
给 Bean 填充属性,调用初始化方法,应用 BeanPostProcesso ...
BeanFactory 创建流程
获取 BeanFactory 流程时序图
BeanDefinition 加载解析及注册子流程该子流程涉及到如下几个关键步骤
Resource 定位:对 BeanDefinition 的资源定位过程,找到定义 JavaBean 信息的 XML文件,并将其封装成 Resource 对象。
BeanDefinition 载入:把用户定义好的 JavaBean 表示为 IoC 容器内部的数据结构,这个容器内部的数据结构就是 BeanDefinition。
注册 BeanDefinition 到 IoC 容器
过程分析
子流程入口在 org.springframework.context.support.AbstractRefreshableApplicationContext#refreshBeanFactory 方法中。
依次调用多个类的 loadBeanDefinitions 方法 ->AbstractXmlApplicationContext -> AbstractBeanDefinitionReader -> XmlBeanDefinitionReader ...