- 博客(28)
- 收藏
- 关注
原创 用例图,时序图,活动图的区别及定义
用例图描述了系统提供的一个功能单元。用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求,包括基于基本流程的"角色"(actors,也就是与系统交互的其他实体)关系,以及系统内用例之间的关系。用例图一般表示出用例的组织关系–要么是整个系统的全部用例,要么是完成具有功能(例如,所有安全管理相关的用例)的一组用例。要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。要在用例图上绘制一个角色(表示一个系统用户),可绘制一个人形符号。
2023-10-08 18:03:45
362
原创 ssh的原理
SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录或文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。**SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。**作为Telnet和其他不安全远程shell协议的安全替代方案,目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。
2023-10-08 17:57:52
47
原创 nacos作为配置中心
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以。Nacos配置中心一般管理的是一些“开关”类型的配置或者一些“需要热更新”的配置,而不是所有配置。Nacos一方面可以将配置集中管理,另一方面可以在配置变更时,使用Nacos统一配置管理可以做到对某些配置的。
2023-10-08 17:41:41
52
原创 Mybatis的使用(一对多、多对一)
上述配置代码中,使用<where>元素对“where 1=1”条件进行了替换,<where>元素会自动判断组合条件下拼装的SQL语句,只有<where>元素内的条件成立时,才会在拼接SQL中加入where关键字,否则将不会添加;在Hibernate中,如果想要更新某一个对象,就需要发送所有的字段给持久化对象,然而实际应用中,大多数情况下都是更新的某一个或几个字段。在使用<if>元素时,只要test属性中的表达式为true,就会执行元素中的条件语句,但是在实际应用中,有时只需要从多个选项中选择一个去执行。
2023-10-08 17:38:32
86
原创 IO模型之BIO、NIO、AIO
而异步IO中,当用户线程收到通知时候,数据已经被内核读取完毕,并放在了用户线程指定的缓冲区内,内核在IO完成后通知用户线程直接使用就行了。不过最主要原因还是操作系统对异步IO的支持并非特别完善,更多的采用IO多路复用模拟异步IO方式(IO事件触发时不直接通知用户线程,而是将数据读写完毕后放到用户指定的缓冲区)。同步阻塞IO是最简单的IO模型,用户线程在内核进行IO操作时被阻塞。 整个IO请求中,虽然可以立即返回,但是因为是同步的,为了等到数据,需要不断的轮询、重复请求,消耗了大量的CPU资源。
2023-10-08 14:59:43
66
1
原创 什么是netty
Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
2023-10-08 11:13:08
88
1
原创 Spring的生命周期
Bean的生命周期实例化Bean之前做前置处理(BeanFactoryPostProcess)实例化Bean(构造器)填充Bean的属性,可能产生循环依赖调用postProcessBeforeInitialization执行bean的初始化方法调用postProcessAfterInitializationBean的销毁方法方法的执行顺序构建顺序:bean的构造方法属性赋值postProcessBeforeInitialization方法@PostConstruct注解修饰的
2023-10-04 13:01:00
58
1
原创 JAVA集合类中的fail-fast与fail-safe机制
之所以会抛出CMException异常,是因为我们的代码中使用了增强for循环,而在增强for循环中,集合遍历是通过iterator进行的,但是元素的add/remove却是直接使用的集合类自己的方法。这就导致iterator在遍历的时候,会发现有一个元素在自己不知不觉的情况下就被删除/添加了,就会抛出一个异常,用来提示用户,可能发生了并发修改!
2023-10-02 17:05:25
73
1
原创 new String的值是存储在堆中还是常量池呢?
对于直接声明的字符串,形如:String x = “”;则变量x直接指向常量池中;对于new出来的字符串,new String(“”);则存储于堆中,但存储的是指向常量池的引用;intern方法可以向常量池存储字符串,并返回一个常量池的引用对象;
2023-10-01 22:14:34
261
原创 在JAVA中利用Cloneable接口实现深拷贝
递归克隆的缺点在于,如果对象中包含的对象太多、需要依次克隆。从输出的结果可以看出clone()方法实现的是浅拷贝。修改完成后重新调用main方法发现可以实现深拷贝了。递归克隆的思路在装饰者模式中也有运用。
2023-10-01 19:00:15
73
原创 有了静态代理为什么还要动态代理
接口代理动态代理主要用于接口代理,而静态代理只能为固定的具体类创建代理。通过动态代理,可以在运行时生成代理对象(无需关心代理类的创建)。无需为每个类编写具体的代理类。减少代码重复:使用静态代理时,需要为每个被代理类编写一个独立的代理类。动态代理通过使用通用的 InvocationHandler 接口,可以减少代码的重复性使代理的创建和管理更加灵活和便捷。横切关注点的处理方式动态代理可以在运行时动态地植入额外的代码逻辑,形成对代理方法的拦截,方便统一地进行维护、处理。这可以使得我
2023-10-01 14:28:13
148
原创 Mysql的事务传播机制
如果存在A事务,在该方法执行期间,A事务会被挂起,否则会给B开启一个新事务。PROPAGATION_NEVER:(不会运行在有事务的环境)表示当前方法不应该运行在事务上下文中。PROPAGATION_SUPPORTS:表示当前方法不需要事务上下文,但是如果A事务存在的话,B事务就会融入A事务,否则不开启事务执行。如果存在A事务,在该方法运行期间,B事务将被挂起,以非事务的方式运行。PROPAGATION_MANDATORY:(强制性的)表示该方法必须在事务中运行,如果A事务不存在,则会抛出一个异常。
2023-09-27 00:00:49
129
1
原创 Sql中的锁(读锁、写锁、页锁、表锁、行锁)
页锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。MySQL中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。
2023-09-26 17:12:38
632
原创 如何调试多线程的程序
线程是异步执行的,每次的执行顺序是不固定的,所以程序的执行结果也是不可复现的。 通过线程调试可以让每个线程按照调试人员想要的顺序执行,方便调试者调试可疑的程序 代码。
2023-09-24 19:51:52
120
1
原创 Mysql的隔离级别与脏读、幻读、不可重复读之间的关系
不管是脏读、不可重复读、幻读都会对业务执行产生影响,应该想办法避免。四种隔离级别从上到下,并发级别逐渐递减,执行准确性不断提升。mysql选择可重复读作为默认级别是有原因的。可重复读隔离级别通过快照读和当前读可以完全解决不可重复读问题,部分解决幻读问题,不过幻读的问题是可以通过设计规避的。
2023-09-24 18:18:41
352
1
原创 Mysql中Explain关键字的查询结果的字段说明
一般来说,需要保证查询至少到range级别,最好是能到ref,否则就证明我们的SQL需要进行优化调整。
2023-09-23 23:52:14
214
1
原创 过滤器、拦截器、AOP之间有什么相同点和不同点
在实际的应用场景中,运用某种拦截器往往会更方便、更合适,需要根据具体的需求和场景来选择合适的机制来实现相应的功能。过滤器、拦截器和AOP之间并非互斥关系,而是可以共同使用以实现更全面的功能。
2023-09-21 19:34:15
136
原创 什么是Threadlocal及Threadlocal的应用
在Java中,ThreadLocal是一个容器,它为每个线程提供一个独立的变量副本。每个线程都可以独立地改变其副本,而不会影响其他线程的副本。
2023-09-20 16:49:13
44
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人