- 博客(23)
- 收藏
- 关注
原创 设计模式2.1:单一职责原则
经过之前的学习,我们知道了面向对象编程,以及面向对象的四大特性,在这个基础之上,我们来继续学习设计原则,其中包括,经典的SOLID(五大原则),以及KISS、YAGNI、DRY、LOD等。我们先来学习SOLID原则中的SRP(单一指责原则)。1.如何理解单一职责原则(SRP) ? 一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。2.如何判断类的职责是否足够单一? 不同的应用场景
2021-06-09 16:53:32 161
原创 设计模式1:学习设计模式之前,我们需要了解哪些
(文章是个人对前谷歌工程师王争的设计模式之美专栏内容的学习笔记,文章内容均来自对原文内容的概括,第一篇相当于是对后面学习设计原则以及设计模式的准备的准备工作)1.面向对象的四大特性 java作为一门面向对象的语言,理所应当具有面向对象的四大特性:封装、抽象、继承、多态。后面的设计原则、设计模式很多都是在面向对象特性基础上形成的。接下来的内容也会照着下面这个思路推进。 首先我们来看这四大特性:1.封装 封装也叫做信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式
2021-04-07 17:20:18 511 2
原创 这几种常见的JVM,你了解吗???
(文章是个人对周志明大神的《深入理解java虚拟机》一书的学习笔记,文章内容均来自对原文内容的概括)1.虚拟机始祖:Sun Classic/Exact VMSun Classic是java世界的第一款商用虚拟机,以今天的视角看来,Sun Classic虚拟机的技术已经相当原始,这款虚拟机最初的使命也早已终结。这款虚拟机只能使用纯解释器的方式来执行,这也意味着如果你需要在开发时使用及时编译的功能,你就必须外挂即时编译器,其中的Sun Workshop JIT就是Sun公司提供的一款即时编译器,其他类似的外
2021-03-28 14:41:06 787 1
原创 AJAX跨域问题
AJAX跨域问题1.什么是AJAX跨域问题 前后端分离开发的模式下,存在前端页面只能请求同一个域下的后端接口,如果不是同一个域,就会产生跨域问题。2.为什么会发生AJAX跨域?1.浏览器限制,并而不是服务器后台不允许调用。2.跨域:协议,域名(IP),端口,任何一个不一样,浏览器就会认为是跨域3.我们发送的是XHR(XMLHttpRequest请求)3.解决思路1.浏览器限制:我们跨域通过指定参数,让浏览器不
2021-01-22 15:06:08 132
原创 一篇上手Stream流操作
1.体验Stream流案例需求按照下面的要求完成集合的创建和遍历创建一个集合,存储多个字符串元素把集合中所有以"张"开头的元素存储到一个新的集合把"张"开头的集合中的长度为3的元素存储到一个新的集合遍历上一步得到的集合原始方式示例代码public class StreamDemo { public static void main(String[] args) { //创建一个集合,存储多个字符串元素 ArrayList<String> list = new Array
2020-11-18 15:27:36 142
原创 集合综合练习----斗地主小游戏
1.模拟斗地主案例-普通版本案例需求通过程序实现斗地主过程中的洗牌,发牌和看牌代码实现public class PokerDemo { public static void main(String[] args) { //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 ArrayList<String> array = new ArrayList<String>(); //往牌盒里面装牌 /* ♦2,♦3,♦4...♦K,♦A ♣
2020-11-18 14:43:08 126
原创 Collections集合工具类
1.Collections概述和使用Collections类的作用是针对集合操作的工具类Collections类常用方法示例代码public class CollectionsDemo01 { public static void main(String[] args) { //创建集合对象 List<Integer> list = new ArrayList<Integer>(); //添加元素 list.add(30); list.add(20)
2020-11-18 14:38:54 321
原创 java基础-Map集合
1.Map集合1.1Map集合概述和特点Map集合概述interface Map<K,V> K:键的类型;V:值的类型Map集合的特点1.键值对映射关系2.一个键对应一个值3.键不能重复,值可以重复4.元素存取无序Map集合的基本使用public class MapDemo01 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap&
2020-11-18 14:33:30 94
原创 java基础-泛型
1.泛型概述和好处泛型概述是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型。它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口泛型定义格式<类型>:指定一种类型的格式。这里的类型可以看成是
2020-11-18 11:29:28 73
原创 java基础-Collection集合
1.Collection集合1.1集合体系结构集合类的特点提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变集合类的体系图1.2Collection集合概述和基本使用Collection集合概述是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现Collection集合基本使用public class CollectionDemo01 { public static
2020-11-18 11:16:43 120
原创 java反射机制
1.反射的概述是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展2.获取Class类对象的三种方式1.类名.class属性2.对象名.getClass()方法3.Class.forName(全类名)方法public class ReflectDemo { public static void main(String[] args) throws ClassNo
2020-11-17 15:08:35 76
原创 java的类加载机制
一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载1.类加载类加载的描述当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者类初始化类的加载就是指将class文件读入内存,并为之创建一个 java.lang.Class
2020-11-17 11:24:50 140
原创 java线程池
java线程池的使用背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能的影响很大思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回线程池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通。好处:提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理corePoolSize:核心池的大小maxmumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间会终止线
2020-11-09 19:14:32 93
原创 数据库中的索引(待完善)
一.Btree索引和Hsah索引 在数据量较小的情况下,我们的内存完全可以存储数据库中的数据,就算是进行全表扫描也不会太慢,当表中的数据量越来越大时,索引的作用也体现出来了。MySQL支持的索引类型: 在MySQL中,我们的索引是在存储引擎层实现的,而不是在MySQL的服务器层实现,不同的存储引擎我们索引的方式是不同
2020-11-06 14:29:11 103
原创 Mybatis-Plus进阶
MP高级功能:我们介绍以下七种高级功能:逻辑删除,自动填充,乐观锁插件,性能分析插件,多租户SQL解析器,动态表名SQL解析器,SQL注入器。逻辑删除1.逻辑删除简介其实就是一种假删除的状态,修改数据库中的标记是否删除的字段,之后再数据库中仍然可以看到这条删除的记录2.逻辑删除的实现首先我们在application.yml中对mybatisplus的配置中设置逻辑删除和未删除的值:mybatis-plus: global-config: db-config: logic-not-d
2020-11-05 21:26:54 224
原创 mybatisplus入门笔记(吐血整理)
一.MyBatis-plus简介及快速入门1.MyBatis vs JPA:MyBatis的优势:1.SQL语句可以自由控制,更灵活,性能较高2.SQL与代码分离,易于阅读和维护3.提供XML标签,支持编写动态SQL语句JPA的优势:1.JPA移植性比较好(使用JPQL语句)2.提供了很多CRUD方法、开发效率高3.对象化程度更高MyBatis的劣势:1.简单的CRUD操作还得写SQL语句2.XML中有大量的SQL要维护3.MyBatis自身功能很有限,但是支持plugin为了解
2020-11-03 19:37:54 1311
原创 mybatisplus官方文档学习笔记五(条件构造器)
说明:以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true以下出现的泛型Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法)以下方法在入参中出现的R为泛型,在普通wrapper中是String,在LambdaWrapper中是函数(例:Entity::getId,Entity为实体类,getId为字段id的getMethod)以下方法入参中的R
2020-11-03 16:04:08 1187
原创 mybatisplus官方文档学习笔记四(CRUD 接口)
一.Service CRUD 接口说明:通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆, 泛型 T 为任意实体对象 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类 对象 Wrapper 为 条件构造器Save// 插入一条记录(选择字段,策略插入)boole
2020-11-03 15:37:55 686
原创 mybatisplus官方文档学习笔记三(代码生成器)
代码生成器AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。下面是一个AutoGenerator的例子:// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中public class CodeGenerator { /** * <p> *
2020-11-03 14:48:23 306
原创 mybatisplus官方文档学习笔记一(快速入门)
mybatisplus一:快速开始添加依赖:1.引入springboot父工程<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> <relativePath/
2020-11-03 11:22:51 523
原创 mybatisplus官方文档学习笔记二(注解)
@TableName(表名注解):属性 类型 必须指定 默认值 描述1.value |String |否 |"" |表名2.schema |String |否 |""| schema3.keepGlobalPrefix| boolean |否 |false |是否保持使用全局的 tablePrefix 的值(如果设置了全局 tablePrefix 且自行设置了 value 的值)4.resultMap |String |否 |""| xml 中 resultMap 的 id5.autoResul
2020-11-03 11:22:19 446
原创 方法引用-lambda的孪生兄弟
一.意义在使用lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作。方法引用的意义就是为了代替lambda中已经存在的相同方案。二.方法引用符“::”该符号为引用运算符,而它所在的表达式被称为方法引用方法引用中的推导和省略:如果使用lambda,那么根据可推导就是可省略的原则,无需指定参数类型,也无需指定重载形式,它们都将被自动推导。如果使用方法引用,也是同样可以根据上下文自动推导。方法引用是lambda的孪生兄弟三.方法引用的类型1.引用类方法,其实就是引用类的静态
2020-11-02 17:28:53 142
原创 lambda表达式
lambda表达式:使用条件:1.有一个接口2.接口中只定义了一个方法用处:在我们需要传入一个接口类型的参数时,我们不用去写它的实现类,可以直接用lambda表达式作为参数的形式传递。接口:public interface Addable { int add(int x,int y );}示例类:public class AddAbleDemo { public static void main(String[] args) { useAddable((
2020-11-02 15:10:16 95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人