自定义博客皮肤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)
  • 收藏
  • 关注

原创 API签名鉴权设计

API鉴权的作用:识别调用方身份,控制API的访问权限,进而保护平台数据的安全。

2022-12-26 18:14:38 2810 1

原创 MySQL索引腾讯面试必问

索引常常被比作是一本书的目录,帮助我们快速找到我们需要的页码,非常的形象,实际上数据库中的索引机制,本质是通过一定机制,尽量减少磁盘I/O次数以加快定位数据在磁盘中的位置来提高性能。

2022-10-12 19:58:44 782

原创 redis缓存异常(字节、腾讯面试总结)

但在实际应用过程中,redis会存在**缓存穿透、缓存雪崩、缓存击穿、缓存预热和缓存降级**等异常情况,如果忽视这些情况可能会带来灾难性的后果,下面主要对这些缓存异常和常见处理方案进行相应分析与总结。

2022-05-25 16:06:30 530

原创 分布式日志设计,Java代码实现

在分布式系统下,用户一个请求通常需要先后调用(rpc、http)多个工程模块,依次处理数据,才能返回正确结果。日志变得越来越分散,如何更好地收集和分析日志,就变成了一个特别重要的问题。

2022-05-16 22:34:54 612

原创 网易163邮箱javax.mail.MessagingException: B3 NO EXAMINE Unsafe Login,实际可用

解决网易163邮箱开发报错: B3 NO EXAMINE Unsafe Login

2022-03-18 16:10:14 1674

原创 IMAP协议定时监听接收邮件(QQ邮箱、网易邮箱都可)

网易邮箱,QQ邮箱接收邮件,监听邮件

2022-03-18 16:02:31 3622

原创 qq邮箱,网易邮箱,smtp邮箱发邮件

smtp邮箱发送邮件,包括(QQ邮箱和网易邮箱)

2022-03-16 15:08:09 3207

原创 redis设置key当天到期、当月到期

redis过期策略过期策略通常有以下三种:定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。惰性过期:只有当访问一个key时,才判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好,与 spring 的延迟初始化有着异曲同工之妙。但有可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。所以Redis

2022-03-07 11:07:27 5590

原创 HttpServletRequest对象创建

HttpServletRequest对象创建

2022-03-04 11:58:04 9797 2

原创 OAuth 2.0设计(以微信登录为例)

在实际应用开发中,我们常常需要使用微信作为应用的登陆方式,不同于手Q登陆使用传统的ptlogin,微信登陆采用了OAuth 2.0的验证方式。本文将以微信登录为案例,具体分析介绍所采用的OAuth 2.0验证方式。OAuth 2.0身份系统设计1. 场景介绍。2. 什么是OAuth 2.0?3. 授权码模式介绍。4. 授权码模式具体到微信登录架构设计。5. OAuth 2.0为什么不直接返回access_token?1. 场景介绍。作为一个第三方应用,用户通过微信登录应用,应用方想获取用户的一些私密信

2021-10-05 10:56:56 1781

原创 @Value注入静态变量(static)

@Value注解介绍:作为Spring的一个常用注解,其作用是通过注解将常量、配置文件中的值和其他bean的属性值注入到变量中,作为变量的初始值。使用方法如下:@Value(“常量”) 常量,包括字符串,网址,文件路径等。 // 注入常量 @Value("Pavel") private String tenantName; @Value(“${}” : default_value) 读取配置文件。 // 读取配置中database的值 @Value("${spr

2021-09-29 16:56:39 9821

原创 消息队列原理、使用实例、面试题

最近在写项目的某个需求时用到了tdmq,因此系统性的学习了消息队列,以下便是一些学习心得。消息队列(MQ)是大型分布式系统中一种常见的中间件,主要解决应用耦合、异步消息、流量削锋等问题,已成为异步RPC的主要手段之一。目前企业使用较多的消息队列有ActiveMQ、RabbitMQ、Kafka、ZeroMQ、Pulsar等。为什么需要消息队列?使用消息队列的场景有很多,结合我在工作中的一些思考,我认为大多数项目引入消息队列都是为了解决错峰流控和服务解耦这两主要问题。错峰流控错峰:线上部署的系统所面对

2021-09-27 18:14:40 530

原创 分布式环境下限流器springboot实现,令牌桶

根据令牌桶算法,桶中的令牌是持续生成存放的,需要先从桶中拿到令牌才能开始执行请求,那么持续生成令牌存放应该这么实现呢?

2021-09-26 19:22:13 2966

原创 Springboot定时任务实现——Quartz

Quartz 是一个功能全面、开源的企业作业调度服务器。定时任务框架:1)简单的有Java自带的Timer、 ScheduledExecutorService, Spring自带的Task。2)相较复杂的分布式定时任务中间件有XXL-JOB、ElasticJob等。选Quartz理由:1)任务Tigger能够被持久化,这样即使在发布后,任务依然能够执行,不需要重新设定。2)能够轻松暂停恢复触发器(即下次不会被调度)。3)支持Calander,Cron表达式等复杂的触发器,可以灵活的编写复杂触发

2021-08-03 12:02:58 712

原创 mybatisplus下pagehelper使用

pagehelper官网资料:https://pagehelper.github.io/docs/howtouse/在springboot中简单使用:增加maven依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactI

2021-05-10 16:12:49 1258

原创 操作系统面试题

进程的调度算法:先到先服务(FCFS)调度算法:从就绪队列中选择一个最先进入队列的进程分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用CPU时再重新调度。短作业优先(SJF)调度算法:从就绪队列中选出一个估计运行时间最短的进程分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用CPU时再重新调度。时间片轮转(RR)调度算法:最简单,最公平且使用最广的算法,每个进程被分配一个时间段,称作时间片,即该进程允许运行的时间。优先级调度算法:为每个进程分配优先级,按优先级依次

2020-09-02 19:27:31 121

原创 并发实现的异和同(Java,go)

Java中多线程之间是通过共享内存进行通信的,在go中多线程之间通信是基于消息的,go的channel是go中多线程通信的基石。对于Java来说,共享的资源主要靠锁实现。synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。映射到JVM层次:synchronized 同步语句块,使用的是 monitorenter 和 monitorexit 指令。当执行 monitorenter 指令时,线程试图获取锁也就是获取 monitor(monitor对象存在于每个Jav

2020-05-17 20:26:35 548

原创 go的协程池实现

Golang 线程 和 协程 的区别对于进程、线程,都是有内核进行调度,有 CPU 时间片的概念,进行抢占式调度(有多种调度算法)对于协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行协作式调度,需要协程自己主动把控制权转让出去之...

2020-05-10 17:48:35 1839

原创 Go的共享资源竞争避免

有并发,就有资源竞争,如果两个或者多个 goroutine 在没有相互同步的情况下,访问某个共享的资源,比如同时对该资源进行读写时,就会处于相互竞争的状态,这就是并发中的资源竞争。Go语言提供了传统的同步 goroutine 的机制,就是对共享资源加锁。atomic 和 sync 包里的一些函数就可以对共享的资源进行加锁操作。原子函数原子函数能够以很底层的加锁机制来同步访问整型变量和指针。...

2020-05-03 20:51:12 319

原创 goroutine之间通信的管道——channel

Goroutine 介绍goroutine 其实就是线程,但是它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,而且Go语言内部也实现了 goroutine 之间的内存共享。go 关键字可以创建 goroutine,将 go 声明放到一个需调用的函数之前,在相同地址空间调用运行这个函数,这样该函数执行时便会作为一个独立的并发线程,这种线程在Go语言中则被称为 gorout...

2020-05-03 20:42:09 381

原创 Go中make和new关键字的区别及实现原理

在Go语言中初始化一个结构时,其实会使用到两个完全不同的关键字,也就是 make 和 new(Java中只有new)。new 和 make 是两个内置函数,主要用来创建并分配类型的内存,不过它们两者却有着完全不同的作用。new 关键字只分配内存,当我们想要获取指向某个类型的指针时可以使用 new ;而 make 关键字的主要作用是初始化内置的数据结构,也就是 slice、map 和 channe...

2020-04-26 17:10:30 1065

原创 Mysql索引学习

为什么使用索引?MySQL索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。MySQL的BTree索引使用的是B树中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。MyISAM: B+Tree叶节点的data域存放的是...

2020-04-22 17:07:58 164

原创 Mysql细节学习

并发事务带来哪些问题?在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。脏读(Dirty read): 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据...

2020-04-22 16:09:50 113

原创 Go的nil:空值/零值

在Go语言中,布尔类型的零值(初始值)为 false,数值类型的零值为 0,字符串类型的零值为空字符串"",而指针、切片、映射、通道、函数和接口的零值则是 nil。nil 是Go语言中一个预定义好的标识符,有过其他编程语言开发经验的开发者也许会把 nil 看作其他语言中的 null(NULL),其实这并不是完全正确的,因为Go语言中的 nil 和其他语言中的 null 有很多不同点。nil 标...

2020-04-20 10:41:15 804

原创 go变量学习

Go语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值:整型和浮点型变量的默认值为 0 和 0.0。字符串变量的默认值为空字符串。布尔型变量默认为 bool。切片、函数、指针变量的默认为nil。初始化格式:标准格式var 变量名 类型 = 表达式;编译器推导类型的格式var 变量名 = 表达式; 将类型省略后,编译...

2020-04-14 16:04:03 96

原创 GoLand的第一个go程序

学习资料:https://www.runoob.com/go/go-tutorial.htmlhttp://c.biancheng.net/view/3995.html开发工具:GoLand一个Go语言项目的目录一般包含以下三个子目录:src 目录:放置项目和库的源文件。用于以包(package)的形式组织并存放 Go 源文件,这里的包与 src 下的每个子目录是一一对应。例如,若一个...

2020-04-13 17:34:16 1003

原创 二分查找细节讨论

二分查找框架二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。public int binarySearch (int[] nums, int target) { int left = 0; int rigt = ...; while (left ... rigt)...

2020-03-23 22:48:21 153

原创 比较器compareTo和compare()的lambda用法

//s1+s2 > s2+s1, 则返回1list.sort((s1, s2) -> (s1 + s2).compareTo(s2 + s1));/*** @param anotherString the {@code String} to be compared.* @return the value {@code 0} if the argument string...

2020-03-22 17:32:12 2255

原创 代理模式

代理模式在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。...

2020-03-09 17:08:36 78

原创 适配器模式

适配器模式适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。应用实例:1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK...

2020-03-08 20:45:28 97

原创 JVM面试题

JVM垃圾回收机制垃圾回收(Garbage Collection,GC):释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。垃圾判断算法:引用计数法:给每个对象添加一个计数器,当有地方引用该对象时计数器加1,当引用失效时计数器减1。用对象计数器是否为0来判断对象是否可被回收。缺点:无法解决循环引用的问题。例子:pu...

2020-03-08 13:33:59 117

原创 dependencies.dependency.version‘ for org.hibernate:hibernate-validator:jar is missing.

基于springboot搭建项目时,引入了参数校验,方便我们对service层模型的属性校验。<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId></dependency>最初引入时,没...

2020-01-02 10:21:55 1077

原创 Springboot使用Validation参数校验方法,附代码

先在pom.xml文件中添加依赖:<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId></dependency>Service层中的领域模型使用@NotBlank等注解校验参数:imp...

2019-12-27 10:51:43 237

原创 插入记录时,提前获取记录自增id

为了减少数据库的io操作,我们有时希望在记录插入前获取到记录的自增id。解决方法:在xml文件中,插入语句添加 keyProperty=“id” useGeneratedKeys=“true”<insert id="insertSelective" parameterType="com.miaoshaproject.dataObject.UserDO" keyProperty="id"...

2019-12-25 15:41:27 1071

原创 springboot返回json给前端,中文出现乱码

解决方法一:在RequestMapping里设置 produces = { “application/json;charset=UTF-8” }:但是麻烦,每个controller都要写一次。@ResponseBody@RequestMapping(value = "/get", produces = "application/json; charset=utf-8")解决方法二:...

2019-12-20 10:47:36 4105

原创 java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents

springboot连接mysql报错:解决方法:在application中url后加上:?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8

2019-12-19 17:16:06 405

原创 ...xxx/pom.xml already exists in VFS

"...xxx/pom.xml already exists in VFS"报错解决方法:这种错误发生的场景应为:删除工程文件夹后,重建工程。如果只是删除工程,还会有这样的提示。说到底,删除工程后,还要清理IDEA的缓存。可以按照以下方法解决1、打开IDEA,任意打开一项目。2、在菜单中依次找到"File -----> Invalidate Caches / Restart"。...

2019-12-18 16:01:00 678

原创 内部类(静态与非静态)面试题

在Java中,可以将一个类定义在另一个类里面,这样的类称为内部类。内部类一般分为四种:成员内部类,局部内部类,匿名内部类和静态内部类。成员内部类成员内部类可以无条件访问外部类的所有成员属性和方法(包括private成员和静态成员)。需要注意:当成员内部类拥有和外部类的同名的成员变量或方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,则需要用如下形式访问...

2019-12-01 22:43:20 220

原创 Java面试基础

抽象类和接口有什么区别?抽象类可以有构造方法,但不能通过new创建实例对象,其构造函数是提供给子类创建对象的时候初始化父类的属性;接口中不能有构造方法。抽象类中可以用普通成员变量;接口中不能有普通成员变量,只能为静态成员变量。抽象类中有抽象方法,也可以有非抽象普通方法;接口中所有的方法必须是抽象的。抽象类中抽象方法的访问权限可以为public和protected;接口中的抽象方法只能是p...

2019-10-29 20:29:32 103

原创 Mongodb增删查改操作,附代码

更新操作代码: public void delete(MongoData mongoData) { String sbj = mongoData.getSbj(); String prd = mongoData.getPrd(); String obj = mongoData.getObj(); //判断三个元素是否为空,都为...

2019-10-25 16:32:32 115

空空如也

空空如也

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

TA关注的人

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