自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1090)
  • 资源 (1)
  • 收藏
  • 关注

转载 计划任务线程池ScheduledThreadPoolExecutor原理

根据对象、执行时间等入参,创建对象,将一个普通的对象包装计划任务调用方法,把这个包装好的任务放入队列中,如果有需要的话,为线程池创建新的工作线程在提交任务中,线程池做的事情十分简单,无非是创建任务、放入队列提交任务以后,线程池中存活的工作线程worker就可以从工作队列workQueue// 计划线程池ScheduledThreadPoolExecutor 是 线程池ThreadPoolExecutor 的子类// ...= null) {// ...task.run();// ...

2024-07-04 14:55:52 25

转载 分布式事务详解【分布式事务的几种解决方案】彻底搞懂分布式事务

什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。明白上述例子,再来看事务的定义:事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。

2024-07-03 14:53:25 9

转载 浅谈几种常用负载均衡架构

在实际应用中,在 Web 服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为 Web 服务器流量的入口,挑选最合适的一台 Web 服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的是后端的集群。实现时,一般为服务器带上权重;

2024-07-02 14:53:48 30

转载 ELK-基础系列(一)-简介

日常工作中会面临很多问题,处理问题时候。怎么解决问题?通过工作经验,迅速判断问题出在哪。通过日志系统日志:/var/log 目录下的问题的文件程序日志:代码日志(项目代码输出的日志)服务应用日志等等通过日志排除,发现问题根源解决问题如果1台或者几台服务器,我们可以通过 linux命令,tail、cat,通过grep、awk等过滤去查询定位日志查问题但是如果几十台、甚至几百台。通过这种方式肯定不现实。怎么办?一些聪明人就提出了建立一套集中式的方法,把不同来源的数据集中整合到一个地方。

2024-07-02 14:24:10 30

转载 Redis系列(三):Redis的持久化机制(RDB、AOF)

本篇博客是Redis系列的第3篇,主要讲解下Redis的2种持久化机制:RDB和AOF。。

2024-07-01 09:18:44 8

转载 MySQL锁机制详细解释

基于InnoDB对事物的支持以及MVCC多版本并发的实现,InnoDB可以选择mysqldump工具加 –single-transaction参数,在不阻塞写操作的同时做全库的逻辑备份。默认情况下写锁比读锁具有更高的优先级,即使读请求先到等待队列,写锁也会插入到读锁之前,优先执行写操作,但MyISAM也支持依据生产环境通过修改参数的设置改变读写的优先级。先取锁再访问的策略,为数据的安全提供了保证,但是加锁会产生额外的开销,增加死锁的机会,只读型事物不会产生冲突也不需要加锁。

2024-06-20 10:06:33 9

转载 MySQL数据库——锁-表级锁(表锁、元数据锁、意向锁)

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。表锁元数据锁(meta data lock,MDL)意向锁meta datalock, 元数据锁,简写MDL。MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL冲突,保证读写的正确性。

2024-06-17 09:51:32 25

转载 MySQL中 LBCC 和 MVCC 的理解,常见问题及示例

事务:事务是指逻辑上的一组sql操作,要么全部执行成功,要么全部执行失败。其是为了保证数据库中数据的完整性和一致性。ACID。A 原子性:通过 “undo log” 实现C 一致性:通过 “其他3个特性” 实现I 隔离性: 通过 “lock锁 + MVCC” 实现D 持久性:通过 “redo log” 实现MVCC 基础:概念:通过 “readview版本视图 + undo log” 来控制并发事务访问同一条记录时的行为。好处:提高数据库并发性能。用更好的方式去处理。

2024-06-13 15:01:06 12

转载 mysql日志bin log、redo log、undo log区别

在MySQL的InnoDB存储引擎中,redo log是固定大小的,采用循环写入的方式,可以保证在系统宕机的情况下,最近的一段时间内的修改都不会丢失。redo log 的设计目标是支持innodb的“事务”的特性,事务ACID特性分别是原子性、一致性、隔离性、持久性, 一致性是事务的最终追求的目标,隔离性、原子性、持久性是达成一致性目标的手段,根据的文章我们已经知道隔离性是通过锁机制来实现的。而redo log主要用于物理恢复,记录的是InnoDB存储引擎的物理操作,以确保数据的一致性和持久性。

2024-06-12 17:05:53 19

转载 MySQL MVCC&LBCC

而在我这个事务之后新增的数据,我是查不到的。第一种,既然要保证前后两次读取数据一致,那么我读取数据的时候,锁定我要操作的数据,不允许其他的事务修改就行了。如果仅仅是基于锁来实现事务隔离,一个事务读取的时候不允许其他时候修改,那 就意味着不支持并发的读写操作,而我们的大多数应用都是读多写少的,这样会极大地 影响操作数据的效率。当我们使用了范围查询,不仅仅命中了Record记录,还包含了Gap间隙,在这种情况下我们使用的就是临键锁,它是MySQL里面默认的行锁算法,相当于记录锁加上间隙锁。

2024-06-12 15:17:31 9

转载 缓存与数据库双写一致这个“老大难”,该怎么治

说了这么多缓存的必要性,那么使用缓存是不是就是一个很简单的事情了呢,我之前也一直是这么觉得的,直到遇到了需要缓存与数据库保持强一致的场景,才知道让数据库数据和缓存数据保持一致性是一门很高深的学问。对于那些经常变化的数据,其实并不适合缓存,一方面会增加系统的复杂性(缓存的更新,缓存脏数据),另一方面也给系统带来一定的不稳定性(缓存系统的维护)。在这种“不严谨”的对比下,有缓存对于一台单机,性能提升了3倍多,如果在多台机器,更多并发的情况下,由于数据库有了更大的压力,缓存的性能优势应该会更加明显。

2024-06-12 10:42:31 3

转载 MySQL中 LBCC 和 MVCC 的理解,常见问题及示例:

事务:事务是指逻辑上的一组sql操作,要么全部执行成功,要么全部执行失败。其是为了保证数据库中数据的完整性和一致性。ACID。A 原子性:通过 “undo log” 实现C 一致性:通过 “其他3个特性” 实现I 隔离性: 通过 “lock锁 + MVCC” 实现D 持久性:通过 “redo log” 实现MVCC 基础:概念:通过 “readview版本视图 + undo log” 来控制并发事务访问同一条记录时的行为。好处:提高数据库并发性能。用更好的方式去处理。

2024-06-12 09:55:15 28

转载 MySQL 事务原理

而RR隔离级别时,事务中的一致性读的ReadView是以第一条select语句的运行时,作为本事务的一致性读snapshot的建立时间点的。持久性,是通过redo log和double write buffer (双写缓冲)来实现的,我们操作数据的时候,会先写到内存的buffer pool里面,同时记录redolog,如果在刷盘之前出现异常,在重启后就可以读取redo log的内容,写入到磁盘,保证数据的持久性。InnoDB支持的四个隔离级别和SQL92定义的完全一致,隔离级别越高,事务的并 发度就越低。

2024-06-12 09:52:54 16

转载 win11资源管理器使用StartAllBack后没有地址栏?

卸载旧版StartAllBack,解决。如果继续使用win10体验,安装最新版StartAllBack 3.7.10。下载新版StartAllBack安装即可.

2024-06-11 11:19:12 121

转载 回溯法——求解子集和问题(Java)

如果当前所选取的重量加上剩余的重量仍然W,就不可能找到一个和W相等的值,至于为啥-w[i],我的理解是右边是不选择,就相当于不选择当前的重量,即使减不减也无所谓(如果理解有误请指出)。,wn}和一个正整数W,要求找出w的子集s,使该子集中所有的元素的和为W。例如,当n=4时,w={11,13,24,7},W=31,则满足要求的子集为(11,13,7)和(24,7)。,xn),这里是求所有满足条件的解,所有一旦搜索到叶子结点(即全部结点搜索完,即i>n),如果相应的子集和为W,则输出x解向量。

2024-04-30 13:47:10 193

转载 传说中的堆栈溢出和快速排序

我用的是Cocoa的线程NSThread,直接通过setStackSize方法配置线程堆栈大小,需要注意的是配置的stacksize最小值是16k,而且必须是4K的整数倍。在应用程序分配的内存空间里面,最低地址位是固定的代码段和数据段,往上是堆,向上生长,用来存放全局变量,对于 ObjC对象 来说,就是 alloc 出来的变量,都会放进这里,堆不够用的时候就会往上申请空间。快速排序是数据结构课程中介绍的最基础的一种算法。ObjC 的对象都是以指针进行操控的,局部变量的指针都在栈里,全局的变量的指针在堆里。

2024-04-18 22:43:44 77

转载 快速排序对于有序数组导致的栈溢出的优化

由于的问题,比较适合来实现排序函数,但是,我们也知道,在最坏情况下也就是数组有序的时候的时间复杂度是 O(n2),如何来解决这个“复杂度恶化”的问题呢?

2024-04-18 17:18:44 101

转载 Java容器类详解 ArrayDeque详解

ArrayDeque是JDK容器中的一个双端队列实现,内部使用数组进行元素存储,不允许存储null值,可以高效的进行元素查找和尾部插入取出,是用作队列、双端队列、栈的绝佳选择,性能比LinkedList还要好。听到这里,不熟悉ArrayDeque的你是不是有点尴尬?JDK中竟然还有这么好的一个容器类?别慌,现在了解还来得及,趁响指还没有弹下去,快上车吧,没时间解释了。来看一个ArrayDeque的使用小栗子:// 初始化容量为4//添加元素// 获取元素。

2024-04-18 14:02:11 791

转载 多态在JVM中的实现——invokevirtual与invokespecial

上面黄色的部分才是base这个引用所能访问的vtable的范围(关于vtable的生成有时间在总结),而普通的子类引用可以访问整个子类的vtable。所以base.print()其实是调用的覆盖后的print(),而baseMethod()则是调用的基类中的方法,并且base不能调用childMethod()方法。但在这里,子类对象的引用就可以调用其基类的私有方法,原因是,这里的调用不再是invokevirtual,而变成了invokespecial!这个是类被虚拟机加载进方法区之后,在方法区里面的布局。

2024-04-15 22:16:00 48

转载 Java 两种zero-copy零拷贝技术mmap和sendfile的介绍

传输方式上下文切换次数数据拷贝次数修改数据传统IO方式44中途可以修改数据mmap方式43中途可以修改数据23中途无法修改数据22中途无法修改数据有一个细节是,例如SocketChannelImpl或者FileChannelImpl在通过write写数据的时候,会判断Buffer是否是DirectBuffer,如果不是,则需要临时创建一个DirectBuffer,将数据拷贝到DirectBuffer,然后再通过DirectBuffer传输,也就是如果是则直接传输。

2024-04-15 14:27:37 162

转载 深入理解JVM-内存结构

如6.5代码所示,如果加上了-XX:+DisableExplicitGC 虚拟机参数,执行到System.gc()时,直接内存不能被回收,只有当真正垃圾回收时才能被回收,这就导致了直接内存过大,会导致内存溢出。1.6 将这个字符串对象尝试放入串池,如果有则并不会放入,如果没有会把对象复制一份,放入串池,会把串池中的对象返回。1.8 将这个字符串对象尝试放放串池,如果有则并不会放入,如果没有则放入串池,会把串池中的对象返回。总结:如果程序中存在大量的字符串,且字符串重复的很多,可以通过入池来减少堆内存占用。

2024-04-14 12:28:07 38

转载 JVM可生产的最大线程数 Thread 数量

事先预测在这样的测试环境下,线程数量就只会受限于测试环境的内存大小(3G),可是实际的测试结果是线程数量在达到32K(32768,创建的数量最多的时候大概是33000左右)左右时JVM是抛出警告:Attempt to allocate stack guard pages failed,然后出现OutOfMemoryError无法创建本地线程。由上面的测试结果可以看出增大堆内存(-Xms,-Xmx)会减少可创建的线程数量,增大线程栈内存(-Xss,32位系统中此参数值最小为60K)也会减少可创建的线程数量。

2024-04-14 10:10:31 110

转载 微言Netty:百万并发基石上的epoll之剑

但是需要注意的是,当有成千上万个客户端连接上来开始进行数据发送,由于LT的特性,内核会频繁的处理通知操作,导致其相对于ET来说,比较的耗费系统资源,所以,随着客户端的增多,其性能也就越差。客户端socket怎么管理这块解决了,接下来,当有socket有数据需要进行读写事件处理的时候,系统会将已经就绪的socket添加到双向链表中,然后通过epoll_wait方法检测的时候,其实检查的就是这个双向链表,由于链表中都是就绪的数据,所以避免了针对整个客户端socket列表进行遍历的情况,使得整体效率大大提升。

2024-04-10 11:08:59 17

转载 设计模式——门面模式

(Facade Design Pattern)门面模式也叫外观模式,门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。门面模式原理和实现也比较简单,应用场景也比较明确,主要在接口设计方面使用。解决易用性问题。解决性能问题。解决分布式事务问题。image.png角色组成:门面角色:客户端调用这个角色的方法。此角色知晓相关的子系统的功能和责任。正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去。子系统角色:可以同时有一个或者多个子系统。

2024-04-09 15:12:45 24

转载 装饰器模式与代理模式区别

从类图可以发现二者的第一点区别在于装饰模式里装饰类与目标对象是解耦的,装饰对象并不感知目标对象的存在,由我们(调用方)控制对目标对象的引用。而这也是装饰模式与代理模式的本质区别:谁控制了目标对象的引用。而当调用方拥有了目标类,只有执行到装饰器这行代码时才知道具体装饰了哪个类,这在目标类的功能扩展实现上提供了便利,我们仅需一个装饰器类就可以装饰多个目标类。而代理模式则在代理类中写死了代理的是具体哪个目标类,不易扩展。代理模式的定义为“为其他对象提供 一种代理以控制对这个对象的访问。

2024-04-09 14:17:32 40

转载 玩一玩通义千问Qwen开源版,Win11 RTX3060本地安装记录!

大概在两天前,阿里做了一件大事儿。就是开源了一个低配版的模型--通义千问-7B-Chat。这应该是国内第一个大厂开源的大吧。虽然是低配版,但是在各类测试里面都非常能打。官方介绍:Qwen-7B是基于的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-7B的基础上,我们使用对齐机制打造了基于大语言模型的AI助手Qwen-7B-Chat。本仓库为Qwen-7B-Chat的仓库。同时官方也给出了很多测试结果。

2024-03-18 10:02:38 315 2

转载 通义千问模型使用text-generation-webui搭建webui页面

text-generation-webui 适用于大型语言模型的 Gradio Web UI。支持transformers、GPTQ、AWQ、EXL2、llama.cpp (GGUF)、Llama 模型。它的特点如下,3种界面模式:default (two columns), notebook, chat。

2024-03-18 09:59:41 2840 4

转载 pytorch适配CUDA降版本、选择gpu版本最终方案

看着网上的文章,还有问chatGPT,一步步解决了这个问题,还是值得的。有的方法在选择gpu版本的时候,选择这样:conda install -c 镜像源 后面调试版本...一步步调版本,我在调的时候发现太搞了,而且试出来下好配套的了,可能下的也是cpu版本的。conda安装GPU版pytorch,结果却是cpu版本[找到问题根源,从容解决]_为什么conda安装pytorch版本不对-CSDN博客可能更了解镜像源内部选择的方式,会有更好的解决方法。

2024-03-18 09:43:42 3526

转载 jdk下载需要登陆Oracle账号解决

目前在Oracle官网下载jdk的时候需要登陆,分享几个账号,方便下载。账号:amador.sun@foxmail.com。账号:liwei@xiaostudy.com。账号:1789936303@qq.com。账号:amador.sun@qq.com。密码:OracleTest1234。密码:Oracle123456。密码:1211WaN!密码:1211WaN!

2024-03-16 12:01:18 1913 2

转载 Java使用stream流实现数组和集合之间的相互转换

【代码】Java使用stream流实现数组和集合之间的相互转换。

2024-03-16 11:17:21 96

转载 对集合数组操作的神器:Stream流

https://blog.csdn.net/weixin_52394141/article/details/127327056

2024-03-16 11:11:07 77

转载 使用stream流操作数组方法整理

方法设置一个默认值(这里设置为0),以防止找不到最大值时出现空指针异常。(这里设置为0),以防止找不到最大值时出现空指针异常。方法将二维数组转换成一维流。

2024-03-16 11:03:00 313

转载 Java中的forEach没有下标?那就自己实现

给大家推荐一个超实用的方法 -- String.join();

2024-03-16 10:29:38 208

转载 JDK 1.8新特性(foreach、Stream、lamdba)

加工:map() 作用是修改迭代中的每个元素,功能有点像foreach,只是侧重点不同,map()侧重修改,foreach侧重遍历。转换:collect(Collectors.toList());过滤一个list,获取到所有的activityId不为空的去重Set。限流:limit(),比如取集合中 age>30的前2个员工信息。去重:distinct() 去重(基本类型数据的去重)遍历:foreach() 这个和list的用起来一样。转换:stream() 把一个list转换成流。

2024-03-16 10:27:15 192

转载 长URL链接转短链接算法

在这个“最近”表中查看一下,看长地址有没有对应的短地址,有就直接返回,并且将这个key-value对的过期时间再延长成一小时如果没有,就通过发号器生成一个短地址,并且将这个“最近”表中,过期时间为1小时所以当一个地址被频繁使用,那么它会一直在这个key-value表中,总能返回当初生成那个短地址,不会出现重复的问题。ok,这样的话,当通过这个hash算法算出来之后,可能我们会需要做btree式的大于小于或者like查找到能知道现在应该在后面加1,2,或3,这个也可能由于输入的长地址集的不确定性。

2024-03-13 21:40:51 201

转载 python的set里面可以存放list吗?

实际上,只要对象是可散列的,那么就能够添加该对象。考虑到Python通过是否实现__hash__去判断一个对象是否是。的,因此只要实现了__hash__方法,该类的对象就是可散列的,也就可以添加到set内。实验结果也支持了这一论述。可以看到set内正常添加了一个list,并且还可以改变该list的元素。正常来说,肯定是不可以在set里存放list的,set内的元素需要能。,即实现了__hash__方法。

2024-02-29 21:58:25 61

转载 如何使用python高效而优雅地处理大数据?

ndarray加入你的训练数据很大,需要流处理(训练),直接使用等模块加载,他们封装好了并行流处理过程。else:p.start()p.join()return arr这基本上是worker_numX 倍的加速。

2024-02-22 09:57:36 24

转载 python-socket、websocket协议相关知识

在Python中,socket和socketserver是两个用于网络编程的库。socketserver库是基于socket库的一个扩展库,它提供了更高级的网络通信功能,如多线程、异步I/O等。它主要用于实现高性能的网络服务器。WebSocket协议是一种基于TCP的网络通信协议,它允许在客户端和服务器之间进行全双工通信。在Python中,websocket和websockets是两个用于实现WebSocket协议的库。它提供了一个简单的接口,可以方便地创建TCP和UDP服务器,支持多线程处理客户端连接。

2024-02-20 09:47:36 22

转载 Python和Golang协程的区别

在说它们两者区别前,我们首先聊一下什么是协程,好像它没有一个官方的定义,那就结合平时的应用经验和学习内容来谈谈自己的理解。协程,其实可以理解为一种特殊的程序调用。特殊的是在执行过程中,在子程序(或者说函数)内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。可中断,这里的中断不是普通的函数调用,而是类似CPU的中断,CPU在这里直接释放转到其他程序断点继续执行。可恢复,等到合适的时候,可以恢复到中断的地方继续执行,至于什么是合适的时候,我们后面再探讨。

2024-02-17 07:38:11 82

转载 TimSort——最快的排序算法

TimSort 算法是Tim Peters(就是写Python 之禅的那个大神) 于 2001 年为 Python 语言创建的。该算法建立在插入排序和归并排序的基础之上,兼具插入排序和归并排序的优点。图1. Tim Peters,就是这位大神开创了 TimSortTimSort 的平均时间复杂度为 O ( n log ⁡ n ) O(n\log n)O(nlogn) ,最好情况 O ( n ) O(n)O(n) ,最差情况 O ( n log ⁡ n ) O(n\log n)O(nlogn)。

2024-02-05 09:57:13 178

myeclipse 8.5M 取消空格上屏

替换MyEclipse安装目录\Common\plugins下的org.eclipse.jface.text.jar包即可 其它版本的修改参看:http://blog.csdn.net/dhc45010/article/details/9567917

2015-07-07

空空如也

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

TA关注的人

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