自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 资源 (7)
  • 收藏
  • 关注

原创 4大MQ消息队列的比较

概述现在市面上比较主流的四个MQ消息队列中间件:RabbitMQ、RocketMQ、ActiveMQ、Kafka;消息中间件的核心组件核心组件基本上所有的消息中间件都是相同的,或许只是命名不同;1 Broker(消息服务器)消息服务器是消息中间件中,用于接收和转发消息的核心组件;2 Producer(消息生成者)负责生成消息并将消息传输到Broker3 Conumer(消息消费者)负责从Broker获取消息并消费处理4 Topic(消息主题)主题是消息传递过程中,生产者给指定生成者传递

2021-04-27 08:56:05 2091

原创 Redis的常见面试内容

1 Redis为什么访问快1.1 数据保存在内存中Redis的数据读写都是基于内存的,不需要磁盘IO1.2 基于key-vaule数据结构Redis的数据都是以key-value的数据结构储存在散列表中,时间复杂度只有O(1);Redis定义了丰富的数据结构,可以根据value的特性选择最高效的数据结构;1.3 单线程模型Redis的网络IO和数据读写都是使用单线程模型,这避免了线程切换所带来的消耗;1.4 IO多路复用Redis使用的是epoll网络模型:内核会一直监听新的soc

2021-04-27 08:53:24 279

原创 2021年华为OD面试流程

概述前面有一篇《华为OD的五轮面试总结》 实际发生是在2020年疫情期间;据我了解,2021年的华为OD面试流程,似乎有了那么一些许改动;也有可能是因为部门不同而流程有区别,但不管怎样,在此把注意点分享给大家,希望对大家有所帮助,能获得大家的一键三连!!!我直接写我所了解到的差异点:机试——也是最大的差异点机试去年我面的时候,只有一道题,而且出的题基本可以确定从题库中出;但今年了解到的就有点区别了;因为华为的机试是直接跟牛客网合作的,而现在牛客网也直接给华为机试提供了108道练习题:华为机试练习题库

2021-04-03 14:06:01 15345 7

原创 重写HttpServletRequest的Header

如何重写HttpServletRequest的Header场景在使用网关对请求头中的token进行鉴权之后,希望将鉴权后的用户信息,写入到request的header中;此时,一般的HttpServletRequest是没有提供直接写入header的方法的。此时或许有人会退而求其次,不将信息放到header中,而放到key-value参数里面;但如果我们的服务使用的是JSON格式接收数据,相关信息就不太好处理了。所以建议还是放到请求头里去。方案虽然HttpServletRequest没有直接提供a

2021-03-17 16:55:25 2727 1

原创 设计模式(三)—— 装饰模式

简述设计模式中的装饰模式,是在已有的功能状态下,向旧的类添加新的功能时,可以避免修改旧代码的设计模式。例如:一个人,穿衣服、裤子、鞋子…等功能都属于人的装饰,并且每个人选择的装饰可以有区别,可以独立分开和搭配;另外,在购买新的装饰时(新添加新的功能),只需要继承原有的装饰类并实现对应装饰的功能即可,与之前的其他装饰或人完全解藕。UML图示代码示例装饰相关类/** * 装饰器 * @author: Kellan_Song * @date: 2021-01-15 23:58 **/pub

2021-01-16 17:17:46 110

原创 Java对象的深浅复制

简介在开发过程中,由于Java对象的引用传递问题,我们经常需要避免对一个对象的值被修改而进行对象的复制/克隆操作;从而引申出浅复制/深复制的概念;浅复制:创建一个新的对象,将原有对象的值/成员变量逐一赋值到新的对象中;深复制:创建一个新的对象,不仅对象的引用发生改变,连通对象的值/成员变量都是新的引用;浅复制浅复制的简单理解就是,新的对象地址是新的,但是对象的成员变量的地址,则不一定是新的;当新旧两个对象同时引用一个成员变量时,一个改变,另一个则跟着改变;/** * @author: K

2020-12-23 01:03:47 262

原创 Java的邮件发送功能

简述使用spring 的邮件发送功能,能够很简易地实现 配置自己的邮箱信息,发送邮件到指定人,包括抄送、密送、以及上传附件pom.xml依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>由于版本兼容问题,使用过两种方式,

2020-11-28 09:20:13 481

原创 华为OD面试即兴笔试算法(二)

简述该题目为华为OD面试第四轮,最后一位技术主管视频面试时,最后即兴出的一道算法题;当时是使用电脑端的zoom进行视频面试,算法题可以使用电脑的IDE,需要进行屏幕共享;难度中等,更倾向于考验 审题能力 和 临场发挥能力。PS : 该考官非常nice,做完题后会一步一步检查,发现有更好的方式会提出修改的意见;(其实内心压力山大)题目类别: 字符串题目给定一字符集合a 和 一字符串集合b;用集合a里的字符匹配集合b中的字符串,求成功匹配的字符串总长度;其中 a匹配b中一个字符串时,a中字符不能重复

2020-11-18 23:11:26 10238 2

原创 华为OD面试——机试算法

简述给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B;题目类别: 字符串难度: 中级运行时间限制: 10Sec内存限制: 128MByte阶段入职前练习输入因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。输出以字符串形式,输出一行,表示A和B的和。样例输入:111111111111111111111111111111111111111111111111112222222222222222222222222222

2020-11-09 17:24:51 8474 4

原创 华为OD面试即兴笔试算法(一)

简述该题目为华为OD面试第四轮,一位技术主管视频面试时,最后即兴出的一道算法题;当时是使用电脑端的zoom进行视频面试,算法题可以使用电脑的IDE,需要进行屏幕共享;难度中下,更倾向于考验临场发挥能力。题目描述遍历某个文件夹下的所有的文件,获取所有的文件名,根据文件后缀分类;并对分类与 文件名都进行任意一种排序;解题参考 @Test public void classifyFiles() { File originFile = new File("e:\\");

2020-10-30 23:45:56 15286 3

原创 华为OD的五轮面试总结

华为OD的五轮面试简述在今年疫情期间,通过BOSS直聘,受邀华为OD的Java工程师面试;整整一个月(3月中-4月初)的时间,经过了5轮的筛选,现在对这次面试进行概括性复盘,给大家分享下我所收集到的各种信息和相关面试流程的建议,希望对大家有用;华为OD是什么?跟华为又有什么关系?根据各方信息所得(包括网络查询、面试官的解答),华为OD是华为与德科的合作的一个针对华为社招人才培养的一种新型方式;开始时间大概是2019年试行,2020普遍应用的一种社招方式;(讲些人话)大概的意思就是,华为从2019年

2020-10-30 00:43:43 65462 25

原创 MySQL表解锁

当MySQL表被锁后,该如何解锁?当业务与数据发展到一定程度后,数据库在未读写分离的情况下,很有可能会出现数据库锁表的情况;在这时候我们可以尝试下面两种方式进行解锁:1 查询线程状态并杀死//查询线程信息show processlist//杀死对应线程kill {id}2 查询事务并杀死//查询当前事务SELECT * FROM information_schema.INNODB_TRX;//杀死对应事务kill {trx_mysql_thread_id}...

2020-09-27 22:52:02 613

原创 如何快速生成数据库表结构以及数据字典

快速生成数据字典1 简述在从业过程中,经常遇到一些先行后设计、先开发再总结的老旧项目;当接手一个老旧项目时,想要快速了解项目,从数据库设计必定是最优选择;有经验的开发人员,从数据库的表设计、字段设计,很快就能了解整个项目的规模、业务以及以前开发人员的水平等等;然而,一切并非经常如我们所愿,接手的老旧项目非常大的可能是没有数据库设计、数据字典等设计文档;此时的我们心里面肯定是十万个????奔腾而过;但是不用担心,我这里就有一个快速生成 数据字典,以及快速生成数据库表结构的方式(仅对MySQL而已)

2020-09-21 22:03:00 9407

原创 Java定时任务Timer和@Scheduled

定时器在开发过程中,我们会经常遇见一些不需要马上执行的业务逻辑,并再特定时间开始执行一次或多次;这时候就需要使用到Java的定时器;一般定时器分两种,一种时持续执行的,一种的只需要执行一次的。下面就简述一下我自己学习使用的Timer和Spring3.0自带的@Scheduled。Timer先上一段Timer的示例:/** * @author: Kellan_Song * @date: 2020-08-23 15:32 **/public class TimerTest { pri

2020-08-23 17:26:43 1142

原创 @Component和@Configuration的作用和区别

Spring的@Component和@Configuration注解从Spring3.0,@Component和@Configuration 都可与用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。PS:@Configuration注解的配置类有如

2020-08-22 17:05:13 2973 1

原创 数据库的分库分表

当数据量大,表字段多时,对数据库的操作速度影响业务正常使用时,可以考虑分库分表了;数据切分一般分两种:垂直切分 和 水平切分;垂直切分垂直切分,就是根据业务的耦合性,针对不同的业务,将关联度较低的字段分开成不同多张表。其实与微服务的拆分类似,每个服务独立一个数据库。使分开的数据表字段相对“高内聚”。优点解决业务层面的耦合,使业务清晰与微服务的治理理念相同,可以单独对不同业务的数据进行管理、维护、监控和扩展等。高并发的情况下,垂直切分一定程度上提升IO、数据库连接数、单机硬件资源等。缺点

2020-07-23 09:00:27 209

原创 华为隐私保护通话接入总结

1 概述1.1 背景挪车服务中,使用虚拟号码保护车主手机号码隐私信息;实现用户B在需要挪车时,使用微信小程序扫码从SAAS服务中获取到一虚拟号码,可通过拨打该虚拟号码接通至车主的真实号码中。实现双方的隐私通话。2 华为隐私号码服务2.1 概述华为隐私号码服务,分为 AXB、AX、X、AXE、AXYB等5种模式,区别请参考华为开放文档:https://support.huaweicloud.com/productdesc-PrivateNumber/privatenumber_04_0002.htm

2020-06-12 15:10:17 3590

原创 高可靠的消息投递机制

简介开发中会经常使用都消息中间件来进行消息同步操作。但往往会因为各种原因导致消息在投递至消息代理服务器的过程出现意外。确保消息同步的高可靠,至少需要做到两点:同步失败记录:确保清楚哪些消息同步失败;再次投递消息:确保在失败后,会自动尝试重新发送消息,排除因网络原因导致消息投递失败。处理方案由sendUtils投递消息到消息代理服务器MQ Broker时,会同时保存一未接收状态status=0到数据库中当消息成功投递到Broker时,Broker会返回一个确认信息到生产者的回调监听器中Conf

2020-05-21 10:58:14 299 1

原创 RabbitMQ简介

简介RabbitMQ是实现了AMQP(Advanced Message Queuing Protocol 高级消息队列协议)的开源的消息中间件框架。使用Erlang语言编写(故安装时需要先安装Erlang语言编译器)。关键字名词AMQPAMQP (Advanced Message Queuing Protocol,高级消息队列协议) 是应用层的一种开放协议标准。为面向消息的中间件设计。 消息中间件主要用于组件之间的解耦。RPCRPC(Romote Procedure Call,远程过程调用),M

2020-05-21 10:54:51 177

原创 Gitlab的CI/CD学习(三) —— gitlab-runner

简介背景目前市面上常用的自动化部署的工具比较常见的是Jenkins,但是使用过程中,总会遇到各种奇奇怪怪的错误,很难定位问题所在;今天我要介绍的gitlab中的CI/CD功能,个人觉得部署起来更加简单,有效,易排查,可视化界面也更加整洁~gitlab-runnergitlab-runner就是在gitlab仓库配置了.gitlab-ci.yml文件后,需要到服务器上安装配置gitlab-r...

2020-04-25 20:06:07 1268

原创 Gitlab的CI/CD学习(二) —— .gitlab-ci.yml文件

简介背景目前市面上常用的自动化部署的工具比较常见的是Jenkins,但是使用过程中,总会遇到各种奇奇怪怪的错误,很难定位问题所在;今天我要介绍的gitlab中的CI/CD功能,个人觉得部署起来更加简单,有效,易排查,可视化界面也更加整洁~.gitlab-ci.yml在前面文章中我们知道了整个Gitlab的CI/CD流程,那我们就在这里介绍以下在流程中,起到工作式指令的配置文件.gitlab...

2020-04-25 19:04:58 2347

原创 Gitlab的CI/CD学习(一) —— 简介

Gitlab的CI/CD介绍简介背景目前市面上常用的自动化部署的工具比较常见的是Jenkins,但是使用过程中,总会遇到各种奇奇怪怪的错误,很难定位问题所在;今天我要介绍的gitlab中的CI/CD功能,个人觉得部署起来更加简单,有效,易排查,可视化界面也更加整洁~后面将通过以下几篇文章,学习和介绍Gitlab中CI/CD的整体流程Gitlab的CI/CD学习(一) —— 简介Git...

2020-04-22 22:58:43 1106

转载 Spring Boot启动原理解析

我们开发任何一个Spring Boot项目,都会用到如下的启动类@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}从...

2020-03-30 00:11:53 225

原创 SQL优化及索引失效汇总

1. 注意具有索引列的查询条件,避免造成索引失效(具体看如下的索引失效规则) 2. 对于数据重复多的列,无需建立索引 3. 索引并非越多越好,索引越多,对增删改的速度就会越慢 4. select 结果中,避免使用*符号,只返回有用的字段

2020-03-17 10:00:49 225

原创 数据库锁

#数据库锁悲观锁(Pessimistic Lock)悲观锁,是程序员给予锁的定义之一,代表着对数据很悲观,每次操作数据时,都怕别人同时对数据进行修改。所以每次操作数据时,都会对数据进行上锁,防止别人操作。1 共享锁(Share Lock)共享锁(S锁)也称为 读锁;用于所有的只读数据操作。共享锁为非占有型,它允许多个事务同时读取锁定的资源。特点多个事务可同时上锁资源上锁时,数据可读...

2020-03-17 09:57:13 143

原创 数据库事务隔离级别

数据库常用的隔离级别四大特性任何支持事务的数据库,都必然具备四大特性ACID:原子性(Atomicity):说的是一个事物内所有操作共同组成一个原子包,要么全部成功,要么全部失败。这是最基本的特性,保证了因为一些其他因素导致数据库异常,或者宕机。一致性(Consistency):在基于原子性的前提下,保证双方数据的一致性;因为原子性保证的只是双方的操作是一致的,但在操作存在事务与时延;一...

2020-03-17 09:55:16 447

原创 JVM学习(一) —— 《深入理解Java虚拟机》知识点总结

2020-02-23 17:32:35 189

转载 Mysql索引详解

原文链接:https://blog.csdn.net/qq_32679835/article/details/94166747 文章目录一、为什么需要索引?(索引的优缺点)1、索引产生的意义2、索引的优缺点二、索引的分类三、B树-数据库索引原...

2020-01-13 17:12:24 186

原创 Spring Cloud理论知识点

概述什么是微服务?通常而言,微服务架构指的是一种架构模式或者说一种架构风格;它提倡的是将单一应用程序划分成一组小的服务,每个微服务提供单个业务功能,一个服务做一件事。每个服务独立运行于自己的进程,服务之间互相协调、互相配合;服务之间采用轻量级的通信机制(通常是HTTP资源的API);每个服务都围绕具体的业务进行构建,并且能够被独立地部署到生成环境;每个服务独立管理,可使用不同的语言进...

2020-01-04 14:17:14 213

转载 TOP K问题的解决方案

1.1 代码实现1.2 复杂度分析2.快速排序法2.1 代码实现2.2 复杂度分析3.堆排序法3.1 代码实现3.2 复杂度分析4. 方法比较       Top K是很常见的一种问题,是指在N个数的无序序列中找出最大的K个数,而其中的N往往都特别大,对于这种问题,最容易想到的办法当然就是先对其进行排序,然后直接取出最大的K的元素就行了,...

2019-12-09 10:44:01 698

原创 Spring AOP中切入点@Pointcut的使用

切入点@Pointcut的使用在确定切面aspect之后,需要在切面上确定切入点pointcut定义注解@pointcut("{切入点}")其中{切入点}格式如下:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)...

2019-12-07 15:33:55 4286

原创 面向切面编程AOP

面向切面编程:AOP简介AOP(Aspect Oriented Programming) 面向切面编程,是 OOP(Object Oriented Programming,面向对象编程) 的补充和完善;不过OOP引入封装、多态、继承等概念来建立一个对象层级结构,定义的是纵向关系;而AOP恰恰相反,它是利用一种称为“横切”的技术,剖解开封装的内部,并将那些影响了多个类的公共行为封装到一个可重用的...

2019-11-27 18:18:15 201

原创 Java注解

Java注解一、简介Java注解(Annotation),又称标注;是JDK1.5引入的一种新的注释机制,可以标注在Java类、方法、变量上;可在运行时,通过反射获取标注的内容。同时也支持自定义注解;1.1 定义注解定义一个注解,使用 @interface,示例如下:@Document@Inherited@Target(ElementType.METHOD)@Retention(R...

2019-11-21 17:20:10 154

原创 排序二叉树

排序二叉树简介二叉树的定义,不再介绍;而排序二叉树指的是根据一定排列顺序插入节点组成的一个二叉树;而排列顺序一般指定:小的在左边、大的在右边,数值不重复。算法实现主要包含有节点的插入、遍历、查询、删除。定义节点类private class Node { //节点的值 private Integer key; //左节点 private Node left; //右...

2019-10-15 15:14:39 886

原创 设计模式(二)—— 代理模式

简述代理模式是提供对目标对象另外一种访问方式的模式;优点:可以在目标对象实现的基础上,添加额外的功能,即扩展目标对象的功能;思想:在添加对目标对象新的操作时,不用修改别人的代码,只需要通过代码对象,去扩展目标对象新的功能;三种代理模式静态代理定义一个接口或者父类, 目标对象和代理对象同时继承或者实现该接口;优点: 不用修改目标对象的情况下,对目标对象进行新的扩展缺点:产生过多的代...

2019-10-08 18:13:35 118

原创 设计模式(一)—— 单例模式

简介单例模式是最常见、最常使用的设计模式之一;其优点是整个程序只会存在一个实例,节省资源的占用。实现方式实现方式有很多种,其中比较常见的实现方式有以下几种:饿汉式故名思议,一个饥饿难耐的大汉等着一个食物,故实现方式为直接使用静态方式,运行程序时在累加载的过程中直接创建一个实例,则当需要时直接获取即可。该方式缺点在于,若该实例未被使用,则会一直占用着资源。/** * 单例模式-饿汉式实...

2019-10-08 11:28:05 137

原创 MySQL的读写分离

场景当网站或者APP用户达到一定数量,后端服务的请求越来越多;当出现高并发请求时,为了提升API请求访问时长,一般会将数据库做读写分离(一般的网站和APP,都是读操作 远大于 写操作),一个主数据库挂着多个从数据库,主数据库只用作写操作;读操作放在多个从数据库中执行。常遇问题如何实现数据库的读写分离?MySQL主从复制的原理是什么?如何解决MySQL主从复制的延时问题?数据库配置...

2019-09-12 11:24:19 158

原创 数据库常用的隔离级别

数据库常用的隔离级别四大特性任何支持事务的数据库,都必然具备四大特性ACID:原子性(Atomicity):说的是一个事物内所有操作共同组成一个原子包,要么全部成功,要么全部失败。这是最基本的特性,保证了因为一些其他因素导致数据库异常,或者宕机。一致性(Consistency):在基于原子性的前提下,保证双方数据的一致性;因为原子性保证的只是双方的操作是一致的,但在操作存在事务与时延;一...

2019-09-06 13:32:54 328

原创 Java集合与Map的实现原理

集合关系图Collection集合共有的父类接口 ,包含集合的共性方法:add、remove、Iterator、contains、clear…迭代器 Iterator它的作用是将各种不同集合的“判断”与“取出”操作封装成一个对象。每种集合都可以使用迭代器Iterator的hasNext/next/remove 来判断和取出集合中的对象。List元素是有序的,并且可以重复;该集合有索引。...

2019-09-02 11:04:46 586

原创 JAVA基础笔试题

Java经常遇见的笔试题8个基本类型及其占用字节(1字节=8位)类型占用字节byte1short2int4long8float4double8char2boolean1abstract 与 interface 的区别 :两者都是抽象类,都不能实例化;interface更多的强调功能的实现;而abstr...

2019-08-20 19:24:16 489

数据结构与算法分析.mobi

芳禾数据为零售行业量身打造零售数据方案,可视化建模,实时分析,安全便捷的数据解决方案,芳禾数据数据结构与算法 您的首选.

2017-09-25

深入理解Java虚拟机(第2版).mobi

《深入理解Java虚拟机》是2011年6月27日机械工业出版社出版的图书,作者是周志明。本书同时从核心理论和实际运用这两个角度去探讨与解析Java虚拟机的奥秘

2017-09-25

zxing-javase-3.2.1.jar

zxing 生成二维码工具包

2016-05-01

c3p0-0.9.1.2版本的jar包

2016-04-09

simpleImage所需要的6个jar包

simpleImage所需要的6个jar包都在这里

2016-04-08

生成图片验证码工具类

类名ImgVerifyCodeUtil ,方法自行导入看看即可

2016-04-08

空空如也

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

TA关注的人

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