- 博客(27)
- 收藏
- 关注
原创 Linux查看日志的几个命令
1、cat// 从前到后显示整个文件cat filename// 从后向前显示整个文件tac filename2、tail// 查看日志末尾10行tail -n 10 filename// 循环实时查看最后10行tail -fn 10 filename// 查询10行之后的所有日志tail -n +10 filename// 结合关键字查询tail -n 10 filename | grep "keyword"3、head// 查询日志前10行head -n 10
2022-03-19 21:41:16 2485
原创 HashMap关键源码解析
一、HashMap介绍HashMap是我们常用的集合框架之一,底层实现为数组+链表+红黑树,元素无序,即存放的顺序不一定按照添加的顺序。不支持同步,即线程不安全。二、HashMap的关键参数想看明白HashMap是如何实现的,首先要认识它的这些关键变量,这些变量也蕴含了很多智慧。我在注释中写了简单的解释。 /** * 默认的初始容量,必须是2的幂次方 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
2022-03-07 18:27:44 432
原创 MySQL的事务和锁机制
首先,我们从事务的四大特性(ACID)出发:原子性:事务是最小的执行单位,不允许分割一致性:执行事务前后,数据库状态一致隔离性:事务之间是相互独立的,一个事务不能被其它事务干扰持久性:事务提交之后对数据库的修改是永久的,即使发生崩溃也能恢复事务具有这样的特性,但是当多个事务并发执行时,结果可能与我们预期的不同,可能会出现以下几类问题:丢失修改:事务A的操作被事务B覆盖脏读:事务A读取了事务B还未提交的数据,可能根据这个数据做出错误的操作不可重复读:一个事务内先后两次查询到的数据不一致
2022-03-01 13:04:54 966
原创 Java实现选择排序
/** * 选择排序 * 时间复杂度 O(n²) * */ public static void SelectionSort(int[] nums) { //最小元素的下标 for (int i = 0; i < nums.length; i++) { int min = i; for (int j = i + 1; j < nums.length; j++) {
2022-02-21 22:31:27 191
原创 Java实现冒泡排序
1、基础版本/** * 冒泡排序 * 时间复杂度 O(n²) * */ public static void BubbleSort(int[] nums) { for (int i = 0; i < nums.length; i++) { for (int j = nums.length - 1; j > i; j--) { count++;
2022-02-21 22:30:37 237
原创 Java实现堆排序
/** * 堆排序 * * @param nums */ public static void heapSort(int[] nums){ for(int i=nums.length/2-1;i>=0;i--){ headAdjust(nums,i,nums.length-1); } for(int i=nums.length-1;i>0;i--){
2022-02-21 22:28:00 295
原创 Java实现快速排序
/** * 快速排序 * * @param nums * @param left * @param right */ public static void quickSort(int[] nums,int left, int right){ if(left>=right){ return; } int l = left; int r = right
2022-02-17 21:37:15 359
原创 JDK11中ArrayList扩容机制源码分析
首先简单的总结一下ArrayList扩容机制:使用无参构造器,初始容量为0,第一次添加扩容为10,再次扩容为1.5倍(向下取整)使用指定大小的构造器,初始容量为指定大小,再次扩容为1.5倍(向下取整)为什么初始容量为0时第一次扩容为10?为什么扩容是1.5倍?下面通过一个例子,结合源码分析扩容原理和过程。创建一个arraylist对象,添加一个元素ArrayList arrayList = new ArrayList();arrayList.add("obj1");下面打开J
2022-01-23 17:55:40 853
原创 JVM垃圾回收器有哪些?各自特点是什么?
Serial/Serial Old:新生代采用复制算法,老年代采用标记-整理算法单线程,进行垃圾收集时必须暂停其它所有工作线程,直到收集结束适合运行在客户端模式下的虚拟机,Serial是客户端模式下默认新生代收集器ParNew:是Serial的多线程并行版本只能和CMS互相配合使用Parallel Scavenge/Parallel Old:新生代采用标记-复制,老年代采用标记-整理CMS:基于标记-清除算法运行过程:初始标记:标记Gc Roots能
2022-01-21 11:05:53 340
原创 流水线指令重排序,指令级并行
假设有如下两条语句:a = b + c;d = e * f;会被转换成多条汇编指令,例如以下汇编指令实现了计算两个数相加、两个数相乘的功能:ld r5,B(r0)ld r4,A(r0)dadd r3,r4,r5sd r3,C(r0)ld r6,D(r0)ld r7,E(r0)dmul r2,r6,r7sd r2,F(r0)halt这些指令依次取出对应寄存器的数据,然后进行相应的运算,再将结果写入存放结果的寄存器,指令此时是有顺序的,其顺序也符合我们在写高级程序语言时的语句顺序。
2022-01-11 11:39:25 493
原创 HTTP报文格式
1、HTTP请求报文HTTP请求报文第一行是请求行,其后继的行叫做首部行。每行由一个回车和换行符结束,最后一行再附加一个回车换行符。一个请求报文至少为一行。GET /main/page.html HTTP/1.1Host: www.wtongxue.netConnection: keep-aliveUser-Agent: Mozilla/5.0Accept-language:zh-CN请求行:由方法字段、URL字段和HTTP版本字段组成,其中,方法字段包括:GET、POST、HEAD、PU
2022-01-10 12:31:25 1952
原创 OpenGauss中的VARCAHR(n)与MySQL的区别
今天在进行两个数据库的对比实验中发现这个问题数据库使用UTF-8编码,在user表中有字段username,类型为VARCAHR(10),在MySQL中存储一条username为”商城用户“的数据,没有报错,但是在OpenGauss中报错:ERROR: value too long for type character varying(10)CONTEXT: referenced column: username插入值的长度太长了,于是考虑OpenGauss中VARCAHR(n)中n表示最大存
2021-12-31 17:44:22 1620 1
原创 Linux部署jar无法加载logback.xml解决方法
在Windows开发时候的配置:logging: config: src/main/resources/logback.xml level: echo.interceptor: infoLinux服务器部署时修改为:logging: level: echo.interceptor: info config: classpath:logback.xml
2021-12-17 22:01:37 1058
原创 A*算法解决15数码问题详细解析(附完整代码)
一、15数码问题15数码问题:一个4*4的16宫格棋盘上,摆放有15个将牌,每一个都刻有1-15中的某一个数码。棋盘中留有一个空格,允许其周围的某一个将牌向空格移动,这样通过移动将牌就可以不断改变将牌的布局。所要求解的问题:是给定一种初始布局(初始状态)和一个目标布局(目标状态),问如何移动数码实现从初始状态到目标状态的转变。二、A*算法2.1 什么是A*算法?A*算法,A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。A*算法是一种启发式搜索
2021-11-29 18:19:42 5455
转载 解决MySQL删除数据后id不连续方法
id从1开始自增SET @i=1;UPDATE `tablename` SET `id`=(@i:=@i+1);ALTER TABLE `tablename` AUTO_INCREMENT=1;
2021-10-20 21:48:00 1387
原创 springboot修改前端页面图片,资源目录下图片已经更改,但前端不显示新图片解决方法
1.问题描述前端页面上传图片,后端接收后保存,并修改前端页面引用的图片资源,虽然资源目录下的图片已经成功修改,但是前端显示的还是旧的页面,需要服务器重启才能刷新。2.原因分析1.缓存原因可能是由于浏览器缓存了图片资源,再次刷新时不会重新请求图片。2.其它如果解决了缓存问题后依旧不能解决,可能是服务器的保护措施导致的,服务器不能对外部暴露真实的资源路径。3.解决方法1.解决缓存问题在每次重新进入页面时给图片的url后添加一个随机数,让浏览器重新进行请求。 <script>
2021-10-19 17:17:56 4444
原创 MyBatis读取某一列数据返回null解决方法(配置带下划线命名的字段自动转换驼峰命名)
//实体类中的变量名private String userDesc;//列的名称user_desc问题:该列有数据,但读取一直为null原因:MyBatis没有配置带下划线命名的字段自动转换驼峰命名解决方法://在application.yam中配置mybatis: configuration: map-underscore-to-camel-case: true...
2021-10-18 15:44:58 297
原创 JavaFx中@FXML注入对象为空解决
1.问题描述:在一个JavaFx项目中需要动态修改一个Text的数据@FXML private Text dateText = new Text();调用自定义的更新方法后界面没有改变,但是打印getText()发现已经是修改后的值…于是又设置了一个按钮,通过在点击按钮的响应方法中修改Text的值,竟然成功了。//正常的修改方法public void updateDateText() { Platform.runLater(new Runnable() {
2021-09-13 18:43:28 1902
原创 Java定时任务在junit测试中失效
在Junit测试类中测试ScheduledExecutorService定时任务时程序会直接正常结束,在main函数中却可以正常运行。原因是当开启新线程后,junit在主线程运行后会关闭,子线程也就无法运行了。定时任务代码: public static void eventControl(){ Runnable runnable = new Runnable() { @Override public void run() {
2021-09-10 21:44:53 983
原创 递归计算二叉树结点数目
一、要求示例:编写一个函数,一棵二叉树为输入,返回二叉树的结点数目。二、代码 int getNodeNum(BinaryTree* tree){ BinaryTreeNode* pointer = tree->root; //根结点数 int num=0; //左子数结点数 int numL=0; //右子树结点数 int numR=0; if (tree-&g
2021-04-14 18:29:54 4259
原创 读取字符串构造二叉链表(C++)
一、要求输入一个字符串,字符串中,二叉树中每个节点用一个字符表示(a~z或A-Z),空节点用#表示。构造一个二叉链表。如:AB#D##CE#F###二、代码1.结点类定义class BinaryTreeNode{ friend class BinaryTree;private: char info; BinaryTreeNode* lChild,*rChild;};2.二叉链表类定义class BinaryTree {private: Binary
2021-04-07 18:36:59 575 1
原创 C++循环队列解决约瑟夫问题
一、约瑟夫问题题目:设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,如此重复,直到所有的人全部出列为止。Josephus问题是:对于任意给定的n,s,m,求出按出列次序得到的n个人员的序列。二、题解1.队列类定义:class Queue{private: int mSize; int front; int rear; int* queue; public: Queue(in
2021-04-07 15:39:04 2164 1
原创 在BST(二叉搜索树)中查找介于给定范围之内的值
一、题目要求要求:编写一个递归函数printRange(),传入一个BST、一个较小的值和一个较大的值,按照顺序打印出介于两个值之间的所有结点。函数printRange()应尽可能少地访问BST的结点。二、题解代码如下:void PrintRange(BinarySearchTree* bst,int minData,int maxData) { //中序 保证按大小顺序打印范围内的数 while (bst->root) { Binary
2021-04-07 15:12:35 1149
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人