自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring的误区使用注意事项

1、@Order对自定义的普通bean无控制顺序的作用已知有用的场景:@AspectJ定义的切面类的加载顺序ApplicationListener的实现类的加载顺序控制CommandLineRunner的实现类的加载顺序2、配置的优先级@Configuration的配置类在最先被初始化,多个@Configuration配置类,顺序由你构造AnnotationConfigApplicationContext时传入的顺序为准(若是被scan扫描进去的,则无序),然后是@Bean、@Compo

2020-11-11 20:15:07 222

原创 redis不能从连接池获取连接错误

有时候大意总会导致故障的出现,最近一个小小问题,我也记录一下吧在就要公司框架自己写了个redis访问dao,然后过去一段时间后线上出现过一次redis不能获取连接的频繁报错,然后当时重启恢复但是没有细跟,然后到了昨天一个happy的周末又出现这个频繁报错信息了并且有影响到线上接口了。。。。然后定位了下,应该我写的dao里的pipeline因为查询超时异常导致没有走到pipeline的释放操作,这样累积起来就恶性循环了,因为资源实现了autoclose接口,所以可以直接套用try-resource的写法解

2020-10-26 20:52:42 588

原创 AspectJ的LoadTimeWeave 织入与静态编译代理

最近在公司在折腾监控的事情,有用到LTW加载时期织入的代理去统一全部的监控框架使用,LTW比spring aop动态代理的好处在于不限制在spring容器内的bean类、而且对方法嵌套也同样支持(动态代理会生成额外的代理类解析this会有问题)整体开启使用,主要有以下三步:开启LTW在工程配置类上加上注解即可@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.AUTODETECT)LTW需要asp

2020-09-27 11:45:36 735

原创 sentinel的降级原理以及疑问--小记

sentinel是阿里的限流熔断工具,我今天正要在scg网关处使用sentinel来对下游api服务的调用加上限流熔断降级功能,看文档的时候关于限时降级我一直想的是当次请求不满足时长要求就要降级的,但是实际操作起来好像并不是这么回事。sentinel降级的原理比较简要的概括就是:统计时间窗口内的指标,并且定时reset这些窗口属性值,每次请求过来再根据当前窗口的值判断是否满足要求决定是否降级...

2020-04-15 23:02:45 881

原创 DFS的灵活应用二:零钱兑换

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1思路:数组整体降序排列,然后dfs深度遍历,每次都挑额度大的先拿,以目前金额能拿多少就拿多少,拿多了就回溯走其他情况,相当于要把全部情况走一遍找到最小次数代码设计中比较好的点:有的回溯是要在递归的后面做额外补偿,此处的回溯是基于...

2020-03-25 22:26:41 286

原创 阿里校招编程打牌题--DFS的灵活应用以及设计思路分析

可能在公司业务代码写的恶心了需要看看清新的内容,看了下昨天阿里校招实习的题目,题目内容:(看别人解题逻辑来启发自己,代码是别人的,思路是我总结的)有一叠扑克牌,每张牌介于1和10之间有四种出牌方法:单出1张出2张对子出五张顺子,如12345出三连对子,如112233给10个数,表示1-10每种牌有几张,问最少要多少次能出完分析思路:出牌方式有很多种,所以需要把每种出牌方式的...

2020-03-21 16:06:06 805

原创 Spring Cloud Gateway网关服务搭建

Spring Cloud Gateway网关服务的功能点开发介绍动态路由(Rest接口、nacos注册中心配置)自定义权重负载均衡,选择nacos同集群实例优先部署Spring Cloud sleuth +Zipkin 链路监控统计Hystrix限流熔断优雅停机逻辑(新请求503重试,已有请求延迟处理完毕)上述功能点已经落地上线,后续我会把上面几点信息补足介绍,后续http转发性能有瓶...

2020-01-17 19:40:45 453

原创 Nacos 1.2.0版本引入公司落地使用记录

NACOS适配Docker部署修改Eureka在奈飞那边已经是不维护状态,而且在我们之前的使用过程中偶发性会有一些http请求超时的日志,nacos的长连接实时刷新、分组分集群、权重路由、管理界面、附带配置中心等功能点,让我下定决心准备落地尝新一波~目前业务服务全部部署在公司的Docker服务上,nacos集群模式是要写死地址在配置文件里面的(2019.01.17),所以在引入nacos作为...

2020-01-17 19:32:40 2189

原创 XXL-JOB在公司内容器化部署问题记录

XXL-JOBxxl-job是外面一个web可视化管理的分布式任务管理平台,之前我们组的定时任务因为逻辑不复杂也不算太重要,所以最开始就是redis的setnx,后来任务key的过期时间不太好定值,后来换成zk的分布式锁,临时文件节点实现任务时效性更好一些,但是功能性还是差了一些也不太智能,所以调研了一番觉得xxl-job很轻量化功能性也丰富一些(执行策略,GLUE Web IDE、查看调度结果...

2019-07-28 13:12:22 1459 2

原创 JVM问题排查记录

CPU报警背景:公司应用频繁cpu报警,火速开始排查。原因:在于一个Spark Job扫描任务将待处理数据通过RocketMq发消息的方式发送到datastore应用进行处理,应用接受处理的地方还使用了线程池(Fixed),所以积压严重并且线程池打满(不指定就默认整数大小的队列),所以这里把线程池改成自定义队列长度的写法调用策略为CallerRun。刷数据经过应用存储在couchbase...

2019-06-11 22:05:18 279

原创 企业中数据存储方案泛讲

企业实践中的数据存储方案对企业中常见的存储方案做一下简要介绍存储DB对企业中常见的存储方案做一下简要介绍毕业之后就没有更新博客了,后面要陆续捡起来了,hhhhhhhhhhhhh…存储DBTiDB相比mysql大数据量下避免分库分表降低业务复杂度,支持分布式事务,高度兼容Mysql5.7,高并发能力一般达不到nosql那种,qps也不如mysql。Hive 高可用,mapreduce计算...

2019-06-11 21:22:20 445

原创 说说Java8中的几个函数式接口

JAVA8中的函数式接口 Function、Supplier、Predicate、Consumer这几个接口在Java8中已经定义好,因为每个接口基本主要就有一个接口方法所以其实完全可以自己通过@FunctionalInterface自己定义使用,不过人家给你定义好了而且一般java8这些接口里面除了主要接口方法外还有几个default方法,所以很多时候我们直接用会更方便一些。Predic...

2018-04-07 10:31:00 382

原创 Futrue设计模式

Futrue模式就是咱们经常使用到的异步回调模式,异步执行直接返回不含真实数据的结果对象,等获取到真实数据后通过回调返回数据。package com.healist.coder;/** * @Author healist * @Description * @Create 2018-03-20 下午5:09 */public class FutureLearn { i...

2018-03-20 17:44:18 381

原创 (很大长度字符串)判断是否有公共子串

判断是否有公共子串是很简单的问题,暴力遍历应该可以解决的,但是在OJ上大长度的字符串会超出题目的时间效率限制。这里简单记录一下判断公共字串的一种相对巧妙的方式,利用二维数组存储所有字母的邻接可能(这里假设都是小写字母) public boolean isCommonStr(String a, String b) { boolean[][] mark = new b...

2018-03-17 11:55:57 581

原创 CountDownLatch与CyclicBarrier

这次介绍的是JAVA并发容器中的俩个常见容器:CountDownLatch与CyclicBarrierCountDownLatch (闭锁)听听这个名字,直白的翻译就是倒计时锁,功能也差不多,下面我白话介绍一下: 裁判在主持比赛通常都倒计时一下,3,2,1跑!然后几个运动员听到0的瞬间猛的跑出去。 CountDownLatch 的countDown方法执行一次就回在数量上减一...

2018-02-22 18:05:21 245

转载 浅谈一致性HASH

在实际开发中,我们经常会用到hash算法来分散分布数据到几个节点上(数据库分片或者服务器请求等等),但是在添加节点到时候就很可能导致大规模到数据迁移。接下来开始话糙理不糙的讲解,形式不重要,重在领会精神:传统hash取模示例如下10条数据,3个节点: 节点1:0,3,6,9 节点2:1,4,7 节点3:2,5,8这个时候添加一个节点4: 节点1:0,4,8 节点2:1,5...

2018-02-21 22:05:58 369

原创 JVM常见参数设置记录

-xx:newRadio:设置 young 和 old 的比例,-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 -xx:survivorRadio:设置 eden 和 survivor 的比例: survivor 大了,会浪费空间,空间利用率低。若 survivor 太小,会使一些大对象在 minor gc 时直接从 eden 区到 old 区,让 ol...

2018-02-21 17:57:43 491

原创 生产者消费者的JAVA实现

生产者消费者问题,对于同一任务队列,生产者线程生产任务数据,消费者线程消费任务数据。常见实现方式如下: - 基于同步机制的wait/notify来实现 - 基于并发容器BlockingQueue (BlockingQueue只是接口,有很多不同的具体实现子类) - 管道通信 PipedInputStream / PipedOutputStream代码示例如下:BlockingQu...

2018-02-21 17:02:37 289

原创 Redis和DB数据不一致解决方案

大多情况下,我们使用缓存都是这样的策略:先读缓存,读取不到就读数据库然后同步到缓存中。问题出现场景问题就是在并发访问中,不论是先写库,再删除缓存;还是先删缓存,再写库,都有可能出现数据不一致的情况1、在并发中是无法保证读写的先后顺序的,如果删掉了缓存还没来得及写库,另一个线程就过来读取发现缓存为空就去数据库读取并写入缓存,此时缓存中为脏数据。 2、如果先写了库,再删除缓存前,写库...

2018-02-21 00:28:37 4240 1

原创 JAVA中的Int范围

很简单有趣的一个知识点,但之前说实话没怎么注意原理,特此简单记录一下:以32位操作系统为例: JVM需要用32位来存储数据,范围最大值(十进制)就是2^32,但是这样就是0~2^32范围了,因为int有正负之分,所以舍出首位用01区分正负,所以int在JAVA中的范围就是正负2^31...

2018-02-20 23:10:21 746

转载 Synchronized的底层实现

此篇博客内容学习于此篇博客synchronized的使用场景修饰普通方法 (对象实例锁)修饰代码块 (对象实例锁)修饰静态方法 (类锁)synchronized底层原理(主要基于对象头和monitor来实现)synchronized的锁就是存在于对象头中,Monitor监视器就是相当于同步工具对象头对象头包括俩部分:1、Mark Word(标记字段...

2018-02-20 22:50:57 618

原创 JAVA的wait和notify

多线程经常会接触到线程交互场景,wait和notify、notifyAll就是起到这个作用,三个方法必须要在synchronized锁区域内执行,也就是必须要有当前对象的monitor(锁)。wait: 阻塞当前线程,交出锁的控制权,等待下一次获取锁继续上次的执行notify:通知等待当前对象的monitor的线程进行唤醒(注:只能唤醒一个,后续在当前锁区域内的代码还会继续执行)notif...

2018-02-20 17:24:21 251

原创 serialVersionUID的作用

我们在实现Serializable接口进行序列化传输的时候,经常会涉及到定义一个long型的serialVersionUID,我们来说一下其作用。这里假设A端序列化传输,B端进行反序列化。1、A、B俩端序列号不一致结果:报java.io.InvalidClassException异常2、A、B俩端序列号一致,A端新增字段,B端不变结果:序列化和反序列化正常,不过新增字段在B端被...

2018-02-19 17:40:47 229

原创 Spring的HandlerMethodArgumentResolver接口

Spring中可以通过实现HandlerMethodArgumentResolver接口来自定义参数装配,其原理我了解就是基于拦截器。下面我通过讲述自定义的@CurrentUser注解来解释HandlerMethodArgumentResolver接口的使用。注解定义/** * 在Controller的方法参数中使用此注解,该方法在映射时会注入当前登录的User对象 */@Target(Ele

2018-01-03 15:54:19 894

转载 谈谈JWT

介绍JWT:JSON Web Token 是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的标准( RFC 7519 ),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。特点简洁: 可以通过URL,POST参数或者在HTTP he

2018-01-03 13:45:30 331

转载 Spring中Resource和ResourceLoader

Spring中定义很多Resource类型(对资源文件的封装)ClassPathResource (类路径下)FileSystemResource (文件系统)UrlResource (网络url)ByteArrayResource (byte数组)ServletContextResource (访问ServletContext环境下的资源)InputStreamResource (输入

2018-01-02 19:16:12 692

原创 Spring的BeanPostProcessor、BeanFactoryProcessor

Spring中Bean有对应的生命周期和加载处理流程,BeanPostProcessor和BeanFactoryProcessor俩个接口就可以在全局的在所有bean的流程中加入自己的操作。通过实现接口方法即可添加自定义的回掉操作BeanFactoryProcessor作用:其作用与BeanPostProcessor大致相同,不过 postProcessBeanFactory可以在BeanFacto

2017-12-29 14:12:16 427

原创 Spring内部的事件监听实现

简单记录一下,在spring中如何实现Observer模式,这里以游戏事件来举例实现基于spring的ApplicationEvent类和ApplicationListener接口先定义一个游戏事件@Getter@Setterpublic class GameEvent extends ApplicationEvent { private String name; private

2017-12-29 11:36:22 335

转载 小谈X-Forwarded-For

实际开发中我们经常会需要获取用户的ip地址,http的请求头X-Forwarded-For一般能为我们达到此目的。X-Forwarded-For 请求头格式:(示例如下)X-Forwarded-For: ip0, ip1, ip2这个 就表示用户真实ip地址为ip0,然后经过ip1的代理和ip2的代理才请求过来的。最后一层的代理是没有在X-Forwarded-For中出现的,最后一层代理的ip地址可

2017-12-28 19:08:45 1010

原创 spring bean的初始化方式小记

大致有以下三种哈1、 实现InitializingBean接口,实现afterPropertiesSet方法2、 通过xml配置bean的init-method指定3、 @PostConstract注解,第二条的注解形式,原理相同注:InitializingBean的执行顺序是在ini-method方法之前的,如果在afterPropertiesSet定义的代码出错则不会执行init-metho

2017-12-21 20:08:39 501

原创 微服务泛谈

微服务微服务架构现在越来越普遍了,优势大致有: 1、系统模块间解耦,每个系统负责单一责任 2、每个系统都可以应用独立的技术栈 3、每个系统都可以独立部署 缺点大致有: 1、拆分的度,过度拆分? 2、拆分之后就有统一的问题,数据库、事务、锁等的一致性方案 3、测试不方便 4、部署困难api网关服务eg:一个淘宝app上可能有很多服务,购物车、订单系统、目录、评论、推送等等服务,如果在微

2017-12-21 17:38:51 276

原创 转发一篇很不错的面试总结汇总文章

虽然我的校招刚刚结束了,不过这种文章偶尔回顾一下也能查缺补漏了,这位大大总结的很全面各大公司Java后端开发面试题总结

2017-12-12 14:20:11 384

原创 浅谈Mybatis中的零散点

首先mybatis是对jdbc的封装之后的框架,它并不直接对接数据库。缓存mybatis有一级缓存和二级缓存,一级缓存是sqlsession级别的,二级缓存是mapper(namespace级别的) mybatis默认是一级缓存# 和 $的区别引用: mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态

2017-12-11 16:57:02 250

原创 记录一次大量数据库查询操作

今天在公司帮产品经理处理几十个比较大的excel表格遇到了小小的波折,简单记录一下 平均一个excel就有一百多万条数据(48m左右),以下为操作步骤:1、用navicat导入excel文件:少导入数据,有很多数据不进行导入2、设置mysql表大小的限制参数,默认4m,这里我设置512m,仍然导入部分数据3、excel文件转csv,成功全部导入4、无脑写一个sql语句进行处理,好吧,很慢,慢出*

2017-12-05 17:09:48 3068

原创 浅谈过期数据在各种数据库中的删除

记录可能不全面,想到什么就记录一下Redisredis的删除过期数据策略如一下三个所示:get/set 一个过期数据的时候,redis会进行清除redis定期清除过期的key的数据数据存储超过内存限制的时候,触发主动清除策略 (策略有很多种,可自己进行定义)MySQL基于事件触发器 event_scheduler来定时删除 (相当于mysql后台的定时任务)MongoDB设置ttl索

2017-12-03 15:36:28 2038

原创 Spring静态变量注入

记录常见的俩种方式bean的生命周期@Componentpublic class ParamManager { public static String appKey; public static String appToken; public static String baseUrl; @Value("${lifesmart.appkey}") priva

2017-11-28 19:25:46 542

原创 Reponse响应头设置备注

简单记录一下java的reponse头设置类型content-type常见的媒体格式类型如下: - text/html : HTML格式 - text/plain :纯文本格式 - text/xml : XML格式 - image/gif :gif图片格式 - image/jpeg :jpg图片格式 - image/png:png图片格式以application开头的媒体格

2017-11-21 10:46:14 537

原创 最小堆JAVA(Top K问题)

Top k问题很多情况下比较常用的解决方法就是最小堆,最小堆的建立一般基于数组来模仿树的结构,左右子树和父节点都可以根据数学关系式来呈现,代码如下:public class MinHeap{ // 堆的存储结构 - 数组 private int[] data; // 将一个数组传入构造方法,并转换成一个小根堆 public MinHeap(int[] data)

2017-10-20 11:24:27 1240

原创 01背包——JAVA实现

简单的动态规划输入一个n,表示有n道题,接下来的n个表示每道题的分数,再接下来的n个表示每道题的花费时间,最后输入考试总时间长度。(每道题都能做上)输出:该场考试能获得的最高分数public class Score { public static void main(String[] args) { Scanner sc = new Scanner(Syst

2017-09-26 21:07:23 734

原创 MySQL索引结构类型划分

一、数据结构角度: 1、B+树索引 2、hash索引 (只能=值查询,检索效率高,只有memory引擎支持) 3、FULLTEXT (全文检索) 4、R-tree (GIS数据类型)二、物理存储角度 1、聚集索引 2、非聚集索引三、逻辑角度 1、主键索引 2、普通索引 3、复合索引 4、唯一索引 5、空间索引

2017-09-24 23:56:39 500

javax.mail的jar包

发送邮件的jar包

2017-01-29

空空如也

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

TA关注的人

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