- 博客(91)
- 收藏
- 关注
原创 一文小结设计模式之责任链模式(Java实现)
设计模式之责任链模式简介传统处理引入责任链注意事项小结简介责任链模式可以很好的帮我们处理对一个请求或者数据的阶梯级链式处理。例如,对于一个OA审批过程,需要从主管->部门经理->分公司经理->总经理…层层递进;或是对于某个叠加数据的层层处理,如一个Json串{A:x,B:y,C:z},如果A不存在就不往下判断了,对某个数据进行递进式校验(先看空不空,看长度满不满足,看字符对不对,看格式有无问题…)等等。总之,如果需要对某项请求或者数据进行阶梯级处理的话,推荐使用责任链模式。传统处理
2020-11-05 15:32:25
285
原创 一文小结设计模式之模板方法模式(Java实现)
模板方法模式介绍代码简单分析应用场景小结介绍模板方法模式属于行为型模式中一种。因为其规定了一套公共的流程,其他的都要按照这套模板来进行相关的操作。在我们生活中都存在许多模板方法;例如,填写的表格、从小到大写的试卷、把冰箱装进大象…等等一系列,已经将完成某件事的距离模板流程告诉给了你,你只需要根据不同实际的情况来覆盖某些方法即可。代码我们来看一下模板的代码:// 这里演示一个考试的流程// 规定好的模板方法public abstract class F { // 规定好了考试流程
2020-11-05 00:30:33
167
原创 二叉树的暴力递归解决树形问题
二叉树的递归套路简介递归套路思想注意事项相关题目小结简介二叉树的暴力递归方法其实就是对树形动态规划的一个暴力解决方法。为什么说他暴力呢?主要是他的解题思路是通过不断的递归调用,分别把左树和右树收集到的信息进行整合,然后进行加工在返回给调用方。对于许多笔试,甚至面试碰到树形DP问题都能很好的解决,虽然复杂度(时间和空间)可能相对较高,后期可以自己换另外的方法来解决(例如使用迭代,或者自己压栈来代替递归操作)。递归套路思想首先我们先来看代码,这段代码主要是返回该树的叶子节点的个数。public int
2020-11-04 20:17:23
400
原创 二叉树的遍历的递归与非递归实现
二叉树的遍历问题1.递归序2.递归方法遍历二叉树3.非递归方法遍历前序遍历后序遍历:中序遍历:小结:1.递归序抛开二叉树的遍历。我们来单看一个普通的递归函数:public static void DiGui(Tree node){ if(node == null){ return; } /* 节点第一次到达DiGui函数体 */ System.out.println("first time:" + node.val
2020-10-27 17:38:09
1505
原创 处理数组数据相关问题
处理数组数据相关问题双重指针的使用对应题目自身解决双重指针解决对于处理数组中的数据,不同的需求有对应的不同的处理方法。这里将慢慢记录碰到的(leetcode)一些处理方法。双重指针的使用对应题目27 原地移除指定元素,元素顺序可变26 移除有序数组中重复的元素自身解决对于第一第二题,我在解决的时候也可以说算是使用了暴力法。第一题直接判断如果当前num[i]等于给定的数值,那么将其置为Integer.MAX_VALUE;而第二题则使用了TreeMap对数据已经保存,如果num[i]对应的数据
2020-10-25 17:17:59
235
原创 H5+App后台持续定位功能实现
H5+App后台持续定位功能实现1. 项目需求2. 实现过程3.最终实现4. 关于测试用例1. 项目需求最近有个需求就是需要完成在后台的实时定位,并且要将获取到的定位信息写到Map控件上去。也就是说,即使手机锁屏了或者手机退出到菜单页面也要保证定位能正常运行并且将数据绘制到地图控件中。2. 实现过程找了网上很多的实现,各种样的都有。这里稍微列举一下,毕竟都是都是方法,也从中找到了一些实现的思路。其实个人认为主要还是为了保活JS,让JS代码生效,即可完成我们的操作。1.监听后台事件,让其呈现出不退出
2020-10-21 17:06:01
7346
7
原创 微信公众号授权获取access_token的问题
问题获取微信access_token的时候,显示code已经被使用了。{"errcode":40163,"errmsg":"code been used, hints: [ req_id: fGoeiyNre-kmIEZa ]"}解决方案:1、打开微信web开发者的网络调试(跟web网络调试一样)2、检查看你的code是不是已经被使用了:比如我这里,就有两个网络请求。说明在回调回来以后,浏览器已经用了这个code再次发送了一次请求,导致code已经被使用了。后面再拿这个code去获取ac
2020-09-29 14:28:47
1746
原创 RabbitMQ集群代理HAProxy的安装
在集群处理中,我们需要一个中间代理进行一个转发。因为程序写好,发布上线后,总不能因为一个节点挂了,然后修改程序的配置指向另一个节点。所以,我们需要一个控制管理对某个集群进行统一管理,而外部只需要对这个控制管理代理进行操作即可。哪怕内部任意一个节点挂了,提供给外部访问的还是控制管理代理。如图所示:下载依赖包yum install gcc vim wget解压上传haproxy源码包tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local进入目录、进行编
2020-09-26 11:36:47
363
1
原创 Linux下RabbitMQ的单机安装和集群安装
Linux下RabbitMQ的单机安装和集群安装1、单机安装2、集群安装镜像集群配置无法同步配置镜像(添加规则)小结1、单机安装该教程本人亲测实际有效,基于RPM和yum的混合安装。步骤:上传对应的安装包(socat那个可有可用)安装对应依赖yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk
2020-09-26 10:59:15
331
原创 学习前端框架碰到的问题和解决
方法通过变量将Vue实例赋值到另一个变量,回调函数通过另一个变量进行访问Vue实例。reload(){ console.log('获取当前位置') var _this = this; uni.getLocation({ type: 'wgs84', success: function (res) { console.log(_this); _this.latitude = res.latitude; _this.longitude = res.longitude; for
2020-09-11 11:08:23
536
原创 Mqtt在Java的使用及相关常用api
Mqtt在Java的使用及相关常用api一级目录二级目录三级目录MQTT小计相关方法MqttClient构造方法连接信息的构造方法将连接信息放入MqttClient订阅信息取消订阅发布信息断开连接关闭客户端一级目录二级目录三级目录MQTT小计相关方法MqttClient构造方法MqttClient sampleClient = new MqttClient(broker, clientId, new MemoryPersistence())// 创建客户端broker:代理的地址,一般是
2020-09-10 14:38:32
1495
原创 LeetCode.232 用栈实现队列
解题思路这道题使用两个栈来完成即可,一个入栈,一个出栈。出队列(返回队列头)流程图:入队入队直接在入栈中插入元素即可,无需过多条件。判断队列是否空这个需要注意,要判断两个栈都为空时,才能为空代码实现public class leetcode232 { // 入栈 private Stack inStack = new Stack(); // 出栈 private Stack outStack = new Stack(); /** Initiali
2020-08-20 19:56:29
214
原创 LeetCode141.判断链表是否有环(面试常考)
LeetCode141.判断链表是否有环题目要求解题思路代码实现题目要求给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路其实很以前学过的追击问题很
2020-08-18 18:34:16
244
原创 LeetCode206.链表反转两种实现
LeetCode206链表反转题目描述递归实现步骤解析代码实现迭代实现步骤代码实现小结题目描述反转一个单链表。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL递归实现其实拿到这个题目首先应该想到的是递归拆分。步骤解析1、既然是反转链表,那我们先从最简单的两个节点开始2、拿到这个最简单的链表,我们不难看出。因为2的下一个节点是空,所以反转后,2就是头结点。所以,我们可以先肆无忌惮的将2
2020-08-18 14:09:05
361
1
原创 LeetCode237.删除链表节点详解
LeetCode237删除链表节点题目描述传统思维改进思路代码实现题目描述传统思维很多小伙伴拿到题目都会下意识的反应直接将要删除的节点的上一个节点直接指向要删除节点的下一个节点,也就是如下图所示但是,通过题目条件我们根本无法获取到要删除节点的上一个节点。我甚至还想从头遍历用一个变量记录次数,发现头结点也获取不到。改进思路我们不妨换一个角度去想,虽然我们获取不到上一个节点,但是我们可以获取下一个节点和下下个节点还有下下下个节点…既然这样,我们是不是可以用下一个节点覆盖本节点,然后在删除下一个
2020-08-18 10:21:35
154
原创 ArrayList简单自实现与源码浅析
动态数组了解一下什么是数据结构从数组出发,了解数据结构接口定义需求简单方法的实现特殊方法的处理1、clear方法。2、add方法。3、delete方法。4、重写toString方法。5、动态扩容。动态数组灵活升级使用泛型,灵活性更高完善clear,避免浪费内存同理,remote方法也要解决浪费内存修改equal,避免对象值比较出错处理NULL值ArrayList源码简单解析:成员变量静态常量构造方法元素清空查找某个值元素添加元素扩容(核心)了解一下什么是数据结构数据机构是计算机存储、组织数据的方式。正如
2020-08-17 18:30:56
224
原创 LeetCode509斐波那契数及时间复杂度学习
从斐波那契数列了解时间复杂度引入斐波那契算法所带来的的问题:修改后的代码优化剖析算法的评估时间复杂度1、忽略常数2、忽略系数3、忽略低阶4、对于对数5、常见复杂度空间复杂度复杂度的优化衡量指标:斐波那契算法时间复杂度分析使用递归:优化后引入斐波那契算法说到菲波那切数列(给定一个数组,某一项的数都等于前一项的数与前前一项的数的和),我们首先想到的解法就是使用递归函数进行一个调用,当执行到首项和第二项时,我们就对其值进行返回。凡是要获取大于等于第二项的,我们通通还要进行递归直到执行至第一第二项的时候。下面我
2020-08-16 17:39:35
519
原创 CentOS7初始化后配置静态IP地址
今天需要用到虚拟机来搭建集群,想着也不能老是用阿里云,偶尔试一下试虚拟机的操作。接下来,我把今天下午有用的操作小结一下。1、查看本机的相关网络配置进入控制面板,找到自己的网络连接,然后根据图片我们可以知道,我们的网段处于192.168.1.x这个区域2、进入VM进行相关配置3、进入到虚拟机的脚本配置4、重启网络配置使用service network restart对网络进行重启。重启成功后尝试ping 一下百度,看看能不能上网。然后在跟自己的主机互相ping一下,最后尝试使用远程连接看
2020-08-01 18:28:21
457
原创 八个角度解析学习多线程入门(两万字笔记)
八个角度解析学习多线程入门(两万字笔记)1.实现多线程的方式2.启动线程的正确和错误的方法3.如何正确停止线程Java异常体系补充4.线程的六个状态(生命周期)5.Thread和object类中和线程相关的重要方法解析wait原理图:wait()与notify()的用处---生产者消费者模式wait常见面试题sleep():join():yield():6.线程各属性线程ID:线程名字:守护线程:线程优先级:7.线程捕获的异常如何处理8.多线程带来的问题线程安全问题性能问题1.实现多线程的方式从JDK中
2020-08-01 00:08:06
521
原创 一文简单了解八种单例模式
一文简单了解八种单例模式1、饿汉式(静态常量)[可用]2、饿汉式(静态代码块)[可用]3、懒汉式(线程不安全)[不可用]4、懒汉式(线程安全,同步方法)[不推荐使用]5、懒汉式(线程不安全,同步代码块)[不可用]6、双重检查[推荐使用]7、静态内部类[推荐使用]8、枚举类[推荐使用]八种单例模式的小结:各种写法的使用场合:面试常见问题:首先我们通过单例模式的作用来看为什么会出现单例模式。单例模式的出现可以节省内存和计算、保证结果正确、方便管理。其主要适用于:无状态的工具类(日志类等提供的服务都是一样的
2020-07-31 21:45:44
239
原创 多角度简单解析synchronize关键字
这里写自定义目录标题Synchronized简介作用不使用synchronize的后果两种用法对象锁类锁多线程访问同步方法的7种情况Synchronized的性质Synchronized原理加锁和释放锁的原理可重入原理保证可见性原理Synchronized的缺陷常见面试问题Synchronized简介作用保证在同一时刻最多只有一个线程执行该段代码,以达到并发安全的效果。其主要通过拿到锁来保证执行代码块的线程唯一性,只有拿到锁的线程才能执行synchronize中的代码。不使用synchronize的
2020-07-27 20:30:59
274
原创 IDEA调试技巧--看线程生命周期
线程共有6个生命周期状态:new、runnable、wait、block、time_wait、terminal。我们可以使用IDEA工具对每个线程状态进行debug调试获取,具体操作如下:1、首先在代码块中打上断点2、右击断点可以选择需要停下的线程:3、选择需要查看状态的线程(IDEA会帮附上对应状态,但是有些并不是多线程的状态):4、执行获取状态的代码操作:...
2020-07-27 20:30:05
5194
原创 记录一次大公司面试题
Arratlist 和 Linkedlist区别Arratlist 扩容HashMap底层HashMap扩容介绍一下HashMap 2次幂的原因MySQL怎么优化MySQL中explain查询出的字段有哪些,介绍一下用过分页吗,介绍一下使用的分页千亿数据怎么分页说一下间隙锁间隙锁怎么用redis有哪些常用的数据结构redis用了哪些结构其他nosql数据结构了解吗redis的持久化介绍一下redis集群怎么用,怎么保证数据一致介绍SpringCloudzuul你是怎么使用的
2020-07-03 16:35:19
326
原创 SpringMVC对异常处理的方式
SpringMVC对异常处理的两种方式1.@ControllerAdvice注解2.HandlerExceptionResolver接口3.针对404错误的管理小结:1.@ControllerAdvice注解使用方法:一般使用该注解都是基于JSON数据返回的,所以在类上增加@RestController注解,并且在加上@ControllerAdvice注解表明这个类是一个统一异常处理类即可。@RestController@ControllerAdvicepublic class QuanExce
2020-06-18 20:22:18
220
原创 nginx访问静态资源报404错误的坑
解决nginx配置静态路径404的坑1.使用root无加密访问静态资源原理:举例:误区:2.使用alias访问静态资源1.使用root无加密访问静态资源配置文件:location /download/ { root /home/; autoindex on; }访问url:ip:端口/download注意,接下来是重点原理:当你键入这个url(ip:端口/dowonload)的时候,nginx会去你系统下的home目录下的download目录下
2020-06-16 01:04:27
22160
10
原创 异常处理try-catch-finally花式打开方式
我所能想到的finally的打开方式1.在finally中return,try还有意义吗?(1)try和finally返回不同的变量(2)try返回表达式和finally返回变量(3)try和finally返回相同的变量2.报异常后catch和finally的反应(1)返回不同的变量(2)查看catch的return表达式3.return写在try-catch块外面会咋样?(1)写个锤子,idea编译不通过(2)删掉try和finally的return,返回变量(3)普通情况下,返回表达式(4)异常中带有r
2020-06-13 20:50:27
319
原创 ClassNotFoundException: org.slf4j.Logger报错问题
ClassNotFoundException: org.slf4j.Logger报错解决1.jar包没有导入2.检查idea编译器1.jar包没有导入检查一下jar包是否添加到依赖(这一部分是检查pom.xml这个文件),看看是否有依赖缺失。2.检查idea编译器因为楼主是基于idea进行编程的,想尝试用aop解决日志问题。但是一个晚上都报错。1.我首先排查了依赖,发现并已经导入了;但是我启动仍然报错2.检查idea中Artifacts中的依赖我是在这里出现问题的;我删掉了之前的war包,
2020-06-12 23:25:26
6802
原创 通俗易懂的了解MySQL面试常考的三大连接及扩展
MySQL的七大连接1.左连接2.右连接3.内连接4.左连接(不包括匹配部分)5.右连接(不包括匹配部分)6.全连接7.全连接(不包括匹配部分)笛卡尔积小结一般来说,我们了解的MySQL连接无非就是左连接,右连接,内连接,全连接。前一阵子出去面试,就被问了SQL的左右连接问题,感觉自己答得不是太好,于是又回来复习了一下,发现还有许多可以扩展的地方,话不多上,上正题。1.左连接左连接,无非就是以左表作为参照,右表根据On的对应规则进行匹配。如果匹配成功则连接;匹配失败,保留左表的数据,右边的连接为NUL
2020-06-08 21:34:18
373
原创 Access denied for user 'root'@'localhost' (using password: YES)
此方法通过yum命令基于centos系统进行安装。1.安装MySQL客户端:yum install mysql2.安装MySQL:yum install mysql
2020-05-13 18:29:11
1060
原创 【设计模式】前奏之七大设计原则
七大设计原则重要性目的七大原则概念:核心思想:七大原则概述单一职责原则概念:举例原则和细节接口隔离原则概念使用前举例使用后举例依赖倒转原则原则依赖关系传递的方式注意事项里氏替换原则OO中所面临的问题介绍使用前举例使用后举例开闭原则解释迪米特法则(OCP)基本介绍简单概括核心合成复用原则重要性1.对软件设计中普遍存在的(反复出现的)各种问题的解决方案2.为了将来更好的扩展性,复用性,可用性,可读性,规范性进行相应处理目的1.解决耦合性,内聚性,可维护性,可扩展性,重用性,灵活性等多方面带来的挑战2
2020-05-10 23:42:17
466
原创 【实体类对象】简单解析
实体类对象的简单解析1.VO2.PO3.DO4.DTO简单图例案例:最近开始慢慢开学,有许多的事情要弄;博客都好久没写写了;趁今天还有点时间(鬼知道明天又要做什么事情),简单回顾一下几个实体类,理清一下。这只是本人的见解,有些不到位的地方还希望多多指正。1.VO全称:View Object 视图对象用途:1.将form表单数据转换成实体类(接收浏览器的数据)2.将发送给前端的数据封装好(把数据给浏览器让浏览器显示)简单来说:VO就是跟前端数据打交道的,不是你传给我就是我传给你。2.PO
2020-05-09 10:19:16
1538
原创 SpringBoot(cloud)自动装配bean找不到类型
Spring基于注解的@Autowired是比较常用的自动装配注解,但是会因为个人的疏忽,SSM进行配置的时候没有将对应bean所在包给扫描进去;或者使用Boot的时候,没有放在启动类所在包及其子包下导致报错。今天笔者就犯了因为boot扫不到包的问题:Description:Field empApi in feign_consumer.demo.controller.testControl...
2020-05-01 23:23:01
9584
2
原创 数据结构与算法学习之稀疏数组
稀疏数组1、定义2、压缩办法3、压缩代码实现4、持久化效果5、稀疏数组还原最近一段时间一直在弄个小项目,但是学习过程中发现数据结构与算法这块简直是残废,于是变写项目边补一补,慢慢记录记录。1、定义稀疏数组是对特定二维数组的一个压缩;这个二维数组是一个包含较少特定有效数值的二维数组,如下图:从图中我们可以看到,这个二维数组的有效数值只有两个;但是我们对这个二维数组进行持久化时,也会将这些0...
2020-04-26 13:33:23
397
原创 项目仿写阶段小结(一)
项目阶段小结1.对于静态资源资源在服务器启动后访问不到的情况:2.maven项目在package时候会执行测试代码,因为个别原因(例如唯一主键重复插入等)导致报错:3.保证用户密码安全问题,对于密码都是进行MD5闪电不可逆加密:4.SpringMVC中对于简单请求(不进行数据处理,只是页面跳转的):5.两个对象值的比较经过了几天的学习,仿写机构的项目在挖坑填坑中不断的探索;下面说一下碰到的一些B...
2020-04-21 23:24:49
287
原创 关于Mybatis PageHelper 分页使用报空指针异常
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.NullPointerException### The error may...
2020-04-21 11:15:20
4805
3
原创 nginx入门及简单配置
Ngin入门及简单配置nginx的安装nginx 指令nginx作用:反向代理正反向代理的介绍反向代理的使用:具体使用负载均衡参数配置分配策略动静分离介绍expires配置location在我学习的过程中,碰到了很多可以部署静态页面的服务器;例如:Apache HTTP server、Tomcat、nginx等等(目前就简单接触过这三个)但是从用处来说Tomcat主要还是部署动态的服务器例如c...
2020-04-16 20:55:35
216
原创 Redis持久化及主从复制
Redis持久化及相关特性RDBAOFRedis对事务的部分支持RDBRedis之所以快,其读写在内存是其中一个原因;但是因为读写在内存如果服务器宕机了数据都会消失不见,所以需要对Redis考虑持久化的问题。RDB就是Redis数据持久化的一种方式。他是基于快照的方式,在一定的时间间隔和操作下,对当前的数据进行持久化,将文件放入当前启动目录下,默认命名为dump.rdb。工作方式:Red...
2020-04-15 19:34:59
237
原创 远程连接不上Redis
解决jedis连接报错问题(参考这篇,上一篇写的有点乱)java.net.SocketTimeoutException: connect timed out1.先看linux端口是否开开放使用telnet 云ip 6379如果出现这个连接失败表示防火墙和安全组未打开2.配置安全组进入阿里云配置相应的安全规则(我本来配置第二个的发现不得,然后摸索了一下改成第一个统配)3.查看r...
2020-04-15 17:39:27
1065
1
原创 Linux学习及常用命令(二)
Linux常用指令(二)1.关于用户操作2.对组的操作1.关于用户操作这里要稍微介绍一下:Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。每个用户都对应着某一个组,用户和组的关系是一对多的关系(Linux 的用户需要至少要属于一个组)(1)添加用户:useradd [-g 所属组] 用户名如果...
2020-04-14 00:01:45
140
原创 Linux学习及简单常用命令
Linux简单入门1.Linux简单介绍2三种连接网络模式的简单介绍.3.Linux文件目录的理解4.Linux对文件的操作1.Linux简单介绍Linux作为一款高效,安全,稳定,开源的操作系统内核已经在市面上越来越流行;其主要可以用于嵌入式系统,大数据集群,JavaEE服务器部署等等。我们通常将的Linux其实只是Linux的内核,而实际使用的是它的发行版本,包括Ubuntu,Cento...
2020-04-08 09:56:46
234
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅