IT不归撸
文章平均质量分 81
就是杂七杂八的有关开发的原创文章,一入IT深似海,冷暖自知不归路
专业的程序员
十五年开发经验,10年互联网老兵,曾担任旺旺集团核心开发课副课长兼架构师,在多家互联网企业中担任架构师、开发组长等职位。常年奋战在微服务、高并发、低代码一线,喜欢钻研技术,喜欢分享经验
展开
-
Graylog2+rsyslog+log4j 全过程日志管理环境搭建
笔者刚刚进入一家新公司,leader给我的第一个任务就是研究一下graylog2这个日志管理框架,目的要把我们java开发过程中的logger统一放到一起,便于排错。经过一周的研究,已经把整个环境搭建完成,现把整个过程记录如下: 第一步:安装Graylog2环境(CentOS7) 这里网上有很多的教程,直接看官网也是不错的,笔者绕了很大的圈子,最后是参...原创 2017-05-12 16:49:44 · 15690 阅读 · 1 评论 -
面试集中营—JVM篇
线程独占:栈,本地方法栈,程序计数器;线程共享:堆,方法区虚拟机栈:线程私有的,线程执行方法是会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方法出口等信息.调用方法时执行入栈,方法返回式执行出栈;本地方法栈:与虚拟机栈类似,也是用来保存执行方法的信息.执行Java方法是使用栈,执行Native方法时使用本地方法栈;程序计数器:保存着当前线程执行的字节码位置,每个线程工作时都有独立的计数器,只为执行Java方法服务,执行Native方法时,程序计数器为空;原创 2024-05-07 16:10:04 · 813 阅读 · 0 评论 -
面试集中营—Redis面试题
Redis是基于非阻塞的IO复用模型,内部使用文件事件处理器(file event handler),这个文件事件处理器是单线程的,所以Redis才叫做单线程的模型,它采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器进行处理。文件事件处理器的结构包括四个部分1、多个socket;2、IO多路复用程序3、文件事件分排器4、事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)多个 socket。原创 2024-05-07 14:19:59 · 1189 阅读 · 0 评论 -
面试集中营—Spring篇
Spring框架的好处Spring框架的好处1、轻量:spring是轻量的,基本的版本大约2MB;2、IOC:控制反转,Spring的IOC机制使得对象之间的依赖不再需要我们自己来控制了,而是由容易来控制,一个字:爽;3、AOP:切面编程,Spring提供的AOP技术可以把应用逻辑和系统服务分来,编码更灵活,更方便;4、MVC框架:如果使用过Struts2的同学,使用springmvc就会觉得非常的舒适,spring提供的mvc框架是一个非常优秀的Web框架;原创 2024-05-06 16:34:12 · 850 阅读 · 0 评论 -
面试集中营—Redis架构篇
1、redis6.0版本之前的单线程,是指网络请求I/O与数据的读写是由一个线程完成的;2、redis6.0版本升级成了多线程,指的是在网络请求I/O阶段应用的多线程技术;而键值对的读写还是由单线程完成的。所以redis多线程的模型依然是线程安全的。原创 2024-05-06 14:11:01 · 1163 阅读 · 2 评论 -
面试集中营—ElasticSearch架构篇
1、支持多种数据类型。它可以处理非结构化、数值和地理信息等多种类型的数据;2、简单的RESTful API。ES提供了一个简单易用的RESTful API,使得它可以从任何编程语言中调用,降低了学习的曲线。3、近实时搜索。ES每隔1秒将数据存储至系统缓存中,使用倒排索引提高检索效率,使得搜索数据变得快速且高效。4、支持相关性搜索。它可以根据条件对搜索结果进行打分,提供了基于文档的全文检索能力。5、天然分布式存储。ES是分布式的,使用分片支持处理PB级的数据量,易于扩展,可部署在数百台服务器的集群中。原创 2024-04-26 11:21:23 · 1354 阅读 · 5 评论 -
面试集中营—场景面试题A
第一步我们要首先确定是什么导致的消息积压,基本上三个原因线上消息积压第一步先看日志,是否在消费端出现了系统异常,系统异常有可能是磁盘满了,挂载盘故障了,网络不稳定或者有黑客入侵植入了其他程序侵占了系统资源等等。系统异常排除,就通过日志查看是否存在业务异常,是否有大量的报错信息,如果存在那么应该是代码的问题,此时就要快速修复问题,然后上线。如果不是代码的问题,那么就要考虑当前消费线程的执行时间是否过长,每次消费的时间太长也会造成消息的积压,通过各种工具可以检测到消费的时长,如果很长那么也需要优化代码。原创 2024-04-23 10:33:47 · 997 阅读 · 0 评论 -
面试集中营—mysql架构相关
了解一个中间件一定要从架构开始,上来就背八股文那就没意思了。从下图可以看到Mysql的包括网络连接、服务、数据存储和系统文件(日志)四大部分。数据连接:客户端连接器(Client Connectors):提供与MySQL服务器建立的支持;服务:又包括了sql接口,sql解析器,查询优化器,缓存等模块,主要是把sql进行解析和处理;数据存储:主要是存储引擎,常用的就是MyISAM和InnoDB;原创 2024-04-23 10:34:14 · 1049 阅读 · 0 评论 -
面试集中营—AQS哪些事儿之ReentrantLock
AQS—AbstractQueuedSynchronizer是JDK工具包中的一个抽象类。在这个抽象类中,有几个属性和一个双向队列(FIFO)。是JUC并发包下的一个基类,那么我们熟知的ReentrantLock、CountDownLatch、信号量等等都是基于这个基类来实现的。原创 2024-04-22 15:08:23 · 1083 阅读 · 0 评论 -
面试集中营—AQS哪些事儿之CountDownLatch
AQS既可以用来实现互斥锁也可以用来实现共享锁,互斥锁确实可以用boolean来定义state的类型,但是共享锁需要多个线程持有一个锁资源,那么boolean就不适合了,state定义成int类型可以表示线程占用的数量。原创 2024-04-22 15:07:17 · 589 阅读 · 0 评论 -
面试题集中营—GC日志简析及频繁GC的调优
有两种方式查看GC日志,一种是动态命令行查看第二种就是在JVM参数中增加打印的参数,如下:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps 表示打印每次GC的日志以及GC发生的时间-Xloggc:gc.log 可以把gc日志写入文件中。原创 2024-04-18 11:25:49 · 1167 阅读 · 0 评论 -
使用redis实现延时消息发送功能
redis本身也有发布订阅的模式,但是如果想要实现例如rocketmq或者rabbitmq的延时任务功能要怎么做呢,目前比较流行的做法有两种,一种是使用sortedset数据模型,把超时时间设置为score,然后系统启动一个定时任务定时去检查score超时的key然后把key取出来,再进行下一阶段的任务;第二种方法就是利用redis本身的通知机制,当key到期的时候会进行通知,通过捕获通知的信息来实现延时通知的效果。本文使用第二种方式,并且通过注解和反射使得整体功能更具有扩展性和适用性。原创 2023-11-03 16:25:58 · 828 阅读 · 0 评论 -
Rocketmq消费者示例
上一篇讲述了生产者示例,这里继续消费者示例。原创 2023-11-03 14:36:13 · 328 阅读 · 0 评论 -
RocketMQ入门示例-生产者
大家好,本文主要是按照官网的教程把消费者和生产者的示例写下来,开箱即用。原创 2023-11-03 14:29:45 · 147 阅读 · 0 评论 -
[JsonSchema] JsonSchema对比 (Java 版)
本工具主要是对两个JsonSchema字符串进行比较,工具类代码如下:public class JsonSchemaUtil { /** * @Author eric * @Description 比较target与origin的不同 * @Date 上午11:31 2022/2/21 * @Param [origin, target] * @return void **/ public static Json...原创 2022-02-21 23:06:17 · 997 阅读 · 0 评论 -
Spring AOP实战开发(四)AOP+Redis实现接口限流
需求:要求同一个接口同一时间 仅能处理N个请求,超过就返回;不是时间窗口也不是秒杀,接口处理完成后又可以继续接收请求;分析:有点像令牌桶算法,但是并不是每隔一段时间放几个令牌,而是永远只有这几个令牌;计划采用redis的increase方式,设定一个最大值Max,每次请求先判定当前key是否超过Max,如果已经超过就返回,没有超过就自增,分布式可用;实现: 创建一个注解类AccessLimit ,key是需要需要自增的redis中的key,可以由接口提供,limit就是最大值@Inher.原创 2020-11-17 18:12:10 · 670 阅读 · 0 评论 -
【面试快问块答】一:Redis七问七答
redis为什么是key,value的,为什么不是支持SQL的? redis是多线程还是单线程?(回答单线程的请回吧。。) redis的持久化开启了RDB和AOF下重启服务是如何加载的?(10个人9个回答错误) redis如果做集群该如何规划?AKF/CAP如何实现和设计? 10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户? redis的5种Value类型你用过几种,能举例吗? 100万并发4G数据,...原创 2020-11-13 16:44:54 · 332 阅读 · 0 评论 -
JDK9-13新特性展示(四)— JDK12
public class TwelveNewTest { private static final int MONDAY = 1; private static final int TUESDAY = 2; private static final int WEDNESDAY = 3; private static final int THURSDAY = 4;...原创 2019-11-07 11:47:55 · 210 阅读 · 0 评论 -
JDK9-13新特性展示(三)— JDK11
public class ElevenNewTest { /** * TTPClient转正 * JDK9中便引入httpclient模块,但它在jdk.incubator.httpclient包下,在java11被标记为正式,改为java.net.http模块。 **/ public static void httpTest() throws I...原创 2019-11-07 11:47:15 · 302 阅读 · 0 评论 -
JDK9-13新特性展示(二)— JDK10
* DK10中包含许多对JVM的优化: * * 将JDK多存储库合并为单存储库 * 并行Full GC 的G1 * 垃圾回收接口 * 应用数据共享 * 线程局部管控 * 基于实验JAVA 的JIT 编译器 * 备用内存设备上分配堆内存 **/public class TenNewTest { /** * 局部变量...原创 2019-11-07 11:46:28 · 212 阅读 · 0 评论 -
JDK9-13新特性展示(一)— JDK9
所有的说明和代码都在一起,直接放代码,大家就可以很清楚的看到了。没有列出所有的新特性,只是列出了基本开发中可能会用到的新特性 public class NineNewTest { /**不可变集合工厂方法 * Java 9增加了List.of()、Set.of()、Map.of()和Map.ofEntries()等工厂方法来创建不可变集合。 ...原创 2019-11-07 11:45:27 · 896 阅读 · 0 评论 -
ScheduledExecutorService在spring中实现动态启停、修改间隔时间的功能(三)手动实现cron
在上一节中,我们已经成功的实现了动态配置起始时间,那么现在我们来实现一个简单的cron,那么我们定义一个三个参数的cron分别是分钟 小时 和周天 主要是增加一个init()的方法,为了简单起见,分钟只实现了 / 其他的只实现了 - 的功能 /** */ public ScheduledTask(String taskId, String className, Strin...原创 2019-06-12 15:42:50 · 2574 阅读 · 2 评论 -
ScheduledExecutorService在spring中实现动态启停、修改间隔时间的功能(二) 动态配置起始时间
在第一部分我们已经实现了动态启停,修改间隔时间的功能,那么如果我们想要让某个定时任务只在每天的8点到12点执行,怎么办呢。对此我们可以对上一个项目https://blog.csdn.net/money9sun/article/details/88575704 进行升级首先我们要对 ScheduledTask 增加两个字段 起始时间 我们设置成字符串格式 强制要求为12:00 这种格式...原创 2019-03-20 14:51:08 · 4528 阅读 · 2 评论 -
ScheduledExecutorService在spring中实现动态启停、修改间隔时间的功能
ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用下面是一个简单的例子,功能就是每隔1秒中执行一下run里面的方法public class ScheduledExecutorServiceTest { public static void main(String[] args) { ScheduledExecutorSe...原创 2019-03-15 16:01:18 · 8437 阅读 · 0 评论 -
SSM与Shiro、Redis集成实现分布式session管理(三)—— session设置
经过前两章,我们已经将ssm与shiro配置完毕,现在添加redis的工具类@Componentpublic class RedisUtil { private RedisTemplate<Serializable, Object> redisTemplate; /** * 批量删除对应的value * ...原创 2019-01-23 10:02:54 · 2078 阅读 · 5 评论 -
SSM与Shiro、Redis集成实现分布式session管理(二)—— shiro配置
上一篇已经将环境搭建完毕,现在配置shiro的相关 新建自己的realmpublic class MyRealm extends AuthorizingRealm { @Autowired private UsersService usersService; @Override protected Authorizatio...原创 2019-01-23 09:55:15 · 2523 阅读 · 0 评论 -
SSM与Shiro、Redis集成实现分布式session管理(一)—— 环境搭建
对于分布式系统来说,分布式session是首先要解决的问题,业界目前的解决方式大概可以归纳为三种(转自http://www.cnblogs.com/cxrz/p/8529587.html)一、Session Replication 方式管理 (即session复制) 简介:将一台机器上的Session数据广播复制到集群中其余机器上 使用场景:机器较少,网络流...原创 2019-01-23 09:49:49 · 3334 阅读 · 0 评论 -
spring事务的多数据源的annotation-driven用法
笔者最近项目中用到了多数据源的事务处理,由于经验不足,写的事务总是不能正常rollback,spring的配置文件如下: <tx:annotation-driven transaction-manager="transactionManager" /> <tx:annotation-driven transaction-manager="transactionMan...原创 2018-04-16 10:48:01 · 897 阅读 · 0 评论 -
报错:java.lang.Integer cannot be cast to java.lang.Long
笔者在项目中写了一个查询方法,从数据库中查询一组数据,代码如下:List<Map<String,Integer>> levelList = ceoLevelMapper.selectDownGradeCeoList();mybatis如下: 表中的 memberKey数据类型为Long,levelKey数据类型为Int <select id="selectDow...原创 2018-04-12 10:57:03 · 15920 阅读 · 0 评论 -
Ajax跨域请求失败,SpringMVC解决方法
笔者最近的项目中出现了Ajax跨域请求失败的问题,一开始希望通过第一种方法:callbackjs:var phone = "18321618669";var _url2 = "http://127.0.0.1:8080/activity/zombiePotions.ctrl?mobilePhone="+phone; $.ajax({ url:_url3, dataType: 'js...原创 2018-04-09 09:31:09 · 1677 阅读 · 0 评论 -
Struts2与Ajax联合,返回list的问题
最近在做一个小系统,在尝试用Struts2框架下用Ajax技术进行异步刷新。主要配置如下: Struts的配置文件: message,list.*原创 2016-10-27 14:35:07 · 2609 阅读 · 1 评论