自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

flunggg的博客

java后端

  • 博客(95)
  • 收藏
  • 关注

原创 设计模式:7大原则加例子

文章目录1. 前言2. UML类图2.1 泛化(Generalization)2.2 实现(Realization)2.3 依赖(Dependency)2.4 关联(Association)2.5 组合(Composite)2.6 聚合(Aggregation)3. 其他原则3.1 单一责任原则3.2 接口隔离原则3.3 依赖倒置(倒转)原则3.4 里氏替换原则3.5 开闭原则3.6 迪米特原则3.7 合成复用原则4. 总结5. 设计模式因为疫情回不了校,5月份打算学设计模式,《HeadFirst设计模

2020-08-05 00:06:37 685 3

原创 判断是否存在emoji表情

在公司开发微信小程序时产品说如果商家名有含表情,则提示不能输入表情。然后就面向百度开发。网上很多都是判断不完整的,用我这个,直接copy,不用研究。 /** * 判断字符串是否含有Emoji表情 **/ private static boolean isHasEmoji(String reviewerName) { Pattern pattern = Pattern.compile("(?:[\uD83C\uDF00-\uD83D\uDDFF]" + /

2021-01-28 16:13:35 1241

原创 软件开发速学计网:应用层

前言,要完整的学计网看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了。有错请指出,谢谢文章目录1. DNS协议1.1 为什么要有DNS协议?1.2 DNS协议1.3 DNS解析1.4 CDN技术(了解)1.5 一些网站访问慢的原因2. DHCP协议2.1 DHCP协议获取IP地址的过程2.2 作用3. HTTP协议3...

2020-10-08 13:05:40 1245 3

原创 数据库范式

文章目录什么是范式?第一范式(1NF)第二范式(2NF)函数依赖完全函数依赖部分函数依赖传递函数依赖超关键字/超键/超码/码候选码/候选键主键主属性非主属性第三范式(3NF)BC范式(BCNF)总结今天刚好回忆下范式,参考这篇 如何理解关系型数据库的常见设计范式? 文章,我在此文章进一步改进。什么是范式?教材书这样定义:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。实话实说,真不懂!!然后看了博主的文章解释的很好。也就可以理解为:一张数据表的表结构所符合的某种设计标准

2020-10-02 02:33:21 2352 4

原创 HashMap源码详解

前言HashMap 是基于哈希表对 Map 接口的实现,增删改查的时间复杂度都可以看成是O(1)(平均地),性能很高,但是内存的消耗也很高。存储的是键值对,允许存储 key 为 null 和 value 为 null,但是一个 HashMap 中只有一个 key 为 null,可以有多个 value 为 null。哈希表有哈希函数,而且可能存在哈希碰撞/哈希冲突的问题。哈希函数:一种算法,可以让 key 映射到哈希表中的存储位置。哈希冲突:哈希表会让 key 通过一个哈希函数映射到哈希表中的某个位置

2020-08-26 22:28:03 575

原创 [剑指 Offer] 35. 复杂链表的复制

题目leetcode 剑指 Offer 35. 复杂链表的复制提供的Node:static class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}题解解法一:用hashMap很简单,key为原节点,value

2020-08-13 21:50:59 153

原创 SpringBoot集成ElasticSearch出现的异常

1. 异常在使用springboot2.2.8+elasticsearch6.8.10时,测试时报错:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchClient' defined in class path resource [org/springframework/boot/autoconfigure/data/elastic

2020-08-08 20:37:05 5210

原创 设计模式:装饰者模式

文章目录1. 装饰者模式2. 实现3. Java中的装饰者模式4. 总结1. 装饰者模式装饰器模式(Decorator Pattern)允许向一个现有的对象动态地添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。什么意思呢?比如去吃火锅,我们会先选择一种汤底(假设是鸳鸯锅),然后选择食材(假设是牛肉,生菜)来搭配该汤底。本质上就是一个鸳鸯锅,而牛肉、生菜等食材是用来“装饰”该鸳鸯锅的,或者说这些食材用来扩展鸳鸯锅的功能(除非你是来喝汤的)。装饰器模式由为

2020-08-04 18:04:47 274

原创 设计模式:适配模式与外观模式

文章目录1. 适配器模式2. 适配器模式的实现2.1 “对象”适配器2.2 “类”适配器3. 适配器模式总结4. 外观模式5. 外观模式的实现6. 外观模式的总结1. 适配器模式该模式容易理解,在现实中有种东西叫转换头,比如插座转换头(把三头插变成二头插的接口等),type转换头等。总之就是把一个接口转换成另一个接口,而适配器模式的作用也是一样,比如已有一个软件系统,现在希望跟一个新的厂商类库搭配使用,但是该新厂商设计的接口跟旧厂商设计的接口不同,如下:有一种方法就是去修改旧厂商的代码使得接口跟新厂

2020-08-04 18:01:46 259

原创 设计模式:命令模式

1. 命令模式命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化。比如在餐厅,我们只需要在订单上勾选想吃的,而服务员只需要把这份订单交给厨师,服务员就是中介,他并不需要如何做菜;或者一个遥控器,遥控器不需要知道如何实现灯光的开关命令,只需要知道按“开”的按钮就开灯等。命令模式的组成:接收者、请求者、命令(如果想要扩展,那就定义成接口)。比如上面的餐厅:接收者是厨师、请求者是服务员、命令是订单、顾客是客户端。命令模式的类图:2. 实现假设制作一个简易遥控器,要求对灯光进行开

2020-08-04 17:58:17 124

原创 模式模式:模板方法

1. 模板方法模板方法:在一个方法中定义一个算法的骨架(步骤),而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法的类图:2. 实现假设有一家店卖咖啡和茶,对于咖啡的冲泡法有4个步骤:把水煮沸;咖啡滴过过滤器;倒进杯子;加糖。而茶的冲泡法也有4个步骤:把水煮沸;用沸水冲泡茶包;倒进杯子;加柠檬。现在来设计这两个类,从上面的步骤来分析两个类,第一个步骤和第三个步骤是一样的,而第二和第四个步骤是完全不同,如果设计一

2020-08-04 17:56:50 293

原创 设计模式:观察者模式

1. 观察者模式观察者模式(Observer)是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。比如关注某博主,当博主发布新文章时,就会通知你;在邮箱中也可以订阅某些文章,文章更新时会发邮件给你等。观察者模式又可称为发布-订阅模式(Publish/Subscribe)。观察者的结构由两部分组成,分别为Subject和Observer,UML图如下:2. 实现想来想去还是拿《HeadFirst设计模式》中观察者章节的气象监测

2020-08-04 17:51:21 217

原创 设计模式:工厂模式

任何可以生产对象的方法或类,都可以称为工厂。单例模式也是一种工厂。1. 工厂模式(静态工厂模式/简单工厂模式)先来看看下面的例子:汉堡店卖汉堡假设目前有三种种类的汉堡:鸡腿汉堡、牛肉汉堡、鲜虾汉堡。可以使用一个通用接口:public abstract class Burger { String name; void machining() { System.out.println("制作" + this.name + "中"); } void b

2020-08-04 17:49:56 193

原创 设计模式:策略模式

文章目录1. 引入2. 策略模式3. 实现4. 总结类图是以前画的,不是正规画法,目前在备战秋招没时间以后在该1. 引入先来看看一个例子:飞机大战public class Aircraft { /** * 切换攻击方式 */ public String attackMode(int change) { if(change == 1) { return "双弹攻击"; } else if(change ==

2020-08-04 17:48:19 210

原创 设计模式:代理模式

文章目录1. 代理模式2. 静态代理3. 动态代理3. Cglib代理3.1 实现4. 代理模式的变体4.1 防火墙代理4.2 缓存代理4.3 远程代理4.4 同步代理1. 代理模式代理模式:为一个对象提供一个替身,以控制对这个对象(被代理)的访问。即通过代理对象访问目标对象。这样的好处是:可以在目标对象实现的基础上,增强额外的功能操作(符合开闭原则)。被代理的对象可以是远程对象、创建开销大的对象、需要安全控制的对象。代理有三种形式:静态代理、动态代理(可称JDK代理或接口代理)、Cglib代理(可

2020-08-04 12:04:30 172

原创 设计模式:单例模式

文章目录1. 饿汉式2. 懒汉式3. 静态内部类方式4. 枚举形式5. 总结单例模式(Singleton Pattern),就是只有一个实例。如果一个全局使用的类频繁地创建和销毁,就可以考虑使用单例模式。实例只能由类本身来创建,不能被其他方式创建。单例模式的实现方式有很多种。1. 饿汉式我们常用的只创建一个对象的方法就是使用java的静态变量,类加载到内存后,就实例化一个单例,由JVM来保证线程安全。public class Main1 { private final stati

2020-08-04 11:02:40 141

原创 Java多线程基础

文章目录1. 前言2. 程序,进程,线程3. 创建线程4. 线程的状态5. 线程的停止5.1 stop() 的问题5.2 destroy() 的问题5.3 使用标记来停止线程6. 线程的其他方法6.1 sleep()6.2 yield()6.3 join()6.4 线程名6.5 线程的优先级6.6 守护线程7. 线程同步7.1 引入7.3 同步概念7.3 使用同步7.4 改正例子8 死锁9. Lock锁10. 生产者与消费者11 线程池1. 前言多进程也就是多任务,比如边吃饭边玩手机,看起来好像做了两件

2020-08-04 00:34:54 206

原创 [Leetcode] 141. 环形链表

题目141. 环形链表解题leetcode给出的方法参数只有ListNode,一开始我一直搞不懂这个pos要怎么接收??思路一:使用哈希表,让每一个节点做key,value记录每一个节点出现的次数。如果有一个节点出现两次说明有环。这里使用HashMap或者HasnSet都可以。 /** * 每次把哈希表中没有的结点添加到哈希表中。 * 如果是环,那么在尾结点的下一个结点肯定在哈希表中,此时就可以说明有环。 * 如果不是环,那么在尾结点的下一个结点就是nul

2020-08-03 22:55:02 106

原创 [Leetcode] 234. 回文链表

题目:解法一: 还是跟上道题差不多,可以使用数组(可变数组),把链表的节点的值存入数组,然后使用双指针判断,一个从左到中间,另一个从右到中间。 public static boolean isPalindrome(ListNode head) { ArrayList<Integer> list = new ArrayList<>(); // 把链表的值复制到数组中 ListNode cur = head; w

2020-07-28 00:30:39 166

原创 剑指 Offer 24. 反转链表

题目:暴力解法一:可以利用栈来做,先把每一个Node压入栈,再取出放入另一个新链表。 public ListNode reverseList(ListNode head) { if(head == null) { return null; } // 最好别去破坏原链表 ListNode cur = head; // 压入栈 Stack<ListNode> stack

2020-07-28 00:28:19 128

原创 JavaWeb总结

文章目录1. JavaWeb 入门1.1 Web应用程序1.2 Web服务器1.3 Tomcat1.4 HTTP2. 什么是Servlet2.1 使用Servlet2.2 Servlet原理2.3 ServletContext2.3.1 共享数据2.3.2 获得初始化参数2.3.3 请求转发2.3.4 读取资源文件2.4 HttpServletResponse2.4.1 下载文件(了解)2.4.2 重定向2.5 HttpServletRequest3. Cookie,Session3.1 会话3.2 保存会

2020-07-15 20:40:28 687

原创 数据结构:数组

文章目录1. 简介2. 二次封装数组2.1 添加操作2.2 查找操作2.3 修改操作2.4 删除3. 动态数组4. 时间复杂度4.1 普通数组4.2 动态数组1. 简介数组是最基本的数据结构,属于线性表。存储一个固定大小的相同类型元素的顺序集合。最大的优势就是支持随机访问,即知道索引就可以访问。但是数组的长度一旦声明就是固定死的。接下来来使用数组二次封装实现栈,队列。2. 二次封装数组二次封装来实现数组的增删改查。创建一个泛型类,其中有两个成员属性public class Array<

2020-07-02 17:35:12 174

原创 软件开发搞定操作系统

文章目录1. 前言2. 操作系统的演进3. 操作系统相关概念4. 进程管理4.1 进程4.2 线程4.3 进程状态4.4 同步4.5 Linux进程5. 作业管理5.1 进程调度5.2 死锁6. 存储管理6.1 内存分配与回收6.2 内存回收6.3 内外碎片6.4 存储的管理6.4.1 页式存储管理6.4.2 段式存储管理6.4.3 段页式存储管理6.5 虚拟内存6.6 Linux存储管理6.6....

2020-04-22 12:13:16 1553 3

原创 软件开发搞定计算机组成原理:计算篇

文章目录1. 进制1.1 概述1.2 进制的转换1.2.1 任意进制转十进制1.2.2 十进制转二进制1.2.3 小数点的十进制转换二进制1.2.4 二进制转其他进制2. 有符号数与无符号数2.1 原码2.2 反码2.3 补码2.3.1 补码的溢出2.3.2 补码的原理(了解)2.3.3 小数的补码3. 定点数4. 浮点数4.1 二进制科学计数表示法4.2 IEEE754的表示方法(重要)4.3...

2020-04-08 10:56:52 1171 9

原创 软件开发搞定计算机组成原理:组成篇

1. 计算机的总线1.1 总线概述提供了对外连接的接口,也促使外部设备接口的统一。比如USB(Universal Serial Bus,通用串行总线)接口,使得 不同设备可以通过USB接口进行连接。假设没有总线的计算机,当连接上外部设备时,如下图,线路会变得更加复杂。当有了总线后:1.2 总线的分类可分为片内总线和系统总线。片内总线:芯片内部的总线,连接寄存器与寄存器,连接寄...

2020-03-25 20:25:10 2991 11

原创 数据结构:手撕二分搜索树

参考:慕课网liuyubobobo老师,突然发现网上好多教程都是参考他的,我也补充了liuyubobobo老师说的一些没有实现的方法,比如中序和后序的非递归写法,floor等。推荐看《算法第四版》,树的知识讲得贼好。

2020-03-12 19:31:07 1805 5

原创 软件开发搞定计算机组成原理:概述篇

1. 发展史计算机的发展一共有四个阶段:第一阶段:电子管(下图)计算机。第一台电子管计算机是:埃尼阿克(ENIAC)(下下图)。第二阶段:晶体管(下图)计算机。比较出名的计算机:TX-0(全世界第一台)和PDP-1(带有屏幕)。第三阶段:集成电路计算机。操作系统在此诞生(IBM开发)。(当时的电脑,跟我们以前的大头计算机很像了)第四阶段:超大规模集成电路计...

2020-03-09 11:59:25 1022 3

原创 typora自动上传图片

前言typora最新版有了自动上传图片的插件,比以前那个插件好用。在本地插入图片后,虽然显示的相对路径(我设置的),但是在博文发到博客时,就把我的图片上传到github。github访问速度不稳定,哎原因不需要我BB了,下面我用的是PicGo-Core插件。、github图床配置打开你的github,创建仓库:点击右上角你的头像中有Settings:然后跳到Sett...

2020-03-07 17:38:29 5466 7

原创 数据结构:手撕链表

1. 简介链表也是最基础的数据结构,属于线性表。链表就像火车一样,每一个车厢互相连接,这些车厢就是一个个结点(Node)。链表就是通过这些结点的连接形成的。对比于数组,链表不支持随机访问,所以数组的访问速度非常快,而链表就慢了。但是链表的长度是动态的,这一点比数组好,不会浪费空间。2. 创建链表把结点Node封装在类中,因为用户是不需要知道有Node结点这些概念。public class...

2020-02-29 10:22:29 1565 3

原创 软件开发速学计网:传输层

前言,要完整的学计网看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了。有错请指出,谢谢文章目录1. 概述2. UDP协议2.1 UDP的组成2.2 UDP的特点3. TCP协议3.1 TCP的特点3.2 TCP的组成(只看首部)4. 可靠传输的基本原理4.1 停止等待协议4.2 ARQ协议5. TCP协议的可靠传输6....

2020-02-25 16:47:25 799

原创 软件开发速学计网:网络层

前言,要完整的学计网看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了。网络层的知识比较多,有错请指出,谢谢文章目录1. 虚拟互连网络2. IP协议2.1 IP地址2.2 IP协议的组成(重要)3. IP协议的转发流程3.1 路由表3.2 IP协议的转发流程4. ARP协议5. RARP协议6. IP地址的子网划分6....

2020-02-22 17:32:45 1285 2

原创 软件开发速学计网:数据链路层

前言,数据链路层我也写得不全,要学全看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了。有错请指出文章目录1. 封装成帧2. 透明传输3. 差错检测3.1 奇偶校验码3.2 循环冗余校验码CRC4. MTU5. 以太网协议5.1 MAC地址5.2 以太网协议6. 总结1. 封装成帧“帧”是数据链路层的基本单位。发...

2020-02-22 17:11:46 389

原创 软件开发速学计网:物理层

前言,因为物理层偏向硬件方面,我搞软件的,所以不会写全,只需要知道物理层存在的意义,以及一些简单的认识。要学全看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了文章目录1. 作用2. 物理介质(了解)3. 信道的基本概念4. 分用-复用技术5. 总结额外内容转载:[网卡,交换机,网桥,路由器,网关工作在OSI模型哪一层...

2020-02-17 18:23:31 530

原创 软件开发速学计网:入门

1. 概念网络(network):许多计算机连在一起。互联网(internet):许多网络使用路由器连在一起。图中的圆盘就是路由器。因特网(Internet):全球最大的一个互联网,采用TCP/IP 协议族作为通信规则。注意:互联网和因特网的英文名的首字母的区分。internet指的是网络中的网络;Internet是一个专有名词。2. 互联网发展的三个阶段(了解下名词...

2020-02-12 22:58:10 2923 4

原创 快速回顾 MySQL:性能问题

现在回顾一下前面的重点,提供进行性能优化探讨(下面的内容并不能完全决定MySQL的性能):首先,MySQL(与所有的DBMS)一样具有特定的硬件建议。在学习和研究MySQL时,使用任何旧的计算机作为服务器都可以。但对于生成的服务器来说,应该遵循这些硬件建议。一般来说,关键的生产DBMS应该允许在自己的专用服务器上。MySQL是用一系列的默认设置预先配置的,这些设置开始通常是很好的。但过一段...

2020-01-22 00:14:58 2886

原创 快速回顾 MySQL:字符集、校对顺序和安全管理

前提要述:参考书籍《MySQL必知必会》文章目录17.1 字符集和校对顺序17.1.1 使用字符集和校对顺序17.2 安全管理17.2.1 访问控制17.2.2 管理用户17.2.3 创建用户账号17.2.4 删除用户账号17.2.5 设置访问权限17.2.6 更改口令17.3 数据库维护17.3.1 备份数据17.3.2 进行数据库维护17.3.3 其他指令17.3.4 查看日志文件17...

2020-01-22 00:14:09 1573

原创 快速回顾 MySQL:游标、触发器和事务处理

前提要述:参考书籍《MySQL必知必会》文章目录16.1 游标16.1.1 创建游标16.1.2 使用游标16.2 触发器16.2.1 创建触发器16.2.2 删除触发器16.2.3 INSERT触发器16.2.3 DELETE触发器16.2.4 UPDATE触发器16.3 事务处理16.3.1 使用事务处理1. 使用ROLLBACK2. 使用COMMIT3. 使用保留点16.1 游标游...

2020-01-21 00:03:53 479

原创 快速回顾 MySQL:视图和存储过程

前提要述:参考书籍《MySQL必知必会》文章目录15.1 视图15.1.1 视图的优点15.1.2 视图的规则和限制15.1.3 使用视图15.1.4 利用视图简化复杂的联结15.1.5 更新视图15.2 存储过程15.2.1 存储过程的优点和缺陷15.2.2 使用存储过程1.创建存储过程2.使用15.2.3 删除存储过程15.2.4 使用参数1.创建2.使用15.2.5 高级应用15.2.6...

2020-01-21 00:02:41 550

原创 快速回顾 MySQL:全文本搜索

前提要述:参考书籍《MySQL必知必会》文章目录14.1 全文本搜索14.1.1 启动全文本搜索14.1.2 使用全文本搜索14.1.3 使用查询扩展14.1.4 使用查询扩展14.1.5 总结14.1 全文本搜索要了解全文本搜索,就要先了解引擎,也就是我们在创建表时,会在最后指定一个ENGINE值,即引擎类型。下面是3种常见的引擎类型:InnoBD是一个可靠的事务处理引擎,它不支持...

2020-01-19 21:51:33 2357 2

原创 快速回顾 MySQL:联表查询

前提要述:参考书籍《MySQL必知必会》文章目录12.1 联结12.1.1 关系表12.1.2 联结的作用12.1.3 创建联结12.1.4 WHERE子句的重要性12.1.5 内部联结12.1.6 联结多个表12.2 使用不同类型的联结12.2.1 自联结12.2.2 自然联结12.2.3 外部联结12.2.4 使用带聚集函数的联结总结12.1 联结SQL最强大的功能之一就是能在数据检...

2020-01-18 11:37:43 3836 2

空空如也

空空如也

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

TA关注的人

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