面试题
自己整理的一些常见面试题和知识点 Day1:Java 集合目标: 1234Collection├── ArrayList├── LinkedList└── HashMap 1. 为什么 ArrayList 查询快,而 LinkedList 查询慢?ArrayList 底层是连续内存空间,可以通过数组下标直接计算出元素地址,因此随机访问时间复杂度是 O(1)。LinkedList 底层是双向链表,每个节点只知道前后节点的位置,因此访问第 n 个元素需要从头或尾开始遍历,时间复杂度是 O(n)。 2. 为什么 LinkedList 插入快,但项目中却很少使用?实际场景中基本都是查询和遍历,例如分页查询,获取数组中第几个元素什么的。链表虽然插入和删除快,但是也要先查找遍历到指定元素才可以。而且从中间插入的需求实际业务中很少遇到。我基本没有用过linkedList 2.1 那 LinkedList 真有比 ArrayList 快的时候吗?有。如果已经拿到了链表节点,例如 ListIterator 已经定位到了当前位置,或者频繁在队列头尾插入删除,那么 LinkedList 确实比 Ar...
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-ente...
可移动硬盘内的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 wi...
流量控制与可靠传输
本文在数据链路层下进行讨论。对于链路层传输的数据被称为帧。 流量控制由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接受能力的现象,如果此时不对发送方的发送速率进行限制,那么接收方可能会被后面不断发送来的数据“淹没”,造成帧的丢失而出错。流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收能力。 可靠传输机制数据链路层的可靠传输机制通常使用确认和超时重传两种机制完成。确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收(有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认)。超时重传是指发送方在发送某个数据帧后就开启一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,就重新发送该数据帧,直到发送成功为止。自动重传请求(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 插件原理在四大对象创建的时候 每个创建出来的对象不是直接返回的,而是通过 i...
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 填充属性,调用初始化方法,应用 BeanPostProce...










