avatar
文章
78
标签
19
分类
12
首页
时间轴
标签
分类
留言板
关于
张晓风的博客
首页
时间轴
标签
分类
留言板
关于

张晓风的博客

Java程序设置为开机自启
发表于2024-07-06|开发相关| 条评论
一、Windows使用WinSW工具,下载地址:https://github.com/winsw/winsw/releases 1.1 新建一个文件夹目录,命名随意,这个文件夹下放你的jar包和下载的WinSW.exe 工具将WinSW.exe改名为 myJava-service.exe 1.2 新建一个xml配置文件1234567<service> <id>myJava</id> <name>myJava</name> <description>This service runs myJava continuous integration system.</description> <executable>java</executable> <arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.jar"</arguments></service> 保存配置文件,文件名与...
day-9-排序(上)
发表于2024-07-03|数据结构与算法学习笔记| 条评论
一、如何分析一个“排序算法”1.1 排序算法的执行效率对于排序算法执行效率的分析,一般从以下几个方面来衡量: 最好情况、最坏情况、平均情况时间复杂度 时间复杂度的系数、常数、低阶 比较次数和交换(或移动)次数 1.2 排序算法的内存消耗原地排序算法:特指空间复杂度是 O(1) 的排序算法。 1.3 排序算法的稳定性二、冒泡排序冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。 三、插入排序插入排序也包含两种操作,一种是元素的比较,一种是元素的移动。 四、选择排序选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。 五、小结要想分析、评价一个排序算法,需要从执行效率、内存消耗和稳定性三个方面来看。这三种时间复杂度为 O(n2) 的排序算法中,冒泡排序、选择排序,可能就纯粹停留在理论的层面了,学习的目的也只是为了开拓思维,实际开发...
day-8-递归
发表于2024-07-01|数据结构与算法学习笔记| 条评论
一、如何理解“递归”递归需要满足的三个条件1. 一个问题的解可以分解为几个子问题的解2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样3. 存在递归终止条件二、如何编写递归代码写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。 编写递归代码的关键是,只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。 递归代码要警惕堆栈溢出递归代码要警惕重复计算 三、小结递归是一种非常高效、简洁的编码技巧。编写递归代码的关键就是不要把自己绕进去,正确姿势是写出递推公式,找出终止条件,然后再翻译成递归代码。递归代码虽然简洁高效,但是,递归代码也有很多弊端。比如,堆栈溢出、重复计算、函数调用耗时多、空间复杂度高等,所以,在编写递归代码的时候,一定要控制好这些副作用。
day-7-队列
发表于2024-06-29|数据结构与算法学习笔记| 条评论
一、如何理解队列队列跟栈一样,也是一种操作受限的线性表数据结构,特点是先进者先出。入队:放一个数据到队列尾部。出队:从队列头部取一个元素。 二、顺序队列和链式队列顺序队列:用数组实现的队列;链式队列:用链表实现的队列。 三、循环队列 四、阻塞队列和并发队列阻塞队列:就是在队列基础上增加了阻塞操作。简单来说,就是在队列为空的时候,从队头取数据会被阻塞。因为此时还没有数据可取,直到队列中有了数据才能返回;如果队列已经满了,那么插入数据的操作就会被阻塞,直到队列中有空闲位置后再插入数据,然后再返回。 并发队列:线程安全的队列。 五、线程池没有空闲线程时,新的任务请求线程资源时,线程池该如何处理?各种处理策略又是如何实现的呢?我们一般有两种处理策略。第一种是非阻塞的处理方式,直接拒绝任务请求;另一种是阻塞的处理方式,将请求排队,等到有空闲线程时,取出排队的请求继续处理。 基于链表的实现方式,可以实现一个支持无限排队的无界队列(unbounded queue),但是可能会导致过多的请求排队等待,请求处理的响应时间过长。所以,针对响应时间比较敏感的系统,基于链表实现的无限排队的线程池是不合适...
使用docker-compose 部署MySQL
发表于2024-06-22|工具| 条评论
一、拉取MySQL镜像我这里使用的是MySQL8.0.18,可以自行选择需要的版本。 1docker pull mysql:8.0.18 二、创建挂载目录123mkdir -p /home/docker/mysql8/logmkdir -p /home/docker/mysql8/datamkdir -p /home/docker/mysql8/conf.d 三、添加配置文件my.cnf这里需要给MySQL做点自定义的配置,比如时区字符编码等。 1vi /home/docker/mysql8/conf.d/my.cnf 123456789101112131415161718192021222324252627282930313233343536373839404142434445###### [client]配置模块 ######[client]default-character-set=utf8mb4socket=/var/lib/mysql/mysql.sock###### [mysql]配置模块 ######[mysql]# 设置MySQL客户端默认字符集default-...
Docker更换镜像源
发表于2024-06-22|工具| 条评论
一、问题在学习Docker的时候遇到pull失败的情况 二、解决方法12345678910sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
day-6-栈
发表于2024-06-20|数据结构与算法学习笔记| 条评论
一、如何理解“栈”栈是一种“操作受限”的线性表,后进者先出,先进者后出。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时我们就应该首选“栈”这种数据结构。 二、如何实现一个“栈”栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,叫作顺序栈;用链表实现的栈,叫作链式栈。
day-5-链表(下)
发表于2024-06-17|数据结构与算法学习笔记| 条评论
一、几个写链表代码的技巧技巧一:理解指针或引用的含义将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。 技巧二:警惕指针丢失和内存泄漏插入结点时,一定要注意操作的顺序。删除链表结点时,也一定要记得手动释放内存空间。 技巧三:利用哨兵简化实现难度哨兵,解决的是国家之间的边界问题。同理,这里说的哨兵也是解决“边界问题”的,不直接参与业务逻辑。 技巧四:重点留意边界条件处理检查链表代码的几个边界条件: 如果链表为空时,代码是否能正常工作? 如果链表只包含一个结点时,代码是否能正常工作? 如果链表只包含两个结点时,代码是否能正常工作? 代码逻辑在处理头结点和尾结点的时候,是否能正常工作? 技巧五:举例画图,辅助思考技巧六:多写多练,没有捷径5个常见的链表操作: 单链表反转 链表中环的检测 两个有序的链表合并 删除链表倒数第 n 个结点 求链表的中间结点
day-4-链表(上)
发表于2024-06-16|数据结构与算法学习笔记| 条评论
一、链表结构链表不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。 1.1 单链表链表的插入和删除操作,对应的时间复杂度是O(1)。但链表随机访问,需要 O(n) 的时间复杂度。因为链表中的数据并非连续存储的,所以无法像数组那样,根据首地址和下标,通过寻址公式就能直接计算出对应的内存地址,而是需要根据指针一个结点一个结点地依次遍历,直到找到相应的结点。 1.2 循环链表循环链表是一种特殊的单链表。和单链表相比,循环链表的优点是从链尾到链头比较方便。当要处理的数据具有环型结构特点时,就特别适合采用循环链表。 1.3 双向链表双向链表,支持两个方向,每个结点不止有一个后继指针 next 指向后面的结点,还有一个前驱指针 prev 指向前面的结点。双向链表需要额外的两个空间来存储后继结点和前驱结点的地址。所以,如果存储同样多的数据,双向链表要比单链表占用更多的内存空间。虽然两个指针比较浪费存储空间,但可以支持双向遍历,这样也带来了双向链表操作的灵活性。 从结构上来看,双向链表可以支持 O(1) 时间复杂度的情况下找到前驱结点,正是这样的特点,也使双向链表在某些情况...
day-3-数组
发表于2024-06-15|数据结构与算法学习笔记| 条评论
一、什么是数组 数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 这个定义里有几个关键词。 1.1 线性表线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。 概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。 1.2 连续的内存空间和相同类型的数据 很多时候我们并不是要去死记硬背某个数据结构或者算法,而是要学习它背后的思想和处理技巧,这些东西才是有价值的。 二、警惕数组的访问越界问题访问数组的本质就是访问一段连续内存,只要数组通过偏移计算得到的内存地址是可用的,那么程序可能不会报任何错误。 三、容器能否完全替代数组?使用数组更适合的场景: Java ArrayList 无法存储基本类型,如果特别关注性能,或者希望使用基本类型,就可以选用数组。 如果数据大小事先已知,并且对数据的操作非常简单,用不到 ArrayList 提供的大部分方法,也可以直接使用数组。 当要表示多维数组时,用数组往往会更加直观。 对于业务开发...
1…456…8
avatar
张晓风
文章
78
标签
19
分类
12
Follow Me
最新文章
使用zlmediakit录像2025-06-26
DTM事务学习笔记2025-04-23
计算机网络-第一章笔记2025-03-02
单线复用--家里宽带2025-03-01
计算机网络 - B站学习计划2025-02-12
分类
  • MySQL学习笔记14
  • Redis学习笔记3
  • java3
  • nginx4
  • spring13
  • 工具6
  • 建站相关2
  • 开发相关8
标签
数据结构与算法 websocket nginx spring jira network 软考 docker linux 面试 ldap logback MySQL redis postman git java springboot hexo
归档
  • 六月 2025 1
  • 四月 2025 1
  • 三月 2025 2
  • 二月 2025 1
  • 一月 2025 4
  • 十一月 2024 1
  • 十月 2024 1
  • 九月 2024 5
网站信息
文章数目 :
78
本站总字数 :
53.6k
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2024 - 2025 By 张晓风
苏ICP备2023046043号