Java
文章平均质量分 62
Java相关
Patrick&Star
低端饱和,中端平衡,高端稀缺
展开
-
Synchronized
一. 引言因代码中从来没有写过该类代码,但是又不能不了解,更不能不会写,为了梦想还是得学下.–每个人都知道怎样做才是最正确的,但是很少有人去那样做,因为那样做太TM辛苦了!二. 介绍synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码们,作用对象是调用这个代码的对象;修饰一个方法,被修饰的方法被称为同步方法,其作用范围是整个方法,作用对象是调用这个方法的对象修改一个静态原创 2021-11-08 15:42:18 · 510 阅读 · 0 评论 -
两个Java项目使用同一个端口号
引言最近是部署两个项目的时候需要使用相同的端口号,但是这两个项目却不能将代码合并,真是个头大的问题,上网上搜也搜不到好的方法我的环境是windows注意: 首先你这两个项目中最好不要有相同的路由地址,否则接口调用会冲突我的方法就是使用nginx的转发来解决的安装nginx1.下载nginxhttp://nginx.org/en/download.html 下载稳定版本,以nginx-1.12.2.zip为例,直接下载 nginx-1.12.2.zip下载完后直接解压2.原创 2021-06-03 10:53:43 · 1652 阅读 · 0 评论 -
设计模式七大原则-合成复用原则
引言在软件开发中,为了提高软件系统的可维护性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本合成复用原则的定义合成复用原则(Composite Reuse Principle, CRP)又叫组合/集合复用原则.它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现.如果要使用继承关系,则必须严格遵守历史替换原则.合成复用原则同历史替换原则相辅相成的,两者都是开闭原则的具体实现规范合成复用原则的重要原创 2021-05-28 16:50:42 · 237 阅读 · 0 评论 -
设计模式七大原则-迪米特法则
引言在软件开发中,为了提高软件系统的可维护性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本迪米特法则的定义迪米特法则(Law of Demeter,LoD)又叫做最少知识原则,产生于1987年美国东北大学的一个名为迪米特的研究项目,由伊恩·荷兰提出,被UML创始者之一的布奇普及,后来又因为在经典著作<<程序员修炼之道>>提及而广为人知迪米特法则的定义是:只与你的直接朋友交谈,不跟"陌生人"说活.其含义是:如果原创 2021-05-28 15:11:15 · 160 阅读 · 0 评论 -
设计模式七大原则-接口隔离原则的定义
引言在软件开发中,为了提高软件系统的可维护性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本接口隔离原则的定义接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。2002 年罗伯特·C.马丁给“接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最原创 2021-05-28 15:08:26 · 227 阅读 · 0 评论 -
设计模式七大原则-单一职责原则
引言在软件开发中,为了提高软件系统的可维护性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本单一职责原则定义单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是只类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分该原则提出对象不应该承原创 2021-04-22 18:15:45 · 160 阅读 · 0 评论 -
设计模式七大原则-依赖倒置原则
引言在软件开发中,为了提高软件系统的可维护性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本依赖倒置原则定义依赖倒置原则(Dependence Inversion Principle,DIP)是 Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)于 1996 年在 C++ Report 上发表的文章。依赖倒置原则定义为: 高层模块不应该依赖底层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖原创 2021-04-22 16:57:51 · 318 阅读 · 1 评论 -
设计模式七大原则-里氏替换原则
引言在软件开发中,为了提高软件系统的可维护性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本历史替换原则定义里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫(Liskov)女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》(Data Abstraction and Hierarchy)里提出来的,她提出: 继承必须确原创 2021-04-22 16:30:43 · 144 阅读 · 0 评论 -
设计模式七大原则-开闭原则
引言在软件开发中,为了提高软件系统的可维护性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本开闭原则的定义开闭原则由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭这就是开闭原则的经典定义.这里的软件实体包括以下几个部分:项目中划分出的模块类与接口方法开闭原则原创 2021-04-22 16:29:55 · 160 阅读 · 0 评论 -
设计模式-装饰者模式详解.md
定义动态地给一个对象添加一些额外的职责.就增加功能来说,装饰者模式比生成子类更为灵活装饰者模式是一种对象结构型模式使用场景在不影响其他对象的情况下,以动态,透明给单个对象添加职责需要动态的给一个对象增加功能,这些功能动态的被撤销当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时.不能采用继承的情况主要有两类:第一类是系统中存在大量的独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;第二类是因为类定义不能继承角色抽象构建角色: 定义一个对象接口或抽象原创 2021-04-22 15:20:33 · 102 阅读 · 0 评论 -
Java多态详解
引言今天在写代码的时候突然看到一个堆多态的详解,说的很详细,没错是我看一遍看不懂的那种.本以为自己对多态还是比较了解的,但是看了下面这道面试题我沉默了面试题class A { public String show(D obj)...{ return ("A and D"); } public String show(A obj)...{ return ("A and A"); }}class B extends A{原创 2021-04-21 16:02:28 · 234 阅读 · 0 评论 -
关于Java字符串中拼接换行符
引言今天在写代码的时候发现一个问题,用普通打印/n会进行回车,但是从数据库中获取的值/n不会进行变换问题如下 System.out.println("大爷!你好大爷\n,咱这是到哪去啊?"); // 从数据库获取的值(跟数据库存储的内容是一模一样的) System.out.println(parameterValue + "到二仙桥");输出:大爷!你好大爷,咱这是到哪去啊?巡查地点: {NAME}\n任务状态: {STATUS}\n原因: {R原创 2021-04-21 11:02:09 · 14224 阅读 · 7 评论 -
UDP和TCP协议详解
一. 引言网络协议是每个程序员都要掌握的基础知识,干啥都离不开网络,就算在家里新买了个路由器不是吗,同事连不上网,你的女朋友手机没有网看剧了正看到高潮部分,到那时候你打开百度…那嫌弃的你的眼神仿佛在说,就这?程序员连个网都不会修?以上都是臆想,以实际为准.虽然看完本文章,你还是需要去百度怎么修复网络问题,但是你已经知道为什么会出现这种问题了!二. UDPUDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议.在OSI中,第四层传输层,处于IP协议的上一层UDP原创 2021-03-19 09:45:44 · 1616 阅读 · 0 评论 -
ArrayList详解
一. 引言ArrayList是Java集合框架中比较常用的数据结构了.继承自AbstractList,实现了List接口.底层基于数组实现容量大小动态变化.允许null的存在.同时还实现了RandomAccess,Cloneable,Serializable接口,所以ArrayList是支持快速访问,赋值,序列化的二. 成员变量ArrayList底层是基于数组来实现容量大小动态变化的private int size; // 实际元素个数transient Object[] elementData原创 2021-03-19 09:43:38 · 164 阅读 · 0 评论 -
LinkedList详解
一. 引言其实想知道LinkedList是个啥,知道什么是链表,什么是数组即可数组特点在内存中,数组是一块连续的区域.数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间.三种情况有空间没有被使用太多就要扩容数组更换数组插入,删除效率低.因为其连续性,插入和删除一个元素其后面的元素都要向前或向后移动随机读取效率高.因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据不好扩展,有时候数组空间不够要重新定义数组链表特点在内存中可以存在任何地方,不原创 2021-03-19 09:42:00 · 4581 阅读 · 2 评论 -
HashMap详解
HashMap引言哈希表(HashTable)也称散列表,是一种非常重要的数据结构,应用场景机器丰富,许多缓存技术的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中HashMap的实现原理进行讲解,并对JDK7的HashMap袁爱民进行分析什么是哈希表首先来了解下其他的数据结构再讲数组采用一段连续的存储单元来存储数据.对于制定下标的查找,时间复杂度为O(1),通过给定值进行查找,需要遍历数组,注意对比给定关键字和数组元素,时间复杂度为O(n),当然对于有序数组,正则可以原创 2021-03-19 09:40:26 · 378 阅读 · 0 评论 -
ConcurrentHashMap
一. 引言HashMap众所周知底层是基于数组+链表组成的,不过在jdk1.7和1.8中具体实现稍有不不同,二. Java1.7上图是HashMap中的比较核心的几个成员变量初始化容器大小,因为底层是数组,所以这是数组默认大小容器最大值默认的负载因子(0.75)table真正存放数据的数组map存放数量的大小容器大小,可在初始化时显示指定负载因子,可在初始化显示指定负载因子因为hashMap的容量大小是固定的,比如默认初始化: public HashMap() {原创 2021-03-19 09:39:02 · 160 阅读 · 1 评论 -
SpringBoot整合netty
引入依赖 <!-- netty依赖 --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.42.Final</version> <scope>c原创 2021-03-19 09:25:36 · 170 阅读 · 0 评论 -
@Bean和@Autowaired区别
引言今天在构建项目的时候引入redisUtils的时候发生了错误,错误如下***************************APPLICATION FAILED TO START***************************Description:Field redisTemplateDB0 in net.cc.ucare.adsbhandler.config.RedisConfiguration required a single bean, but 2 were found:原创 2021-03-19 09:23:07 · 396 阅读 · 1 评论 -
新建一个普通的SpringBoot项目
新建SpringBoot项目首先,File->New->Project新建项目选择这个,其他,默认即可根据需求填写如下下一步,选择Spring版本,和想要导入的依赖们,我这里选择一个SpringWeb和数据库相关依赖就好单击下一步.输入文件夹名称和存储路径接下来等待依赖自动导入完成即可...原创 2021-03-19 09:19:33 · 196 阅读 · 0 评论 -
MySQL-Spring的事务机制
文章目录MySQL 事务引言特点Spring的事务机制JAVA EE传统事务机制Spring事务机制使用手动回滚MySQL 事务引言MySQL事务主要用于处理操作量大,复杂度高的数据,比如说,在人员管理系统中,两个用户同时删除某个人员时,等等,这样就构成了一个事务.特点在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务.事务处理可以用来维护数据的完整性,保证呈批的SQL语句要么全部执行,要么全不执行事务用来管理insert,update,delete语句原创 2021-03-18 09:05:31 · 88 阅读 · 0 评论 -
Java反射基础
静态VS动态语言动态语言是一类在运行时可以改变其结构的语言:例如新的函数,对象,甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化.通俗点说就是在运行时代码可以根据某些条件改变自身机构主要动态语言:Object-c ,c# ,javaScript,PHP,Python等.静态语言与动态语言相对应的,运行时结构不可改变的语言就是静态语言.如Java,c ,c++,Java不是动态语言,但是Java可以称之为准动态语言.即Java有一定的动态性,我们可以加以利用发射机制获得类似动原创 2021-03-18 08:41:16 · 58 阅读 · 0 评论 -
Java异常(Exception)
什么是异常实际工作汇总遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定复合你的要求,你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等.我们的程序跑着跑着内存或者硬盘可能就满了等等软件程序在运行过程中,非常可能遇到感刚刚提到的这些异常问题,我们叫异常,英文名叫Exception,意思是例外,这些,例外情况怎么让我们写的程序作出合理的处理,而不至于程序崩溃异常指程序运行总出现的不期而至的各种状况异常发生在程序运行期间,他影响了正常的程原创 2021-03-17 08:59:11 · 94 阅读 · 0 评论 -
@RequestMapping和@GetMapping和PostMapping的区别.md
其实很简单GetMapping> @GetMaping用于将HTttp get请求映射到特定处理程序的方法注解,具体来说@Getmapping是一个组合注解 = @RequestMapping(method = RequestMethod.GET)的缩写PostMapping@PostMapping用于将Http post请求映射到特定处理程序的方法注解,具体来说,@PostMapping是一个组合注解,是@RequestMapping(method = RequestMetho原创 2021-03-17 08:58:15 · 932 阅读 · 0 评论 -
Java中的事务及使用
什么是事务?事务(Transaction),一般是指要做的或所做的事情,在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元.事务通常由高级数据库曹总语言或编程语言书写并用形式如begin transaction和end tranaction语句来界定,事务由事务开始和事务结束之间执行的全体操作组成为什么要事务?事务事务是为解决数据操作提出的,其实就是控制数据的安全访问事务的四个特性原子性: 事务是数据库逻辑工作单位,而且是必须是源自工作单位,对于其数据修改,要么全部执行,原创 2021-03-17 08:56:46 · 1050 阅读 · 0 评论 -
ubuntu服务器Springboot项目日志时间与系统时间不对应
第一种原因系统时间不对,首先输入date命令查看当前时间date如果不对应则运行如下命令修改系统时间dpkg-reconfigure tzdata //会弹出一个紫色窗口Asia-->Shanghai //选择Asia,然后再选shanghai再运行date查看时间第二种原因是你的程序的时区设置错误这是之前的设置,你们的话也可能没设置获取是其他的jackson:time-zone: Asia/Shanghai 将这个改为jackson: time-zone: G原创 2021-03-17 08:53:24 · 1025 阅读 · 0 评论 -
Java中static,final,public,protect,private使用方法
static 当一个方法或者属性被static修饰的时候调用方法,用类名直接调用即可HelloController().hello2();//注意不能用new对象直接调用静态方法和属性int a = HelloController.a; //注意要放个接收值的final 当一个方法或属性被final修饰的时候调用方法,需要new一个对象然后用对象调用方法HelloController helloController = new HelloController();helloCont原创 2021-03-17 08:51:21 · 364 阅读 · 0 评论 -
枚举类详解,使用方法
理解枚举类型枚举顾明思议:“一个一个举出来”.枚举是一种特殊的数据类型,之所以特殊又比类类型多了特殊的约束,但正是这些学术早就了枚举的简洁,安全以及便捷写一个枚举类没有枚举类的时候我们是这样定义一个类的class Enumtest1{//东南西北↓ public static final int DONG; public static final int NAN; public static final int XI; public stat原创 2021-03-16 08:55:08 · 230 阅读 · 0 评论 -
SpringBoot_MyBatisPlus快速入门小例子
快速入门创建一个表我这里随便创建了一个air空气表idea连接Mysql数据库点击右侧database再点击添加数据库找到Mysql添加用户名,密码,数据库最后点击测试测试成功后在右侧就能看到数据库了创建实体类右键数据库,找到scripted Extensions选择Generated POJOs. groovy然后选择将实体类创建的位置,确定.生成的实体类会有get``set方法,这里我们用lombok注解进行操作@Data //自动生成`get`,原创 2021-03-16 08:41:20 · 117 阅读 · 0 评论 -
@Repository注解和@Mapper注解区别
@Reponsitory注解@Reponsitory使用后,在启动类上需要添加@MapperScan("xxx.xxx.xxx.mapper")注解@Mapper注解@Mapper注解使用后相当于@Reponsitory + @MapperScan注解,会自动进行配置加载原创 2021-03-15 11:06:14 · 507 阅读 · 0 评论 -
MyBatisPlus性能分析插件,条件构造器,代码自动生成器详解
性能分析插件我们在平时的开发中,会遇到一些慢sql,测试,druidMP(MyBatisPlus)也提供性能分析插件,如果超过这个时间就停止不过官方在3.2版本的时候取消了,原因如下条件构造器十分重要: Wrapper我们写一些复杂查询的时候##首先创建一个测试类@SpringBootTestpublic class MyBatisPlusWrapperTest { @Autowired private AirMapper airMapper; }实体类原创 2021-03-15 09:04:00 · 160 阅读 · 0 评论 -
MyBatisPlus分页查询,删除操作
一. 分页查询分页查询在网页使用十分之多原始的limit进行分页pageHelper第三方插件3. MP内置的分页插件导入配置如何使用,官网的代码如下 //分页插件 @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); //原创 2021-03-15 08:57:23 · 996 阅读 · 0 评论 -
MyBatisPlus乐观锁,乐观锁竟然如此简单
一. 乐观锁在编程过程中,我们经常会被问到乐观锁,悲观锁,都非常简单乐观锁:顾名思义,思想十分乐观,总是认为不会出现问题,无论什么都不去上锁!如果出现了问题,就再更新测试悲观锁:顾明思义,思想十分悲观,总是认为总会出现问题,无论什么都去上锁!再去操作我们主要来讲一下乐观锁机会官网的解释是这样的乐观锁:1. 先查询,获取版本号version = 1;A--线程update air set name = "chougoushi", version = version + iwh原创 2021-03-12 09:11:02 · 452 阅读 · 0 评论 -
MyBatisPlus配置日志,CRUD的使用,基础配置
一. 配置日志我们所有的sql在mybatisplus是不可见的,所以在开发中需要配置日志,开发完成后,就可以取消日志了,因为日志也是损耗资源的# 配置日志mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #仅控制台输出的日志配置完日志后,后面的学习就需要注意自动生成的SQL,相信你们会喜欢上MybatisPlus二. CRUD使用Insert插入原创 2021-03-12 09:08:18 · 276 阅读 · 0 评论 -
SpringBoot-MyBatisPlus快速入门小例子
快速入门创建一个表我这里随便创建了一个air空气表idea连接Mysql数据库点击右侧database再点击添加数据库找到Mysql添加用户名,密码,数据库最后点击测试测试成功后在右侧就能看到数据库了创建实体类右键数据库,找到scripted Extensions选择Generated POJOs. groovy然后选择将实体类创建的位置,确定.生成的实体类会有get set方法,这里我们用lombok注解进行操作@Data //自动生成`get`,`原创 2021-03-12 09:02:15 · 120 阅读 · 0 评论 -
@Repository注解和@Mapper注解区别
@Reponsitory注解@Reponsitory使用后,在启动类上需要添加@MapperScan("xxx.xxx.xxx.mapper")注解@Mapper注解@Mapper注解使用后相当于@Reponsitory加@MapperScan注解,会自动进行配置加载原创 2021-03-12 08:58:29 · 754 阅读 · 0 评论 -
SpringMVC之RequestContextHolder分析
看源码的时候发现可以在service获取request和response,正常来说在service层是没有request的,然而直接从controlller传过来的话解决方法太粗暴,后来发现了SpringMVC提供的RequestContextHolder来研究一下,并借此对SpringMVC的结构深入了解一下#1.RequestContextHolder的使用RequestContextHolder顾名思义,持有上下文的Request容器.使用是很简单的,具体使用如下:RequestAttr.原创 2021-03-12 08:57:04 · 214 阅读 · 0 评论 -
idea只导入部分依赖(部分依赖爆红)
首先为啥会导入部分依赖的呢?可能是网络问题下载不下来,可以排除这一个,因为刚换的merrio阿里的源,而且之前都能下载也可能是maven的设置问题,上网上搜了一些设置之后,还是不管用然后怀疑是不是缓存的原因导致重复读取错误,然后点击clean重新刷新,还是不行突然想起来因为之前的maven仓库不全,所以重新换了一个maven仓库,所以把所有的设置都改为D:的路径了因为新的除了镜像源其他配置都没动,所以导致了这个错误修改了setting为默认和仓库地址后成功添加所有依赖(把ove原创 2021-03-12 08:54:58 · 675 阅读 · 0 评论 -
SpringBoot常用配置,引入外部配置文件信息,热加载
SpringBoot的配置文件格式yml规范SpringBoot的配置文件支持properties和yml,甚至还支持json.更推荐使用yml文件格式:yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置.yml文件,相比properties更轻量级一些yml文件的劣势:严格遵守换行和缩进在填写value时一定要在:后面加一个空格yml使用在这里我创建两个application的文件分别为application-prov和application-dev将设置原创 2021-03-12 08:49:19 · 455 阅读 · 0 评论 -
idea的yml文件不识别问题(图标为灰色)
idea的yml文件不识别问题每次当我写yml文件的时候都没有提示,而且yml文件的图标竟然是txt的图标然后我上网查阅,发现在下面这里竟然连yml文件都无法添加设置为配置文件然后我使用网上的下载yaml插件,发现我的插件都已经存在了呀然后我就把插件中的所有对勾全部取消,又重启了下,MD还是不行.后来我参照网上有个人的方法,点击Setting->Edit->FileType->找到txt格式,如果是别的图标就找对应的格式就会在其中找到applicati原创 2021-03-12 08:47:22 · 3198 阅读 · 5 评论