自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 收藏
  • 关注

原创 白话观察者模式

观察者模式(ObserverPattern)是一种行为型模式,它提供了一种定义对象之间一对多关系的方式。引顾名思义,观察者模式自然是需要有一些观察者(Observer)去"观察"被观察者(Subject)的行为,同时被观察者的状态(status)随时有可能发生改变,当这种改变发生的时候,被观察者需要去"通知"所有正在"观察自己"的观察者们。观察者和被观察者之间的这种关系也可以叫做"订阅——发布",所以观察者模式又叫做发布订阅模式。正文有一个博客平台(Subject)定期会推送文章,已经订阅过得QQ

2020-09-20 23:26:28 249

原创 白话适配器模式

适配器模式(AdapterPattern)属于结构型模式,提供了一种“使原本由于接口不兼容而不能一起工作的一批类,通过一个适配器进行"兼容"从而可以一起工作”的方式。引一个举烂的例子:家用电的电压 220V ,但是可以通过不同的变压器输出不同的电压;兼容型变压器也可以将不同的输入电压转换成相同的输出电压。适配器是比较好理解的,就是将不同的**适配者类(adaptee)通过同一个适配器(adapter)做出同样的动作,或者同一个适配者类(adaptee)通过不同的适配器(adapter)**做出不同的动

2020-09-14 21:39:26 258

原创 白话装饰器模式

装饰器模式(Decorator Pattern)提供了一种给对象灵活地、动态地添加额外功能的思路,装饰器模式是一种结构型模式。引日常开发中,经常需要对一个旧的类进行扩展,但是又希望遵循开闭原则不直接修改原本的类,于是我们可以创建一个子类并继承原类,并进行新增或者重写。如果扩展的次数不多,采用这种方式就可以方便快捷的完成扩展。但是这种继承的方式是静态的,会随着扩展次数的增多,子类越来越多的同时继承关系越来越复杂,并且不同版本之间的类严重耦合。经验和直觉告诉我们应该可以在 原有类 和 扩展 之间增加一层

2020-09-13 10:40:22 338 1

原创 简单通俗的工厂模式

工厂模式属于创建型模式,它提供了一种更加优雅的创建对象的方式,也是最常见的设计模式之一!引用户需要到 ”交通工具生产车间“ 去获取一种交通工具,用户可能要 “汽车“ 或 ”自行车“ 甚至是 “飞机”等。。。作为生产车间,只需要告诉用户一个获取其想要的交通工具的方法即可,至于交通工具是如何生产出来,用户并不需要去关心。正文简单工厂模式(静态工厂方法模式)用户可以使用工厂类提供的 get 静态方法并传入的不同参数,从而获取不同的实例,这些被创建的实例通常都具有共同的父类:实现起来也很比较容易,共

2020-09-01 22:45:42 245

原创 面试被问到 单例模式 有这一篇就够了!

单例模式是设计模式中最基础、最常用的,但是简单的实现下也隐藏着每一位 Coder 必须深入了解的知识。引:对象的创建过程public class MyClass { int num = 666; public static void main(String[] args) { MyClass myClass = new MyClass(); }}我们有一个类叫做 MyClass,建一个 Main 方法,只有一句 MyClass myClass

2020-08-27 23:04:54 278

原创 Camunda工作流引擎三

本篇继续拓宽对 Camunda 工作流的学习!《Camunda 工作流引擎一》《Camunda 工作流引擎二》提要文章目录提要正文组任务网关排他网关并行网关包含网关事件网关SpringBoot整合本文仍然在前文的 Demo 基础上进行!正文组任务在一个流程中一个用户任务,有时可以被多个人中的任意一个审批即可,例如:请假流程的部门审批这个用户任务中,只要部门经理或者部门副经理其中的任意一个人审批通过即可。这时候就需要候选人机制,首先在流程模型中给该用户任务设置候选人列表,这样用户任务就变成

2020-08-18 23:02:29 5244 5

原创 Camunda工作流引擎二

本篇将在上一篇应用的基础上开发一个最基本的 ”流程Demo“ !提要简单总结一下《Camunda工作流引擎一》中关于表的知识,大体上分为 4 类:act_RE_* :RE 表示 repository,这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。**act_RU_* **:RU 表示 runtime,这些运行时的表,包含流程实例、任务、变量、异步任务等运行中的数据。只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录,这样来尽量使运行时表可以一直很小速度很快。act

2020-08-06 22:29:24 7175 3

原创 JsonMappingException: Conflicting setter definitions for property

com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "is_head": com.luttica.ess.model.user.UserInfo#setHead(1 params) vs com.luttica.ess.model.user.UserInfo#setHead(1 params)反序列化异常

2020-07-28 23:34:42 6091

原创 Camunda工作流引擎一

基于SpringBoot 应用 的 Camunda 工作流引擎 教程

2020-07-07 22:38:03 10544 14

原创 集合去重的常用技巧——自定义类去重

自定义类集合去重,重写hashCode 和 equals 方法。Set 中的元素保证唯一性,因此可以借助 Set 集合的这个特性对其他集合中的元素进行去重操作:

2020-07-05 23:41:10 877

原创 MySQL报错Column xxxx in xxxx clause is ambiguous

Column 'short_name' in order clause is ambiguous错误出现接口 500,本地 debug 轻松地发现了问题:是 Mapper 中的一条 SQL 有问题,Column 'short_name' in order clause is ambiguousSQL并不复杂,数据库结构就不赘述了,四张表连接查询。直接看问题 SQL:SELECT p.*, lt.NAME AS province_name, t.N

2020-06-28 16:23:42 1917

原创 (已上岸)记一次Java后台实习面试问题——附答案

2020年6月5日,某互联网公司的 Java开发实习生 ,技术面二面。面试官:自我介绍、项目提了一嘴、JDK 1.8、集合源码、TCP细节、HTTP和HTTPS、redis数据结构和常用方法、消息队列基础、Spring、SpringCloud、Maven、智力题、手撕算法(排列、DP)。。。TCP 在之前的学习过程中有一个全面的知识整理:《面试?一篇就搞定!!史上最全TCP面试题 + 解答!》、《面试必考问题一文搞定:HTTP和HTTPS?TLS的工作流程?》redis 也简单整理过一点:《面试必问:

2020-06-14 19:19:21 1131 3

原创 单周速通《剑指Offer》周二

矩阵中的路径 中等 、剑指Offer.14_I 剪绳子 中等 、剑指Offer.14_II 剪绳子II 中等 、剑指Offer.15 二进制中 1 的个数 简单 、剑指Offer.16 数值的整数次方 中等 、剑指Offer.17 打印从 1 到最大的 n 位数 简单 、剑指Offer.18 删除链表的节点 简单 、剑指Offer.19 正则表达式匹配 困难 、剑指Offer.20 表示数值的字符串 中等 、剑指Offer.21 调整数组顺序使奇数位于偶数前面 简单 、剑指Offer.22 链表中

2020-05-26 17:39:45 222 4

原创 刷题找工作《环形链表问题》通解

Floyd算法、链表成环、NO.141 环形链表 、NO.142 环形链表II 、NO.202 快乐数 、NO.287 寻找重复数

2020-05-26 11:42:09 342

原创 震惊!超级大牛开发者面试被拒!居然只是因为不会翻转二叉树?

NO.141 环形链表 简单 震惊!著名软件 Homebrew 的作者 Max Howell 在 面试 Google 被拒,竟然是因为不会这个!Google:我们 90% 的工程师都用你写的软件(Homebrew),但你没法在白板上翻转二叉树,所以滚蛋吧思路一:深度优先遍历 从根节点开始,交换左右子树,然后递归的交换左右子树的左右子树。终止条件是子树节点为空。public TreeNode invertTree(TreeNode root) { //节点为空终止 if (root

2020-05-26 11:37:37 1065

原创 面试?一篇就搞定!!史上最全TCP面试题 + 解答!

运输层是面向通信部分的最高层,同时也是用户应用功能中的最底层,主要是向下封装通信部分、对接应用层完成分用和复用这两个主要功能,运输层是通常开发中接触到的最底层。在 TCP/IP 协议栈中有两种重要的运输层协议 UDP 和 TCP,同时 TCP 也是应用层 HTTP 协议的基础。本篇以面试问题为导向,用通俗易懂的语言进行总结回答。温故而知新,可以为师矣。本篇文字较多:先收藏,不迷路哦!有帮助的话,别忘了点赞+关注!上一篇:《面试必考问题一文搞定:HTTP和HTTPS?TLS的工作流程?》插个题外话,

2020-05-25 22:00:13 2998 2

原创 单周速通《剑指Offer》周一

刷了有快三百道 LeetCode 了,听说找实习必刷《剑指Offer》,于是每天花一点时间把这套题速刷一遍。如果有和我一样的菜鸟,咱们可以一起组队刷题,相互监督打卡哦!!干就完了!!!奥利给!!!!!数组中重复的数字 简单 、二维数组中的查找 简单 、替换空格 简单 、从尾到头打印链表 简单 、重建二叉树 简单 、用两个栈实现队列 简单 、斐波那契数列 简单、青蛙跳台阶 简单 旋转数组的最小数字 简单 、矩阵中的路径 简单 剑指Offer.03 数组中重复的数字 简单思路一:HashTable

2020-05-25 11:23:35 456

原创 刷题找工作《打家劫舍问题》一文通解

NO.198 打家劫舍 简单 、 NO.213 打家劫舍II 中等、 NO.337 打家劫舍III 中等 NO.198 打家劫舍 简单思路一:动态规划 dp[i]数组的含义:到第 i 号房子可偷窃的最高金额。初始化:数组大小[nums.length+1]包含没有房子的情况,dp[0] = 0,dp[1]=nums[0] 即没有房子的时候最高金额 0 ,只有 1 个房子的时候,最高金额就是这个房子中的现金。状态转移:到第 i 号房子为止偷窃最高金额 = Max(到 i-1 号的最高金额,到 i-2

2020-05-23 16:35:15 203

原创 LeetCode——从前序与中序遍历序列构造二叉树

NO.105 从前序与中序遍历序列构造二叉树 中等 思路一:模拟 回想了一下学校老师上课讲的如何根据两个遍历序列还原出二叉树的:根据前序序列的第一个字符确定树的根,示例中的3。知道了3这个根,根据中序序列确定左右子树[9]是左子树、[15,20,7]是右子树。根据左子树前序序列第一个字符确定树的根:9。9的左右子树为null,左子树完毕。根据右子树前序序列第一个字符确定树的根:20。知道了20这个根,根据中序序列确定左右子树[15]是左子树、[7]是右子树。根据左子树前序序列第一个字符确定

2020-05-22 22:18:33 371

原创 LeetCode——颠倒二进制位&位1的个数

NO.190 颠倒二进制位 简单 、NO.191 位1的个数 简单 NO.190 颠倒二进制位 简单思路一:逐位颠倒 每次用 & 运算取出 n 的最低位,将 ans 左移一位后用 ^ 运算保存得到的最低位。每次将 n 右移一位。public int reverseBits(int n) { int ans = 0; for (int i = 0; i < 32; i++) { ans = (ans << 1) + (n & 1);

2020-05-22 17:00:03 196

原创 [LeetCode]——只出现一次的数字I&II&III

只出现一次的数字 简单、只出现一次的数字II 中等、只出现一次的数字III 中等 NO.136 只出现一次的数字 简单思路一:异或public int singleNumber(int[] nums) { int ans = 0; for (int num : nums) { ans^=num; } return ans;}时间复杂度:O(n) 空间复杂度:O(1)NO.137 只出现一次的数字II 中等思路一:按位统计 遍历数组中每个元素

2020-05-21 19:04:26 208

原创 LeetCode——课程表I&II

NO.207 课程表 中等 、NO.210 课程表 II 中等非常经典的拓扑排序问题 NO.207 课程表 中等思路一:拓扑排序 拓扑排序的总体思路选择 广度优先遍历+贪心 。通常拓扑排序有两个主要功能:得到一条拓扑序列,拓扑序列不唯一。判断一个有向图是否有环。实现上,用两个集合,分别保存每个节点入度的数量、每个节点的下一个后继节点。还需要一个队列,进行广度优先遍历。将没有前驱的节点(入度为 0 )入队,广搜每出队一个节点,就将该节点的所有后继邻接节点的入度 -1 ,如果入度减为 0

2020-05-21 19:00:52 211

原创 刷题找工作《买卖股票问题》一文通解

NO.121 买卖股票的最佳时机 简单 、NO.122 买卖股票的最佳时机II 简单 、NO.123 买卖股票的最佳时机III 困难 、NO.188 买卖股票的最佳时机IV 困难 NO.121 买卖股票的最佳时机 简单思路一:暴力法 没什么好说的,双重循环计算所有元素两两组合相减的结果,取最大。public int maxProfit(int[] prices) { int maxProfit=0; for (int i = 0; i < prices.length - 1;

2020-05-21 18:57:51 168

原创 LeetCode——对链表进行插入排序&排序链表

对链表进行插入排序 中等 、排序链表 中等 NO.147 对链表进行插入排序 中等思路一:插入排序 思路题目上已经给了,就是动手实现就行了。寻找需要插入排序的节点 next;从 [表头,next] 区间内寻找到最后一个小于等于 next 的节点 pre;将 next 节点插入到 pre 节点的后面。public ListNode insertionSortList(ListNode head) { ListNode dummy = new ListNode(Integer.MIN_

2020-05-21 18:55:04 182

原创 实习项目纪实——商品秒杀业务

学习项目旨在开发一个秒杀业务,以及对业务进行性能优化。本篇采用SSM+MySQL+Redis。后序会另起新篇从框架方面进行重构和业务性能方面进行优化。本文项目源码上传github 开发环境操作系统:win10JDK:1.8IDE:IDEA2019.3.1项目构建工具:Maven3.6.3数据库:MySQL5.1.49 + Redis3.2.100版本控制:git 2.21.0.windows.1项目构建Maven构建一个webapp模板的项目,要把web.xml修改为servlet3.

2020-05-21 18:53:22 582 2

原创 实习项目纪实——头条项目

项目旨在设计开发一个类头条资讯网站集成评论,点赞,站内通知信等功能。采用SpringBoot + MyBatis + Redis的大体框架完成。并不是完善的项目,总体流程调通,主要业务功能实现。还存在很多细节可以再打磨、实现。项目已上传github 文章目录开发环境数据库设计功能模块首页展示业务分析接口实现注册登录接口实现拦截器实现安全性设计资讯模块业务分析接口实现使用第三方云服务实现上传/下载接口评论中心业务分析接口实现消息中心/站内信业务分析接口实现赞/踩功能业务分析接口实现异步队列业务分析接口实

2020-05-21 18:51:49 914

原创 面试一文搞定之ArrayList和LinkedList

本文从ArrayList和LinkedList的不同点入手,到增加/删除元素API的效率比较,顺带扩充知识面:简述随机访问接口RandomAccess、vector集合,最后以ArrayList何时扩容、如何扩容(源码分析)收尾。文章目录热身一下:List、Set、Map的区别?ArrayList和LinkedList的不同点RandomAccess接口VectorArrayList扩容构造方法何时扩容?如何扩容?ensureCapacity()热身一下:List、Set、Map的区别?List存储

2020-05-21 18:49:40 600

原创 面试被问到 HashMap 有这一文就够了!

HashMap 是难点也是重点,更是面试中的常客,充分了解 HashMap 绝对有助于提升编程的内功心法。本文重点是对 JDK1.7 和 JDK1.8 中其实现方式的变化进行分析学习。引不同集合底层数据结构?集合实现Object数组ListArrayListObject数组VectorObject数组LinkedList双向链表(JDK1.6及之前为循环链表)SetHashSet(无序、唯一)基于 HashMap 实现LinkedHash

2020-05-21 18:47:25 6113 21

原创 框架灵魂——反射

反射是框架设计的灵魂!但是本文并不是什么高深莫测的框架设计,只是对 Java 反射机制的一次简单总结。温故而知新,可以为师矣!引为什么说反射是框架设计的灵魂?其实在学校 Java SE 的时候,并没有去了解反射机制,第一次听说这个名词是在学习 Spring 的时候,其中有两个重要的概念 IOC (动态加载 Bean)和 AOP (动态代理)就是依靠 Java 的反射机制去实现的。除此之外,还有 JDBC 连接数据库时使用 Class.forName() 通过反射加载数据库驱动程序,JDBC 中还使用反射

2020-05-21 18:44:36 1558 8

原创 面试必问:Redis 5 种基础数据结构

Redis 有 5 种基础数据结构:string(字符串)、list(列表)、hash(字典)、set(集合) 和 zset(有序集合),这 5 种是 Redis 相关知识中最基础、最重要的!引每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样Redis会在合适的场景选择合适的内部编码。可以看到每种数据结构都有两种以上的内部编码实现,例如string数据结构就包含了raw、int和embstr三种内部编码。同时,有些内部编码可以作为多种外部数据结构的内部实现,例如ziplist就是has

2020-05-21 18:41:43 202

原创 面试必考问题一文搞定:HTTP和HTTPS?TLS的工作流程?

HTTP 协议在日常网络应用中随处可见,我们在任何时候网上冲浪都会看到 HTTP 协议或 HTTPS 协议的身影。既然其普遍存在,那么就要对它们有一个较为全面的了解!本篇从 HTTP 入手,最后对 HTTPS 进行学习记录。引HTTP 协议通常承载于 TCP 协议之上,有时也会承载于 TLS 或 SSL 协议层之上,这时就成了 HTTPS 协议!HTTP 的默认端口号是 80、HTTPS 的默认端口号是 443。图片出自——《图解HTTP》HTTP 协议是一个无状态协议,并且采用"客户端请求、

2020-05-21 18:37:09 752

原创 [LeetCode No.65]——什么是面向测试编程?看看本这道题就知道了!口区

有效数字 困难 没有get到这道题目的点,这样的题目很搞心态。尤其是看了作者的解答之后更懵逼了,作者使用了责任链的设计模式,从来没想到解算法题还能用到设计模式。大牛的思维方式就适合我不一样,解个算法题都能考虑到扩展性和复用性。思路一:暴力法按序遍历字符串,逐位判断是否合法。注意要去除首尾空格。这种方法就是比较恶心,很容易有考虑不到的情况。而且测试用例中有:".1"、".2"、"+.8"...

2020-03-14 17:06:43 675

原创 徒手挖地球二九周目

徒手挖地球二九周目文章目录徒手挖地球二九周目NO.64 最小路径和 中等NO.169 多数元素 简单NO.229 求众数II 中等NO.1071 字符串的最大公因子 简单NO.64 最小路径和 中等思路一:动态规划 我们要找最小路径和,一定是走数值较小的位置并且不往回走不绕路,又因为是从左上走到右下,所以每次都向右或者向下移动。dp数组的含义:dp[i][j]走到[i][j]位置的最小路...

2020-03-13 13:34:12 269

原创 徒手挖地球二八周目

徒手挖地球二八周目文章目录徒手挖地球二八周目NO.62 不同路径 中等NO.63 不同路径II 中等NO.543 二叉树的直径 简单NO.1013 将数组分成和相等的三个部分 简单NO.62 不同路径 中等思路一:动态规划 只能向下或向右,就是无法后退或者绕路且到达终点的步数是确定的。dp[][]数组的含义:dp[i][j]就是到到i行j列的位置有多少种走法。初始化:dp[0][0...

2020-03-11 18:19:05 178

原创 徒手挖地球二七周目

徒手挖地球二七周目文章目录徒手挖地球二七周目NO.60 第K个排列 中等NO.61 旋转链表 中等NO.121 买卖股票的最佳时机 简单NO.60 第K个排列 中等思路一:逆用康托展开 什么是康托展开式可以先从百度了解。本文直接从示例着手。利用康托展开求排列是第几个,例如"213"是n=3的全排列中的第几个?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z...

2020-03-09 16:35:49 247

原创 徒手挖地球二六周目

徒手挖地球二六周目文章目录徒手挖地球二六周目NO.57 插入区间 困难NO.58 最后一个单词的长度 简单NO.59 旋转矩阵II 中等NO.322 零钱兑换 中等NO.57 插入区间 困难思路一:暴力法 先将intervals和新区间都输入到一个数组中,然后对数组中的区间进行合并得到结果。徒手挖地球二五周目题解中NO.56合并区间中详细描述了如何进行区间合并。public int[]...

2020-03-08 15:58:02 149

原创 徒手挖地球二五周目

徒手挖地球二五周目文章目录徒手挖地球二五周目NO.55 跳跃游戏 中等NO.56 合并区间 中等NO.88 合并两个有序数组 简单NO.994 腐烂的橘子 简单NO.55 跳跃游戏 中等思路一:贪心算法 NO.45跳跃游戏II的姊妹题,思路一样可以结合学习,题解参考徒手挖地球二三周目。每次都在本次跳跃范围内找到下一跳最远的位置。如果最后最远的都为都不能到结尾,则false。public...

2020-03-04 20:51:26 1513

原创 徒手挖地球二四周目

徒手挖地球二四周目文章目录徒手挖地球二四周目NO.225 用队列实现栈 简单NO.53 最大子序和 简单NO.206 翻转链表 简单NO.54 螺旋矩阵 中等NO.225 用队列实现栈 简单思路一:使用队列API 其实没有太搞明白这个题目的意思。。。leetcode打卡活动第一天题目。主要是push()方法每次将新加入元素x之前的元素都按序出队并重新入队,这样新元素x就在队头。然后po...

2020-03-02 19:37:30 227

原创 徒手挖地球二三周目

徒手挖地球二三周目文章目录徒手挖地球二三周目NO.45 跳跃游戏II 困难NO.51 N皇后 困难NO.52 N皇后II 困难NO.45 跳跃游戏II 困难思路一:贪心算法 nums[i]表示的可以跳入的最大范围,如果当前nums[i]所能跳到的范围不涉及重点,那么就在当前能跳到的范围内选择一个最优的点(可以跳出更远的范围的点),因为如果这个最优点都不能跳到终点,那么其他的点更不能跳到。...

2020-02-28 19:02:20 321

原创 徒手挖地球二二周目

徒手挖地球二二周目文章目录徒手挖地球二二周目NO.41 缺失的第一个正数 困难NO.42 接雨水 困难NO.41 缺失的第一个正数 困难思路一:两次遍历 第一次遍历将每个元素交换到其元素值对应的下标出,第二次遍历检查每个元素的值和其下标是否相等,如不相等则这个下标就是缺失的第一个正数。第一次遍历:将所有符合nums[i]大于0且小于length的元素交换到其值对应的下标位置,例如...

2020-02-26 17:53:30 207

空空如也

空空如也

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

TA关注的人

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