自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 maven 学习笔记:20241024

所以执行 mvn clean 这个生命周期其实是执行的生命周期背后的clean插件,而 mvn clean:clean 也可以实现编译文件全清楚就是这个原因,第一个clean是插件的前缀,而冒号之后的是插件的目标,一个插件可能有多个目标。存放依赖包的地方,通过maven坐标(生成项目时定义的groupId,artifactId,version等)来寻找相应的依赖包,分为本地仓库和远程仓库,项目的依赖包maven会首先在本地仓库寻找,如果本地仓库有就直接使用,没有就到远程仓库寻找,并下载到本地仓库使用。

2024-10-26 07:37:05 706

原创 HashMap源码还是相对来说好理解一点

如果数组对应元素不为空,拿该元素与新元素比较 如果hash相同,并且地址值相同,或者 hash值相同并且equal()为true,就替换元素,这里可以看到先判断地址值,这个效率应该还是高一些。原来这个方法是有返回值null,put方法调用内部的putVal()方法 该方法有5个参数,除了key,value,还有个 hash(key)的参数,这个地方应该就是取hash值了。3,get()还是那几个判断条件,hash值相同,地址值相同,或者equals()为true,就认为是同一个元素,找到就返回。

2024-08-14 20:16:39 319

原创 JDK安装及自带工具使用

5,配置环境变量 vi /etc/profile JAVA_HOME=xx/jdk/bin 如有 export PATH 字样则在之前添加 PATH=$JAVA_HOME:$PATH,若没有则是 export PATH=$JAVA_HOME:$PATH。/usr 日常使用的程序和文件存放目录,比如 /usr/bin /usr/sbin /usr/lib /usr/tmp 等目录作用等同于系统的响应目录,是自己本地需要的程序和文件。/proc 虚拟目录,是系统内存的映射,可以直接访问这个目录获取系统信息。

2024-08-11 06:00:57 448

原创 java基础I/O

3.4 字符流通常一次会读取多个字符,比如一行字符,CopyLine.java 就是按行读取写入的例子,一串带有行终止符的字符称为一行。用了缓冲流呢,每次读取8192个字节,回来复制一下,write(int i)复制时呢就是一个字节一个字节复制的,write(byte[8192],0,len)就是每次复制8192个字节,当然最快。IO流代表的是一个数据输入的源或者输出的目标地址,可以是硬盘,内存,网络或者什么其他的电子设备,而IO流的类型也很多比如最简单的字节或者字符,或者其他更高级的对象。

2024-08-07 21:01:31 1521

原创 Java基础总结

这些问题的出现都跟CPU的设计有关系,CPU是计算机的运算核心所有的操作或者说指令都是在CPU里面运行的,而且CPU的运行效率超级高,比内存的运行速率还要高出几个数量级,做开发的肯定都知道内存比硬盘快几个数量级,会使用内存缓存来提高运行速率,但是使用了内存缓存就会出现数据不一致的问题,我们会采取各种措施来保证数据的一致性,这里不展开讨论缓存的问题。还是说回CPU,既然CPU的运行速率比内存快的多,设计者也设计了CPU的高速缓存来充分利用CPU的性能提高程序的运行效率。当然还有其他原则,这里不涉及。

2024-08-03 15:25:31 421

原创 周六算法加练

给一个正整数列 nums,一个跳数 jump,及幸存数量 left。运算过程为:从索引为0的位置开始向后跳,中间跳过 J 个数字,命中索引为J+1的数字,该数被敲出,并从该点起跳,以此类推,直到幸存left个数为止。说明:从1(索引为0)开始起跳,中间跳过 4 个数字,因此依次删除 6,2,8,5,4,7。剩余 1,3,9,返回和为13。* nums: 正整数数列,长度范围 [1,10000]输入:[1,2,3,4,5,6,7,8,9],4,3。* jump: 跳数,范围 [1,10000]

2024-07-20 11:57:33 286

原创 今天刷算法题了吗?

lights[rowStart][colStart] 与 lights[rowEnd][colEnd] 两个街口之间的最短通行时间。不可超出 n * m 个街口,不可跳跃,但边线也是道路(即:lights[0][0] -> lights[0][1] 是有效路径)现给出 n * m 个街口的交通灯周期,以及起止街口的坐标,计算车辆经过两个街口的最短时间。街道的街口(交叉点)有交通灯,灯的周期 T(=lights[row][col])各不相同;之后 n 行输入 lights矩阵,矩阵每行m个整数,以空格分隔。

2024-07-20 09:57:47 1156

原创 【无标题】

3,在左右子树的中序数组找出root元素,其中左子树的root元素是第一步root的左节点,右子树的root元素是右节点一次递归。请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。输入2行整数,第1行表示二叉树的中序遍历,第2行表示二叉树的前序遍历,以空格分割。根据三个遍历中的两个可以确定一颗二叉树。前序遍历输出的顺序是父节点,左节点,右节点。中序遍历输出的顺序是左节点,右节点,父节点。后序遍历输出的顺序是右节点,左节点,父节点。4,注意元素的值是左右子树的和。

2024-07-19 22:29:33 302

原创 深度/广度优先搜索

【代码】深度/广度优先搜索。

2024-07-18 21:48:46 279

原创 深度/广度优先搜索

大体的逻辑就是先把第一个顶点元素入队列,然后搜索这个顶点所有的节点入队之后第一个定点出队,在队列中再取出另外的元素继续这个过程直到队列元素为空,利用的队列先进先出的特性。一种是链表,比如还是100个顶点,还是长度100的数组记录顶点,然后维护一个长度100的链表桶,就跟java里面HashMap的存储结构一样,每个链表记录与该顶点相连的其他顶点。代码说明,首先看Pos对象注意其visit属性,这个是必须要维护的,网上你凡是能搜索到的免费答案,几乎都是错的,付费的咱不知道。图里面的每一个元素叫做顶点。

2024-07-18 21:47:26 919

原创 mysql分库分表、读写分离

这里有个问题是更新新增单标查询相对比较简单直接更新就好了,但是多表联查尤其是跨库之间的多表联查是个问题,其中之一的解决办法就是全局数据,把涉及到所有需要联查的数据在每个数据库都存放一份。主从复制的原理是 从库有一个IO线程会读取主库的二进制日志,写入自己的中继日志,然后还有一个sql线程会读取中继日志,将数据插入数据库。如果想要实现读写分离,可以在应用里面配置多个数据源,也是有技术支持的,但是同样的可以通过mycat实现读写分离。有 多种方式:根据ID取模,根据ID的范围,枚举,一致性哈希,甚至按时间分。

2024-07-14 08:38:35 183

原创 通过二进制日志实现主(master)从(slave)备份

直接修改/etc/my.cnf配置文件,所有的主从服务器都要配置,唯一即可,注意修改了配置文件需要重启mysqld服务。根据文档说是少了一个配置,SOURCE_PUBLIC_KEY_PATH,这个公钥默认跟二进制的在一个目录配置一下文件名就可以了。这里是两个干净的数据库 就直接跳过了。这里事情其实还是有的,为简化记就不一一记录了,有需要可以参考mysql文档,虽然它的文档写的几乎算是最差的了。这个的限制还是有点多的,不是很灵活,应该是少了一些配置,这个之后再研究,总之这样子一个简单的主从备份就完成了,

2024-07-13 18:30:47 359

原创 Mysql 运维之安装

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent 永久开放3306。sudo firewall-cmd --zone=public --remove-port=3306/tcp --permanent 可以移除。这个/var/log/mysqld.log 就是mysql默认的日志文件,mysql有问题可以查看这个文件是否有需要的信息。3),查询日志:默认不开启,记录所有的sql语句,开启这个的意义也不大,还占空间。

2024-07-13 10:31:46 296

原创 Mysql 优化总结

4,增加内存分配,专属服务器建议80%的内存都要分配给内存缓冲区 buffer pool,提高mysql响应效率。c1,插入数据时选择顺序插入,主键乱序插入会发生页分裂现象,页合并现象。4,DCL 权限控制语句,谁能够访问数据库,能访问那些数据。DQL语句优化,最主要的就是设计合理的索引。

2024-07-11 21:34:00 390

原创 mysql 锁机制和事务

非阻塞读又称之为快照读,与快照读相对应的是当前读,当前读是串行化读取,只有在加锁的情况下才会执行当前读,否则都是快照读,快照读读取的不一定是最新数据,而是该数据行所有undo log版本链中的某一条数据,至于是哪一份就是MVCC控制的,MVCC相对较复杂。但是读未提交的数据在业务逻辑中用处不大,而串行化确实安全但是并发性又不好,不允许两个事务同时写,但是一个事务写另外的事务读总是可以的吧,为了保证读写没有冲突,mysql设计了 MVCC,称之为多版本并发控制,这个机制保证了mysql的非阻塞读特性。

2024-07-11 21:33:19 353

原创 三句话能不能说清楚classloader?

这三个加载器是有父子关系的,注意不是java里面的继承,而是聚合,但是聚合的属性就叫parent,AppClassLoader的parent是PlatformClassLoader,PlatformClassLoader的parent是BootClassLoader,这个听起来很高大上的名字很简单,就是如果对一个加载器发起一个加载文件的请求它不会直接加载,而是委托它的parent属性对应的加载器去加载,直到BootClassLoader这个最顶层的加载器,如果父加载器找不到再依次回来。

2024-07-10 20:58:58 170

原创 信息加密算法整理总结

肯定有,那就是需要还原消息的场景,比如我要加密参数然后传输,之后还需要把参数还原出来,单向加密就没啥用处了,还原不出来。c,文件完整性校验,下载文件是还有个散列值及其算法,下载下来之后可以通过相同的算法加密该文件,与下载下来的散列值比较,不相同则文件被伪造。b,接口验签,使用共享密钥(保密),签名 以共享密钥+业务参数,进行散列运算,接受者以同样的方式加密 比较是否一致。5,SHA-3:最新的安全散列算法,设计的目的是替代SHA-2,为未来的安全威胁做好准备。两个密钥,公钥加密,私钥解密。

2024-07-08 21:28:45 461

原创 mysql索引总结

逻辑存储结构:idb文件就是一个表空间文件,接下来是段,再就是区(1M),最后是页 (16K),然后是行(row),其中物理层面的最小存储单元就是页 page,一页的大小是 16K 这个很关键,16K大约可以存储1000个左右的长度为8字节的索引。也就是是一页最多有1000个左右的指针,对应另外的1000个page,每个page16K。如果是三层树的话,第二层只存储索引,每页存储 1170个索引,每页索引指针又对应 18724的数据,就是21907748条数据,所以千万级别的数据走索引的效率还是能保证的。

2024-07-04 07:17:55 564

原创 雪花算法面试题总结

答:这个算法是分布式系统中生成唯一ID的算法,效率非常高,一般有64位二进制组成,第一位固定是0接下来的四十一位是时间戳,精确到毫秒,所以非常依赖机器的时间,然后10位是机器ID,支持1024个机器的编号;于是就有了B数,B树有个名称叫做多路平衡查找树,听名字就比二叉树药快,B树的特点是一个节点存放不只一个元素,而且一个父节点有多个子节点,还有一些其他特性,那么它每次可以取多个数据加载到内存与现有的ID比较,命中的概率大大提升。答:首先说mysql的索引结构,他是是一个B+树结构。要讲明白什么是B+树?

2024-06-26 08:11:08 268

原创 动态规划补充二

像这个求最大连续数的这个就比较简单,仅需要以为数组,记录当前位置连续数的长度,之后如果是1就加1,如果不是1就置为0。这个动态规划的使用场景多的很,之前说了首先是初始状态的查找分辨,然后是动态转移方程,这个动态转移方程的精髓是什么?从简单的开始计算,然后记录结果(状态),并将结果(状态)用于之后的计算。01背包问题,需要二维数组,有两个纬度 容量和钱数 记录的是最大价值。购物单一样,需要二维数组,有两个纬度 个数和钱数 记录的是最大满意度。放苹果的问题 也是两个纬度 苹果数和盘子数 记录的是有几种放法。

2024-06-24 22:13:33 152

原创 动态规划算法补充

而这个放苹果的问题,不是比较大小,而是跟斐波那契数列一样是状态的总和,斐波那契数列的状态转移方程很明确,就是n = (n-1) + (n-2),而这个放苹果的状态转移方程有个弯弯绕。如果理解不出来这个总和的含义,是做不出来的。思路就是,还是得看前面的状态,应该描述成为少一个盘子的状态加上另外一种状态,这个方向就对了,只有方向对了,代码调试才有意义,否则,代码会教会你什么叫做南辕北辙!这里要描述的就是 每增加一个盘子,要么空着,要么不空着,空着比较好理解,放法就是上一步的状态dp[i][j-1]。

2024-06-23 21:44:00 184

原创 动态规划怎么理解

有N件物品和一个容量为V的背包。第i件物品的体积是v[i],价值是w[i]。网上资料一大堆,没找到一个能说清楚的。结合不清不楚的描述,我研究一番,来尝试解释一下。写了一个复杂一些的,不贴一下,显得没有说服力。还有挺多变化的,遇到再整理吧。代码没有编译,不保证运行,欢迎批评指正。01背包的特点就是:每种物品仅有一件,可以选择放或不放。这个一维数组就放不下了,有两个维度,几件物品,多少容量?斐波那契数列:1,1,2,3,5,8,13。首先是数据的初始化,然后是状态转移方程。那么这个动态规划的基本思路是什么?

2024-06-23 02:54:27 155

原创 ElasticSearch 学习笔记

于是在网上找视频教程看一下,看了一圈下来,基本都是照着PPT在念,看了有三四个,没有一个能把全文检索,倒排索引讲明白的,一头雾水,又是安装又是集群的,不适合工作在一线的程序员快速入门,还是自己到官网学习,笔记在此,方便查阅。这个mapping映射除了属性的类型,接下来就是属性上面的配置。大爷的,坑还是有,上面的我昨天明明跑的好好的但是今天那个Kibana就TM不行了,好,不行就不行,刚好使用curl来练练手,本身ES对外的接口就是基于HTTP的,所以任何能发送http请求的客户端都可以用来测试。

2024-06-21 21:56:34 1555

原创 redis 执行lua脚本

'" 就是lua脚本,后面的0就是没有key 也没有参数,可以看到redis返回的就是脚本的返回值。redis EVAL命令可以执行lua脚本,redis保证脚本执行的原子性,脚本由嵌入式执行引擎(Lua 5.1解释器)执行。解释,定义一个变量value如果获取到了keys[1]的值,就是删除这个值并返回OK否则返回nil,还可以写成。可以看到使用script load 缓存一个脚本,返回一个ID,之后可以通过evalsha ID 来调用它。可以看到这个lua脚本可以使用{}返回多个值。

2024-06-20 21:23:25 614

原创 系统限流算法

这个原理说起来也比较简单,凡是访问系统的用户都需要一个令牌,这个令牌存放在一个固定的地方,系统会自动按照一定的速率往里面发放令牌,比如每秒钟100个。以上是对guava令牌桶算法的整理,但是还没有结束,这个只支持单节点系统的限流,如果是集群分布式的话,就失去全局效果了。经过测试 该算法会缓存速率两倍左右的令牌,即 每秒钟生成100个令牌的话,最多可以缓存200个左右的令牌。对于系统限流可以限制整个系统的流量,利用AOP实现也比较简单。系统限流主要有两张方式 一个就是令牌桶算法,另一个就是滑动窗口,

2024-06-19 20:36:43 207

原创 Rabbitmq(2)

我在开发过程中刚好遇到过这么一个场景,就是我的下游系统开放接口接受上系统的数据,数据处理逻辑较为复杂,响应时间超过500ms,平时没啥流量,一道月初月末年初年末有大量请求过来,导致数据会丢失,系统运行也缓慢。由于我的开发环境机器是6核,16G,i7处理器,增加tomcat线程数到500个,系统吞吐量有明显提升。这时MQ就派上用场了,声明一个较长的可以持久化的队列,比如我系统的业务数据最多就50000条,那就声明一个60000的队列,然后接到请求后直接把参数往mq里面放,之后一个个慢慢消费。

2024-06-18 21:11:04 547

原创 rabbitMQ(1)

还有一些属性,其中最重要的属性:1,name 靠这个跟发布者和消费者绑定,2,durability 是否持久化,注意这里的持久化是只这个交换机在消息代理重启之后是否还存在,而不是消息的持久化,3,Auto-delete 这里的自动删除也是 这个交换机在没有队列绑定之后的自动删除而不是消息的自动删除。这个Exchange算是里面最重要的概念之一,我们只需要知道,一个消息代理可以有多个交换机,但是发布者只能绑定一个,而且只能把消息发布到这个交换机里面,然后这个交换机并不存储消息,而是把消息直接推送到队列里面。

2024-06-18 20:51:42 825

原创 使用libreOffice实现文档转换

当然 坑 肯定是有的,我掉里面一个就是你看他github上的文档少了一步: .install() ,虽然写文档的那货在stackoverflow上态度端正的回复了这个问题, 但是你大爷的你倒是改掉呀,现在(2024-06)还错着呢。就这几行代码,转出来的文件格式字体尤其是windows上简直完美,linux系统应该是需要安装中文字体的,这个根据自己的实际安装即可。看了一圈文档下来,这个东西看起来是openOffice的延续,完全开源,放心使用,个人使用下来是比openOffice好用。引入依赖,直接注入。

2024-06-17 20:35:33 1153 1

原创 Activity 流程管理使用总结

至于系统内部整合activity建议还是直接使用它提供的API自己编写代码,虽然有个activiti-rest的jar包可以使用,但是不够灵活,有一定的学习成本,既然都得学习为什么不学习一个通用的API呢。这个APP最关键作用的是流程图的设计和部署,虽然还有很多方式可以设计,但是都没有这个好用,至于审批页面得是业务系统的事情。// 访问一个get类型的查询接口:http://localhost:8080/activiti-rest/service/repository/deployments。

2024-06-16 08:53:50 266

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除