自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 垃圾回收

内存泄露:服务器,追求的是7*24小时运行,不能随便重启 如果申请的内存,没有手动释放,后面继续申请的话,就会使剩下的内存越来越少,最终内存没了,后续申请就会失效=>进程就会出现严重Bug了,甚至崩溃。要想使用对象2,就得要访问到对象1,;在左侧区域中,有效对象复制到右侧区域,接下来就可以使右侧区域了用了一段时间之后,也会有很多对象,也是同理,把有效对象复制到左侧,把右侧区域统一释放。

2024-06-04 11:57:10 573

原创 JVM的相关知识

这里用符号引用替换直接引用的过程(符号5引用:此时.class文件中,不知道字符串真实的内存地址是哪里的,只能知道一个相对位置的偏移量,知道字符串的内容在.class文件的那个地方;有些特殊情况,服务器不方便重启,就可以“打补丁”,通过一些特殊手段,把书序替换的类给卸载掉,直接用加载好的心得类替换(新版代码)(Java这里用的倒不是很多,Java的服务器一般都是分布式系统,天然就可以方便重启的)有的服务器需要打“热补丁”代码有bug,正常操作应该是修改代码,重新编译,用新的版本代替就得版本,重启服务器。

2024-05-30 17:34:29 921

原创 性能测试

从用户视角来考虑,响应时间反映了完成某个操作所需要的时间,标准定义是,应用系统从发出请求开始,到客户端接收完所有的字节数据所消耗的时间。指模拟正式用户在实际操作时的停顿间隔时间,从业务的角度来讲,思考时间指的是用户在进行操作 时,每个请求之间的间隔时间。软件1(美团1.0版本)和软件2(美团2.0版本)是一样的功能,登录,退出,查看首页。双11的时候,有100万用户,同时操作淘宝系统,此时淘宝系统承载的压力非常大。它是衡量系统处理能力的重要指标。不同系统资源的使用情况,包含CPU,内存,硬盘,网络等。

2024-05-17 14:44:24 841

原创 软件测试的一些概念

软件的生命周期:软件的生命周期是指从软件产品的设想开始到软件不在使用而结束的时间,把软件看成是有生命的事物, 那么软件的生命周期可以分成六个阶段,即需求分析,计划,设计,编码,测试,运行维护。从软件功能需求出发,无遗漏的识别出测试需求是至关重要的,这将直接关系到用例的测试覆盖率 对于识别出的每个测试需求点,需要采用具体的设计测试用例的方法来进行测试用例的设计。计划:项目什么时候开始,什么时候结束,由谁开发,测试确定开始结束时间,测试人员。(给客户交付的软件)重于完备的文档(测试用例,需求文档,技术文档。

2024-05-15 16:47:40 800

原创 技术架构

运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突问题,此外,对于大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难。缺点:带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题;出现原因:单机的写库会逐渐会达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维压力,业界逐渐研发了分布式数据库,库表天然支持分布式。

2024-05-15 16:03:16 562

原创 软件测试用例

答:依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。兼容:软件在各个品台上能够运行,常考虑的设备有IOS,Android,PC(电脑,windows,Linux,Mac),如果是浏览器就要考虑浏览器的版本。性能:压缩一个非常小的文件,用的时间非常短;比如:男同胞找女朋友:女的,活的,可爱的,有钱的,长得白,身材好,温柔,善良。

2024-05-12 09:39:13 922

原创 软件测试基础

需要注意 的是,测试人员不应该一味地要求对Bug进行修改,因为修改可能带来回归的风险,同时带来的是回归 测试的工作量,如果时间比较紧迫,修改后剩余的时间若不足以做一次有效的回归测试,可能不修改是 个明智的选择。如果测试人员发 现在写完一个缺陷后,好像还有很多关于Bug的信息没有表达出来,或者很难用书面语言表达出来时, 就应该在提交Bug后,马上找相关的程序员解释刚才录入的Bug,确保程序员明白Bug描述的意思,而 不要等待开发人员找自己了解更多的信息。如果是依据需 求提出的故障,能写明需求的来源是最好的。

2024-05-11 22:09:58 415

原创 对软件测试的一些了解

测试开发:根据需求写测试用例,执行测试,发现bug,开发自动化测试用例,开发测试平台(提供工作效率,保障软件质量)测试:写测试用例,执行测试,自动化测试,性能测试,开发测试平台。较强的学习能力:不同的公司用到的技术不一样,学习测试工具,学习不同公司的测试流程。测试:初级测试工程师-》中级测试工程师-》高级测试工程师-》架构师-》项目经理。测试:测试+开发(部分的白盒测试开发人员完成,剩余的一些测试测试人员完成)例如:买衣服的案例:保暖性,时尚,大小,穿上显瘦,价格。5)账号,密码输入非法字符,会有提示。

2024-05-06 17:16:20 373

原创 redis的持久化

因此,子进程里的内存数据是父进程fork之前的状态,fork之后,新来的请求,对内存造成的修改,是子进程不知道的。答:此处的性能开销,其实挺小的,fork在进行内存拷贝的时候,不是简单无脑的直接把所有的数据都拷贝一遍,而是“写时拷贝”的机制来完成的(如果紫禁城例的这个内存数据和父进程的内存数据完全一样了,此时就不会触发真正的拷贝动作(而是他俩用一份内存数据),但是,其实这俩进程的内存空间,应该是各自独立的,一旦某一方针对这个数据做了修改,就会立即触发真正物理上的数据拷贝)

2024-04-20 16:48:31 976

原创 Redis的主从复制

从节点要从主节点这里进行全量复制,全量复制开销是很大的,有些时候,从节点本来就持有主节点的部分数据,这个时候,就不填需要进行全量复制了(比如出现网络抖动,主节点这边最近修改的数据可能就无法及时同步过来,更严重的,从节点已经感知不到主节点了(进一步的从节点可能就会升级成主节点);此时可以通过关闭主节点的AOF,只在从节点上开启AOF(但是,这种设定,有一个严重的缺陷,主节点一旦挂了,不能让他自动重启(如果自动重启,此时没有AOF文件,就会丢失数据,进一步的主从同步,会把从节点的数据也给删了))

2024-04-20 16:27:27 976

原创 redis的缓存

答:⽐如我需要去⾼铁站坐⾼铁.我们知道坐⾼铁是需要反复刷⾝份证的(进⼊⾼铁站,检票,上⻋, 乘⻋过程中,出站....). 正常来说,我的⾝份证是放在⽪箱⾥的(⽪箱的存储空间⼤,⾜够能装).但是每次刷⾝份证都需 要开⼀次⽪箱找⾝份证,就⾮常不⽅便. 因此我就可以把⾝份证先放到⾐服⼝袋⾥.⼝袋虽然空间⼩,但是访问速度⽐⽪箱快很多. 这样的话每次刷⾝份证我只需要从⼝袋⾥掏⾝份证就⾏了,就不必开⽪箱了. 此时"⼝袋"就是"⽪箱"的缓存.使⽤缓存能够⼤⼤提⾼访问效率.按照月级别统计,就每个月更新一次)

2024-04-20 16:20:56 749

原创 Redis的分布式锁

这里使用事务,能解决上述问题(Redis事务虽然弱,但是能够避免插队),但是有更好的方案lua脚本(lua语言特别轻量(实现一个lua解释器,消耗的体积是非常小的),可以使用lua编写一些逻辑,把这个脚本上传到Redis服务器上,然后就可以让客户端来控制Redis执行上述脚本了,Redis执行lua脚本的过程也是原子的,相当于执行一条命令一样(实际上lua中可以写多个命令))线程安全(多个线程并发执行的时候,执行的先后顺序,是不确定的=>随机性=>需要保证在任意执行下顺序下,执行逻辑都是OK的)=>锁。

2024-04-20 16:17:31 797

原创 Redis的集群

④. A判定B为PFAIL之后,会通过redis内置的Gossip协议,和其他节点进⾏沟通,向其他节点确认B 的状态.(每个节点都会维护⼀个⾃⼰的"下线列表",由于视⻆不同,每个节点的下线列表也不⼀定相 同). ⑤. 此时A发现其他很多节点,也认为B为PFAIL,并且数⽬超过总集群个数的⼀半,那么A就会把B标 记成FAIL(相当于客观下线),并且把这个消息同步给其他节点(其他节点收到之后,也会把B标记成 FAIL).如果每个分片包含的槽位比较多,如果槽位个数想当,就可以认为是包含的key数量想当;

2024-04-17 15:59:05 749

原创 Redis的哨兵机制

Redis服务器需要按照可读可写的方式打开这个AOF文件,而这个文件对于root之外的用户只有读权限,因此serveice redis-server start启动的Redis服务器无法打开这个文件就启动失败(通过service redis-server start 启动的Redis服务器(主要是怕通过root启动Redis,权限太高,一旦Redis被黑客攻破,后果就比较严重)是通过一个Redis这样的用户来启动的)此时,就需要程序员/运维手工的恢复主节点(redis哨兵:自动的对挂了的主节点进行替换)

2024-04-13 18:27:37 930

原创 Redis的事务

redis中实现事务,是引入了队列(每个客户端都有一个),开启事务的时候,此时客户端输入的命令,就会发送给服务器并且进入这个队列中(而不是立即就执行),当遇到“执行事务”命令的时候,此时就会把队列中的这些任务都按照顺序依次执行(redis的主线程中完成的,主线程会把事务中的操作都执行完,再处理别的客户端)答:MySQL的事务,再背后付出了很大的代价,空间是哪个,要花费更多的空间来存储更多的数据,时间上,也要有更答的执行开销,正是因为MySQL上述问题,才有redis上场的机会。

2024-04-03 15:35:48 298

原创 Redis 的图形化客户端(Java)

光服务器的外网IP还不够,因为6379端口是被云服务器的防火墙给保护起来的(不能被外面访问)(别人不能来访问,自己也不能访问)(虽然Tomcat的端口也开放了,但是Tomcat的8080这里的这个门的锁,不好撬,但是6379这个门的锁就特别好撬)(像是一个QQ的自定义客户端/王者荣耀的客户端/XXXX 不能自定义客户端,因为他们没有公开自己使用的自定义协议(如果非要定义的话也可以通过抓包/逆向手段,猜测QQ的应用层协议是什么样子的(全凭运气)))Simple String只能用来文本传输。

2024-03-30 11:30:43 330

原创 Redis的相关命令

1.string:redis中的字符串,直接按照二进制数据的方式进行存储的(不会做任何的编码转换,存的是啥,取的就是啥(不仅可以存储文本数据(MySQL的miring字符集是拉丁文,插入中文就会失败),整数,普通的字符串,JSON,xml,二进制数据(图片,视频,音频)))比如:游戏天梯排行榜,只需要把玩家的信息和对应的分数放到有序集合即可,就自动形成了一个排行榜,随时可以按照排行榜(下标)进行范围查询,随着分数的改变,也可以比较方便的,zincrby修改分数,顺序也能自动调整logN。

2024-03-26 16:34:52 721

原创 redis的大致认识

4.Persistence:持久化,Redis把数据存储在内存上,因为内存的数据是容易丢失的(进程退出/系统重启),Redis会把数据存储在硬盘上,内存为主,硬盘为辅(硬盘相当于对内存数据备份了一下)如果Redis重启了,就会在重启是加载硬盘中备份的数据,是Redis的内存恢复到重启前的状态。注意:之前的应用服务器,一个服务器里面有很多的业务,这就会导致这一个服务器的代码变得越来越复杂,为了方便就把这样一个复杂的服务器拆分成功能更多,功能单一的,但是更小的服务器(微服务器)

2024-03-11 15:20:04 880

原创 图书管理系统

①验证前端传过来的密码是否在数据库中(1.判断userName和password是否为空(注意:传过来的userName和password和前端写的字符是一样的),若为空则就返回false。①创建一个登陆拦截类,preHandle是执行方法前处理 向前端请求获取会话,如果获取到登陆的用户信息就返回true放行成功 否则就设置状态401。(6)登陆拦截(每个用户登上后创建一个对话(这里是创建了一个常量类Constant 表示常量,把用户的信息放到常量里)

2023-12-26 19:23:26 803

原创 AOP

存在⼤量重复的切点表达式 execution(*com.example.demo.controller.*.*(..)) ,Spring提供了 @PointCut 注解,把公共的切点。@AfterReturning:返回后通知,此注解标注的通知⽅法在⽬标⽅法后被执⾏,有异常不会执⾏。@Order 控制切⾯的优先级,先执⾏优先级较⾼的切⾯,再执⾏优先级较低的切⾯,最终执⾏⽬标⽅法.@Around:环绕通知,在⽬标⽅法的前后都会被执⾏.后⾯的表达式表⽰对哪些⽅法进⾏增强.通知就是具体要做的⼯作,?

2023-12-23 17:06:59 822

原创 博客系统

博客详情页:实例化一个BlogDao类,到里面查找当前blogId的blog,若没有找到就返回一个实例化空User,否则实例化UserDao类,并查找blog里面的userId,看是否有user,若user为空,就实例化一个空User返回,否则就把接受到的user信息写到服务器上并返回到页面上。思路:查看会话是否为空,若会话为空,则就说明未登陆直接返回,若会话不为空,就查询会话,看会话里面的值是否为空,为空就未登陆并直接返回。若果会话不为空,就查询会话里面的username,看是否和也面输入的是否相同。

2023-10-26 16:15:20 106

原创 HTTPS的加密操作

客户端拿到证书后,就会对证书进行验证(检查一下证书是否和法的,是否被篡改过)客户端手里持有服务器的公钥,就可以用公钥对证书进行解密,拿到征书的校验和,然后用其他的算法重新算一下拿到的证书的校验和,如果校验和一样的就可以发密钥(这里是不用担心黑客的校验和相同,因为网络域名会不同,会导致证书审核不通过)这里的漏洞是:当服务器向客户端发送公钥的时候,黑客把这里的公钥给劫持了,换成自己的公钥,自己手里也会有私钥,客户端就会用黑客的公钥来发送密文,就还是会造成加密失败。(这里黑客截取了密文没有密钥也没用)

2023-10-04 13:34:23 47

原创 数据链路层相关知识

因为数据链路层和硬件是相关,对于以太网来说,硬件就这么大,换成其他的硬件也需要搭配其他的数据链路层的协议,这里的最大值可能会不同,把这个最大称为 MTU ,分包和组包就是为了MYU搞出来的(不是因为吱声长度达到了64KB)因为数据链路层所说的是两个节点之间的之间的路径,而且mac地址的字节是6个字节,数据量足够多,能够提供每个主机的地址,因此可以用。以太网的数据帧就是拉货的卡车,有的车拉的多,有的车装的少。以太网中有目的地址和源地址,这里的地址是mac地址。

2023-10-03 15:34:52 33

原创 HTTP协议的相关事项

作用:因为互联网的快速发展,所以会更新代换很多版本,为了使每个版本都能够使用,因此想了个办法,就是浏览器在发起http请求的时候,向服务器自报家门,告述服务器,我是使用哪个系统的,啥浏览器上的网,服务器就根据这个信息来分别对待(兼容)post请求会带有body,body前面的空格相当于分隔符,分割了Header和body,描述了body是从哪里开始的,body的格式有很多种,上述就是JSON,在登陆中这里就包含了登录账号和密码,这里的密码是加密的,不是明文。http://学校二楼:18/猪肉的熏肉大饼?

2023-10-02 22:13:39 82 1

原创 NAT 机制的工作流程

假设我的电脑要用应用程序(我的电脑和应用程序是两个不同的局域网)的话,就要用NAT机制进行转换,我的电脑的IP和电信的路由器的IP进行NAT的转化,之后要和其他局域网通信的话就可以用电信路由器的外网IP。(运营商提供的设备有外网IP)我的电脑 公司的路由器 电信的光猫 电信的路由器 其他的外网IP 应用程序。电信路由器会用自己的自己的外网IP代替我自己电脑的IP,从而进行和应用程序的通信。源IP:192.168.22.56(我的电脑)

2023-10-01 21:50:19 38

原创 IP协议的相关事项

假设我的电脑要用应用程序(我的电脑和应用程序是两个不同的局域网)的话,就要用NAT机制进行转换,我的电脑的IP和电信的路由器的IP进行NAT的转化,之后要和其他局域网通信的话就可以用电信路由器的外网IP。(运营商提供的设备有外网IP):其中有一位是不用的,还有一位是允许拆包的,拆包的时候这一位为1,剩下一位是结束标记,标识当前的包是否是最后一个,这一位是0,表示这是最后一个。目的IP:10.20.30.40(电信的路由器) 目的端口号:1234(字节集应用程序在进行通信是,系统自动分配的)

2023-10-01 20:50:28 37

原创 锁策略

挂起等待锁:通过内核态,借助系统提供的锁机制,在出现锁冲突的时候,会牵起线程对内核的控制,使冲突的线程出现挂起(阻塞等待)这里释放锁的时候应该从最外层开始,如果是先释放了里面的,意味着最外面的和中间的都没有处在保护之中了。自旋锁:是轻量级锁的一种典型的实现,在用户状态下,通过自旋的方式(while循环),实现加锁的方式。可重入锁:有一个线程,针对这个线程加两次锁,而且是同一个对象,如果没有出现死锁,就是可重入锁。不可重入锁:有一个线程,针对这个线程加两次锁,而且是同一个对象,如果出现死锁,就是不可重入锁。

2023-09-30 21:12:42 22

原创 TCP协议的相关特性

直接用TCP的序号(TCP会在内核中,给每一个Socket对象都安排一个内存空间,相当于一个队列,也称为接收缓冲区,收到的数据(每个数据有一个序号,下一个如果接收到相同的序号就会知道已读,就会去重)都会被放到接收缓冲区(应用程序调用read,就是从这个接收缓冲区,消费数据,当数据被read(read有两种模式,一种是读到就删除,另一种是读到不删除)后就可以从缓冲区队列里删除了)中,并且按照序号排列好顺序了)进行判定。确认应答(下一个是1001)丢包。确认应答(下一个是1001)数据(1~1000)

2023-09-30 19:49:00 43

原创 UDP报文结构及注意事项

原理是:把所有数据相加生成一个校验和 放在2个字节的变量中(溢出了也没事),接着把原有的数据和旧的校验和传给接收方,接着再把这些数据相加,如果和旧的校验和不相等,则就输传输的数据不正确,若相等也不一定正确。(换算出来是64KB)校验和:网络数据在传输过程中受到完结的干扰会使数据发生错误,因此就要用到校验和来检验。通常0~1024范围的端口号,系统赋予的特定的含义(之前一些名气比较大的)2,用TCP代替UDP,TCP没有要求报文的长度(长度是任意的)UDP的报文长度:范围是0~65535。

2023-09-29 12:05:58 77 1

原创 网络中的一些基本概念

发送人QQ 接收方QQ 时间 消息内容。发送人QQ 接收方QQ 时间 消息内容。一:端口号:区分主机上的各种应用程序(一个网络程序,在启动的时候都需要绑定一个或者多个端口号,后续的通信都是需要端口号来进行展开的,如:mysql的端口号是3306)三:协议分层:网络通信是一个比较复杂的工作,往往就需要很多协议,这些协议就很变的很庞大,因此就需要协议分层(上层协议调用下层,下层协议给上层提供服务)

2023-09-29 11:23:42 36 1

原创 File的用法 以及InputStream和outputStream的用法

(3) File(String parent,String child) 根据父目录和孩子文件路径创建一个新的File实例,父目录用路径表示。int read(byte []b,int off,int len)最多读取len-off字节的数据到b中,放在从off开始,返回实际读到的数量。2.构造方法:(1)File(File parent ,String child) 根据父目录和孩子文件路径,创建一个新的File 的实例。String file.getPath() 返回File对象的文件路径。

2023-09-25 09:44:58 116 1

原创 CAS

解决方法:CAS判定的是值相同,实际上期望的是值没有变化过,因此如果约定值只是单向变化(比如:值只能增长,不能减小)给账户安排一个版本号(只增加,不减小)使用CAS判定版本号。当多个线程并发执++时,有时候线程是串行的,能够正确,有时候是穿插执行的,就不能执行正确加锁能够保证线程安全:通过锁,强制避免出现穿插。问题的描述:正常情况下来说是没有什么问题的就是如果说 :如果A转账给了B,A转账的同时。这里的&address的值是内存里的值,exceptValue里的值是寄存器中的值。三.CAS的ABA问题。

2023-09-19 16:43:41 17

原创 synchnoized

4.synchronized是不公平锁(公平锁是概率均等的情况下,考虑成本,先来后到。3.重量级锁:在轻量级锁的前提下,若有很多其他的线程也来竞争,就不会重量级自旋询查,会阻塞等待就是重量级锁。1.synchronized是乐观锁,也是悲观锁(乐观锁是少有锁冲突的情况,悲观锁是经常会遇到锁冲突)3.synchronized重量级锁部分是基于系统的互斥锁实现的,轻量级锁是基于自旋锁实现的。1.偏向锁:偏向锁并不是真的加锁,而是做了一个标记,等到其他的线程来竞争的时候在进行加锁。竞争 就一直不会加锁。

2023-09-16 13:13:59 34 1

原创 死锁

3.请求和保持:在尝试获取跟多把锁的时候,在获取其他锁的时候也保持拥有原来的锁 (数据结构)这个涉及到需求方面的问题。4.循环等待:t1尝试获取locker2,要在t2执行完后才可以,t2尝试获取locker1,要在t1执行完后才可以。由于必要条件中1,2 属于锁的特性,不可以改变 3属于需求方面的问题,也不可以改变。就要改变4,把这些要获取的对象进行编号(按从小到大的顺序)就可以解决这个问题。二.解决方案:(只要破坏其中的一个条件,就不会导致死锁)

2023-09-16 11:15:38 43 1

原创 线程池的相关知识

ExecutorService service=Executors.newFixedThreadPool(4):这里的ExecutorService service 是指线程池的对象 ,Executors.newFixedThreadPool(4)是创建线程池的过程(工厂模式/工厂方法)Executors.newScheduledThreadPool():类似于定时器的效果,添加一些任务,任务都在后续的某个时刻再执行,被执行的时候不是只有一个线程扫描任务来完成,可能是由多个线程共同执行所有的任务。

2023-09-15 19:15:34 18

原创 线程安全知识

出现内存可见性问题的原因:编译器的优化(本来是2个指令:1.从内存中读取数据(时间慢)2.内存中的数据加载到寄存器中( 速度快))3.把寄存器中的数据写回到内存中(save);几个注意的事项:1.要想让notify顺利唤醒wait就需要保证wait和notify用的是同一个对象调用的。造成的结果:就会在不知道读了几次内存的数据后不读了,直接读寄存器的数据,若前面的数据改变就会造成结果有问题。这里的t1线程执行的时候被锁住,此时就出现t2阻塞的状态,当t1执行完后 ,接着t1,t2又开始第二。

2023-09-11 21:56:46 23

原创 线程的几种状态

就绪状态,可以分成两种情况:1)线程正在CPU上运行 2)线程正在排队等待,随时可以去CPU上运行。2.关WAITING BLOCKED TIMED_WAITING状态的转化。1.NEW RUNNABLE TERMINATED状态之间的转化。2RUNNABLE:可工作的,又可以分成正在工作中和即将开始工作(5.TIMED_WAITINGA:排队等待其他的事情(3.BLOCKED:排队等待其他的事情(4.WAITING:排队等待其他(一.状态的种类以及每个状态的含义。因为sleep的等待。

2023-09-05 17:14:30 44

原创 Thread类的基本用法

这里如果isQuit是局部变量的话会报错(因为lambda是回调函数 创建的时候函数里面的内容并不会执行 这是它会把外部的变量复制一遍 等到调用start()方法之后才会执行 这时若局部变量变了 就会报错 )因此若写成局部变量的话要写成final isQuit=false。因此,线程在sleep过程中,其他线程在调用isInterrupt()方法是就会抛出一个sleep异常 ,sleep就立刻被唤醒。一个线程的run方法执行完毕会终止(正常情况下不会出现run还没有执行结束 线程就没了的)

2023-08-31 15:55:45 16

原创 多线程的概念的相关知识

进程创建的时候,销毁不平凡还好,一旦需要大规模频繁的创建和销毁进程,开销比较大。开销体现在需要给进程分配资源。进程的独立性=>系统的稳定性,多线程共用这一份地址空间,一个线程一旦抛出异常,就可能导致整个进程异常结束。PCD中的内存指针,文件描述符表,同一个进程,这俩字段的内容都是一样的,但是上下文状态,优先级,还有记账信息用来支持调度的属性,则这些PCD则是每个人的都不一样。2.进程是系统分配资源的基本单位,线程是系统调度执行的基本单位。1.进程包含线程,都是为了实现并发编程的方式,线程比进城更轻量。

2023-08-28 10:01:00 28 1

原创 进程的相关知识

进程和程序的联系:如果双击程序,操作系统就会把可执行文件中的数据和指令,加载到内存中,并且让cpu去执行这里的指令 完成一系列相关的工作,运行起来动态的是进程。3)上下文:这些进程是轮着上的 一次运行不完就要 保证下一次上cpu 运行的时候能够从上次运行到的位置的往后运行。实际上是操作系统抽象成文件这样的概念,程序操作的是文件,文件实际上是存储在硬盘上的。1.pid进程的标识:同一个系统上,同一时刻,每个进程的pid一定都是不同的。进程和程序的区别:程序是可执行文件,是硬盘上的一个东西(静态)

2023-08-23 15:01:24 14

空空如也

空空如也

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

TA关注的人

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