JAVA
文章平均质量分 83
不全
这个作者很懒,什么都没留下…
展开
-
面向对象思想总结(值得一读)
一、面向过程的思想和面向对象的思想面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。面向对象有一个非常重要的设计思维:合适的方法应该出现在合适的类里面。二、简单理解面向对象就是在程序里面首先分解出来的应该是注意不再是一步一...转载 2022-04-20 11:48:45 · 2762 阅读 · 1 评论 -
死锁问题
根据不少同学的面试反馈,最近阿里和字节跳动面试时都对多线程相关的问题进行了重点考察,并且面试官都问到了死锁问题。如字节跳动考察的问题是:什么是线程死锁? 死锁如何产生? 如何避免线程死锁?本文便就此问题进行分析,将用尽可能通俗的语言由浅入深地帮助大家理解死锁,了解其产生的原理与对应的解决方案。什么是线程死锁线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的 synchronized 代码块时,便占有了资源,直到它退出该代.转载 2021-03-03 16:41:26 · 188 阅读 · 1 评论 -
什么是死锁?死锁产生的原因?如何避免死锁?
一、什么是死锁?如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程。二、死锁产生的原因?1.因竞争资源发生死锁现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象;(1)可剥夺资源和不可剥夺资源:可剥夺资源是指某进程在获得该类资源时,该资源同样可以被其他进程或系统剥夺,不可剥夺资源是指当系统把该类资源分配给某个进程时,不能强制收回,只能转载 2021-03-01 13:42:09 · 9671 阅读 · 1 评论 -
高并发下数据库分库分表面试题整理
1. 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?面试题剖析为什么要分库分表?(设计高并发系统的时候,数据库层面该如何设计?)说白了,分库分表是两回事儿,大家可别搞混了,可能是光分库不分表,也可能是光分表不分库,都有可能。我先给大家抛出来一个场景。假如我们现在是一个小创业公司(或者是一个 BAT 公司刚兴起的一个新部门),现在注册用户就 20 万,每天活跃用户转载 2021-03-01 11:09:05 · 426 阅读 · 0 评论 -
浅聊读写分离
一、前言 最近工作很繁忙,同事的离职给我带来了很多的事情,投身于博客的时间比较少,另外在宿舍住可能部分的时间要随大流,鹤立鸡群有一些不好,当然这也是给自己找借口和理由,趁着周末整理下最近的感悟;另外公司用的ElasticSearch,最近我也在探索,微服务方面暂时搁浅,待到搬出宿舍的时候在开始一波666的操作;另外随着数据量增加自己还需要去接触波大数据东西,不得说真是有些挑战和机遇,看自己如何把握了;再送给自己一句话:少找一些无用借口和理由,撸起袖子就是干! 开始今天主题读写分离;二、...转载 2021-03-01 10:19:09 · 176 阅读 · 0 评论 -
Java使用RXTX进行串口SerialPort通讯
RXTX简介RXTX是一个提供串口和并口通信的开源java类库,由该项目发布的文件均遵循LGPL协议。RXTX项目提供了Windows,Linux,Mac os X,Solaris操作系统下的兼容javax.comm串口通讯包API的实现,为其他开发人员在此类系统下开发串口应用提供了相当的方便。RXTX的使用上与sun提供的comm.jar基本相同,编程时最明显的不同是要包含的包名由javax.comm.改成了gnu.io.RxtxAPI 的核心是抽象的CommPort类(用于描述一个被底层系统转载 2020-10-12 09:20:20 · 1883 阅读 · 0 评论 -
modbus4j初次使用总结
因为要开发一套监控系统,涉及到与监控设备间通过modbus协议进行通讯先解释一下什么是modbus协议Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。[1]Modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版权要求易于部署和维护对供应商来说,修改..转载 2020-10-12 09:12:31 · 3346 阅读 · 2 评论 -
适配器(Adapter)模式
适配器(Adapter)模式:结构型模式 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口,把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作;该模式是作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。...原创 2020-09-24 11:40:39 · 241 阅读 · 0 评论 -
原型(Prototype)模式
原型(Prototype)模式:创建型模式 使用原型实例指定创建对象的种类,然后通过拷贝这些原型实例来创建新的对象。动机 在软件系统中,经常面临着“某些结构复杂的对象”的创建工用;由于需求变化,这些对象经常面临着剧烈变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向客户端程序隔离出这些易变对象,从而使得依赖这些易变对象的客户端程序不随着需求改变而改变?要点 Prototype模型同样用于隔离对象的使用者和具体类之间的紧耦合...原创 2020-09-22 16:30:20 · 191 阅读 · 0 评论 -
面向对象
面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。 谈到面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现。其初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的...转载 2020-09-21 11:38:25 · 772 阅读 · 0 评论 -
抽象工厂模式-与-工厂方法模式区别
定义区别:工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类 区别在于产品,如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。 再来看看工厂方法模式与抽象工厂模式对比:举个例子说明下:用种蔬菜的例子来说明事实,最初的时候,由于规模转载 2020-09-21 10:58:37 · 149 阅读 · 0 评论 -
生成器(Builder)模式
生成器(Builder)模式:创建型模式 将一个复杂的对象的构建(builder)和它的表示(复杂对象生成的director类)分离,使得同样的构建过程可以创建不同的表示。核心是给指导者(Director)一个生成器,但具体方式不指定。动机 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分子对象经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“...原创 2020-09-19 15:00:58 · 205 阅读 · 0 评论 -
简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式:创建型模式 也叫静态工厂模式,它是用来实例化目标类的静态类。一个Simple Factory生产成品,而对客户端隐藏产品生产的细节,实际上是定义一个产品接口,并透过特定静态方法来建立成品。 就是由一个工厂类根据传入的参数决定创建出哪一种产品类的实例。一个工厂类封装了所有类的实例化。在程序设计中不涉及到具体子类,达到封装效果,也就减少错误修改的机会;如:具体事情做的越多,越容易犯错误,相反,官做得越高,说出的话越抽象,犯错误的可能性就越少。 简单工厂模式根据提供给它的数据,...原创 2020-08-25 16:22:28 · 266 阅读 · 0 评论 -
单例模式
什么是单例模式 对于一个软件系统的某些类而言,无需创建多个实例。如:Windows任务管理器,只能打开一个。确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。线程池、缓存、对话框、处理偏好设置和注册表、日志对象、打印机和显卡等设备的驱动一般都是唯一实例即可。定义:为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功后,我们无法再创建一个同类型的其它对象,所有的操作都只能基于这个唯一实例;为了确保对象的唯一性,我..原创 2020-08-25 16:17:10 · 219 阅读 · 0 评论 -
由单例模式学到:静态构造函数和静态字段
编译器在编译的时候,会事先分析所需要的静态字段,如果这些静态字段所在的类有静态的构造函数,则忽略静态字段的初始化,否则先进行静态字段的初始化。对类的静态成员初始化的顺序取决于在Main函数中的引用顺序,先引用到的先进行初始化,但如果类的静态成员的初始化依赖于其它类的静态成员,则会先初始化被依赖类的静态成员。而带有静态构造函数的类的静态字段,只有在引用到的时候才进行初始化。接下来,用实例来对以上的一段总结性的描述逐句分析:1、编译器在编译的时候,会事先分析所需要的静态字段,如果这些静态字段所在的类有静转载 2020-07-15 17:02:03 · 239 阅读 · 0 评论 -
迭代器模式
什么是迭代器模式迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作放在集合对象中,但这样的话,集合对象既承担太多的责任了,面向对象设计原则中有一条就是单一职责原则,所有我们要尽可能地分离这些职责,用不同的类取承担不同的责任,迭代器模式就是用迭代器类来承担遍历集合的职责。定义:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代原创 2020-07-10 16:23:54 · 128 阅读 · 0 评论 -
观察者模式
定义观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。而观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。比如有个“天气中心”的具体目标A,专门监听天气变化,而有个显示天气的界面的观察者B,B就把自己注册到A里,当A触发天气变化,就调度B的更新方法,并带上自己的上下文。注意:观察者模式有一个别名叫“订阅—发布模式”,该模式容易与观察者模式搞混淆。报纸大家都订过吧,当你订阅了一份报纸,每天原创 2020-07-10 11:35:19 · 153 阅读 · 0 评论 -
原型模式
定义:通过复制现有实例来创建新的实例,无需知道相应类的信息。简单地理解,其实就是当需要创建一个指定的对象时,我们刚好有一个这样的对象,但是又不能直接使用,我会clone一个一毛一样的新对象来使用;基本上这就是原型模式。关键字:Clone。1 深拷贝和浅拷贝浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。clone明原创 2020-07-09 15:00:30 · 118 阅读 · 0 评论 -
理解简单工厂模式和策略模式的区别
刚刚接触设计模式的时候,我相信单例模式和工厂模式应该是用的最多的,毕竟很多的底层代码几乎都用了这些模式。自从接触了一次阿里的公众号发的一次文章关于 DDD的使用 以后,就逐渐接触了策略模式。现在在项目中运用最多的也是这几种设计模式了,用了设计模式给我的感受就是感觉代码没那么冗余了,再注入一点贫血,充血模型之后,感觉在 service 层面代码看上去很舒服很简洁。首先,我个人感觉策略模式和我们常说的微服务我觉得思想上很像,尤其记得当时介绍DDD时候的举例说的是关于银行的转账案例,用的事务和领...转载 2020-07-07 16:58:08 · 256 阅读 · 0 评论 -
二、IoC 容器基本原理 ——跟我学Spring3
2.2.1 IoC容器的概念IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。在Spring中BeanFactory是IoC容器的实际代表者。Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的...转载 2020-04-20 16:11:47 · 88 阅读 · 0 评论 -
一、IoC 之 2.1 IoC基础 ——跟我学Spring3
1.1.1 IoC是什么Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:●谁控制谁,控制什么:...转载 2020-04-20 16:07:24 · 152 阅读 · 0 评论