- 博客(81)
- 收藏
- 关注
原创 排序算法java
归并/** * 归并排序 * * @param array * @return */ public static int[] MergeSort(int[] array) { if (array.length < 2) return array; int mid = array.length / 2; int[] left = Arrays.copyOfRange(array, 0, mid);
2021-07-08 18:31:50
125
原创 LeetCode──排序链表(148)
排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序思路:(1) 寻找中间节点,分成两个子链表(2) 对两个子链表进行归并排序(3) 合并有序链表代码:class Solution { public ListNode sortList(ListNode head) { if(head == null || head.next == null) return head; ListNode middle = middleNode
2020-07-20 22:41:28
163
原创 反转链表
1. 反转链表(LeetCode206)反转一个单链表public ListNode reverseList(ListNode head) { if(head == null) return null; ListNode pre = null; ListNode cur = head; //指针反转 while(cur != null){ ListNode tmp = cur.next;
2020-07-20 22:10:42
173
原创 LeetCode──基本计算器(224)
题目:实现一个基本的计算器来计算一个简单的字符串表达式的值字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格示例 1:输入: "1 + 1"输出: 2示例 2:输入: " 2-1 + 2 "输出: 3示例 3:输入: "(1+(4+5+2)-3)+(6+8)"输出: 23思路:一个栈用来存数字,一个栈用来存符号如果是数字,并且数字栈为空或者符号栈栈顶为(,把数字压入数字栈;否则对该数字与数字栈顶的数与符号栈顶的符号进行计算,并且把新值压入数字栈
2020-07-11 18:17:32
303
原创 LeetCode──最长公共前缀(14)
题目:编写一个函数来查找字符串数组中的最长公共前缀如果不存在公共前缀,返回空字符串 “”示例 1:输入:["flower","flow","flight"]输出: "fl"示例 2:输入:["dog","racecar","car"]输出:""解释: 输入不存在公共前缀。思路:1. 当数组长度为0,返回空字符串2. 初始化第一个元素为结果3. 从第二个元素开始比较,假设结果与该元素得到最长公共前缀4 当前最长公共前缀为空,返回空字符串5 比较完所有元素后,得到最终结果示例 1
2020-06-15 13:48:49
124
原创 剑指offer──1~n整数中1出现的次数
1~n整数中1出现的次数题目:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次思路:1. 当cur = 02304low = 4, high = 23,此时digit为10,即十位的 1 出现次数范围为:0010~2219只看高低位,229 - 0 + 1 = 230 ---------> 23 * 10high * digit2. 当cur = 12314lo
2020-06-14 13:24:47
169
原创 剑指offer──数值的整数次方
数值的整数次方题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题思路:快次幂3的5次方base = 11(3的二进制)exponent = 101(5的二进制)res = 1n = 101快次幂n(二进制)res(十进制)下一个base(十进制)下一次n(二进制)(101 & 1) != 0res *= base, res = 3bas
2020-06-14 09:04:42
110
原创 Mac安装Kafka
1.安装brew install kafka2.修改Kafka服务配置文件server.propertiesvim /usr/local/etc/kafka/server.properties解除注释:listeners=PLAINTEXT://localhost:9092(如无该内容则增加)3.启动zookeeper 服务zookeeper-server-start /usr/loc...
2020-04-26 19:19:03
181
原创 Mac终端打开数据库
进入mysql命令: /usr/local/mysql/bin/mysql -u root -p输入你的密码:xxxx展示数据库:show databases切换数据库: use 数据库名称展示数据库中的表: show tables创建数据库: create database test创建表: create table test(id int,name varchar(20))插入数...
2020-04-07 22:10:17
1565
原创 Mac 环境下 搭建Nginx + Tomcat集群
1. 安装Tomcat服务器中需要有java环境和安装一个以上tomcat容器,这里以tomcat1和tomcat2两个tomcat为例,多个同理。1.1 修改/etc/profile 增加tomcat环境变量1.1.1 输入命令sudo vim /etc/profile1.1.2 在文件末尾加上下面配置(/tomcat路径/tomcat1是我tomcat的路径下面同理)# tomca...
2020-03-12 11:50:33
414
原创 Java中sleep()和wait()的区别
1. sleep()和wait()的区别1.1 这两个方法来自不同的类分别是Thread和Objectsleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。1.2 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。sl...
2020-03-07 13:33:28
749
原创 SpringBoot整合RabbitMQ
SpringBoot整合RabbitMQ实现发布订阅1. 生产者项目1.1 添加依赖 <!--rabbitmq--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri...
2020-03-06 14:32:42
257
原创 AutoCloseable与Closeable接口
1. AutoCloseable接口AutoCloseable接口对JDK7新添加的带资源的try语句提供了支持,这种try语句可以自动执行资源关闭过程。只有实现了AutoCloseable接口的类的对象才可以由带资源的try语句进行管理。AutoCloseable接口只定义了close()方法:void close() throws Exception这个方法关闭调用对象,释放可能占用的所...
2020-03-05 20:49:35
752
原创 String s1 = "abc", String s2 ="abc"与String s1 = new String("abc"), String s2 = new String("abc")
1. String s1 = “abc”, String s2 ="abc"创建了几个对象 String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2);true创建了一个对象因为String对象是不可变的,所以它们可以被共享。内存中只有一个"abc"对象被创建,同时被s1和s2共享。2. String...
2020-03-04 20:43:18
5011
原创 观察者模式
1. 什么是观察者模式观察者模式(Observer):是一种行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。相比来说,创建型模式关注对象的创建过程,结构型模式关注对象和类的组合关系。2. 模式的职责模式的职责:观察者模式主要用于1对N的通知。当一个对象的状态变化时,他需要及时告知一系列对象,令他们做出相应。实现有两种...
2020-03-03 19:31:02
223
原创 策略模式
1. 什么是策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式由三种角色组成2. 策略模式应用场景策略模式的用意是针对一组算法或逻辑,将每一个算法或逻辑封装到具有共同接口的独立的类中,从而使得它们之间可以相互替换。策略模式使得算法或逻辑可以在不影响到客户端的情况下发生变化。说到策略模式就不得不提及OCP(Ope...
2020-03-03 18:38:22
198
原创 装饰模式
1.什么是装饰模式装饰器模式:也成为包装模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下:Component为统一接口,也是装饰类和被装饰类的基本类型。ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类。Decorator是装饰类,实现了Component接口的同时还在内部维护了一个ConcreteCompone...
2020-03-03 17:51:08
87
原创 外观模式
1. 什么是外观模式外观模式(Facade Pattern)门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。2. 外观模式例子用户注册完之后,需要调用阿里短信接口、邮件接口、微信推送接口。pu...
2020-03-03 11:05:48
92
原创 适配器模式
1. 什么是适配器适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。2. 适配器分类适配器分为,类适配器、对象适配、接口适配方式类适配器方式采用继承方式,对象适配方式使用构造函数传递3. 适配器案例我们就拿日...
2020-03-03 10:41:40
90
原创 模板方法
1. 什么是模板方法模板方法模式: 重复代码全部在父类里面,不同业务的,抽取给子类进行实现。抽取过程—抽象方法。核心: 处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用模板方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤在父类中定义好,具体的实现延迟到子类中定义。说白了,就是将一些相同操作的代码,封装成一个算法的骨架。核心的部分留在子类中操作,在父类...
2020-03-02 19:38:47
210
原创 建造者模式
1. 什么是建造者模式建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。建造者模式通常包括下面几个角色:1. Builder:给出一个抽象接口,以...
2020-03-02 13:30:22
84
原创 SpringBoot整合Ehcache框架
SpringBoot整合Ehcache框架1.创建数据库-- database test-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int...
2020-03-02 11:20:24
162
原创 代理模式
什么是代理模式通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程。代理模式应用场景SpringAOP、事物原理、日志打印、权限控制、远程调用、安全代理 可以隐蔽真实角色代理的分类静态代理(静态定义代理类)动态代理(动态生成代理类)Jdk自带动态代理Cglib 、javaassist(字节码操作库...
2020-03-02 10:20:32
151
原创 工厂模式
什么是工厂模式实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式工厂模式好处工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。1.简单工厂模式简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,...
2020-02-25 21:23:40
104
原创 单例模式
1.设计模式分类创建型模式(共五种)工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式(共七种)适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式(共十一种)策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。2.单例模式2.1什么是单例设计模式保证在...
2020-02-25 17:35:08
187
原创 Mac查看已安装jdk的目录(打开jconsole和jvisualvm可视化工具)
1.查看jdk目录打开Mac终端,输入/usr/libexec/java_home -V框起来的为默认的jdk版本2.进入jdk1.8.0_201的bin目录输入cd /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home3.打开jconsole或者jvisualvm输入jconsole打开jconsole可...
2020-02-14 13:20:38
2029
1
原创 LeetCode──完全平方数(279)
题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.思路1.用一个数组dp[]来记录组成和的完全平方数的最少个数,int[] dp = ne...
2020-01-27 11:43:06
154
原创 LeetCode──不同路径(62)
题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上...
2020-01-26 22:51:53
74
1
原创 LeetCode──打家劫舍(198)
题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷...
2020-01-26 17:26:01
110
原创 LeetCode──买股票的最佳时机(121)
题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意...
2020-01-22 19:44:02
179
原创 LeetCode──下一个排列(31)
题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,18,4,7,6,5,3,1 → 8,5,1,3,4...
2020-01-22 14:10:12
128
原创 LeetCode──爬楼梯(70)
题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。思路1. 当只有一层楼梯,只有一种选择,即f(1) = 12. 当有2层楼梯,可以一次爬一个台阶或者一次爬两个台阶,两种选择,即f(2) = 23. 有n(n >= 3)层楼梯时, 可以爬一层到达第n层,即f(n - 1),...
2020-01-20 10:43:09
102
原创 ArrayList、Vector、LinkedList和CopyOnWriteArrayList的分析
1.ArrayList和LinkedList的区别(1) ArrayList 基于动态数组实现,数组支持随机访问,但插入删除的代价很高,需要移动大量元素。(2) LinkedList 基于双向链表实现,链表不支持随机访问,但插入删除只需要改变指针。2. Vector和ArrayList的区别(1) Vector的实现与 ArrayList 类似,但是使用了 synchronized 进行同...
2020-01-09 14:30:50
421
原创 剑指offer──不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:位运算1.两个数异或:相当于每一位相加,而不考虑进位2.两个数相与,并左移一位:相当于求得进位3.将上述两步的结果相加比如num1=6,num2 = 5令num1 = num1 ^ num2,num2 = (num1 & num2) << 1当num2为0时,结果就是num...
2020-01-02 13:32:43
141
原创 剑指offer──二叉树中和为某一值的路径
问题:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:深度优先搜索代码:ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList&...
2020-01-02 12:35:54
132
原创 二叉树的深度
1.二叉树节点的结构public class TreeNode { int val; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}2.二叉树的深度2.1递归public int TreeDepth...
2019-12-30 17:12:52
104
原创 二叉树的遍历
1.二叉树节点的结构public class TreeNode { int val; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}先序遍历结果(中-左-右):1245367中序遍历结果(左-中-右...
2019-12-30 16:21:57
230
原创 剑指offer──变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:f(n)表示:n个台阶第一次1,2,…n阶的跳法数f(n-i)表示:n个台阶第一次跳i个台阶的跳法数nf(n)1f(1)2f(2-1) + f(2-2)3f(3-1) + f(3-2) + f(3-3)4f(3) +...
2019-11-16 20:40:38
110
原创 Exchange交换机
Exchange:接收消息,并根据路由键转发消息所绑定的队列交换机属性Name: 交换机名称Type: 交换机类型direct、topic、 fanout、headersDurability: 是否需要持久化,true为持久化Auto Delete: 当最后一个绑定到Exchange上的队列删除后,自动删除该ExchangeInternal: 当前Exchange是否用于Rabbit...
2019-11-12 14:00:07
290
原创 QueueingConsumer找不到这个类
springboot从1.5.9升级到2.0.0,queueingconsumer报错没有这个类,改为使用 DefaultConsumer
2019-11-10 21:31:27
2578
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人