Java杂记
半岛铁板
努力的人总会得到帮助
展开
-
Netty中ByteBuf的copy、duplicate、slice方法对比
敬请期待~原创 2020-04-06 22:07:24 · 5355 阅读 · 0 评论 -
对象的创建过程
类的生命周期Java中对象的创建就是在堆上分配内存空间的过程,此处说的对象创建仅限于new关键字创建的普通Java对象,不包括数组对象的创建。对象创建过程1.检测类是否被加载当虚拟机执行到new时,会先去常量池中查找这个类的符号引用。如果能找到符号引用,说明此类已经被加载到方法区(方法区存储虚拟机已经加载的类的信息),可以继续执行;如果找不到符号引用,就会使用类加载器执行类的加载过程,类加载完成后继续执行。2.对象内存分配类加载完成以后,虚拟机就开始为对象分配内存,此时所需内存.转载 2020-05-28 14:17:37 · 346 阅读 · 0 评论 -
Curator——Service Discovery
JAR包:Curator Service Discovery在Maven Central中以其独立的软件包提供:curator-x-discovery什么是Discovery Service在SOA /分布式系统中,服务需要相互查找。 即网络服务可能需要找到缓存服务,等等。DNS可以用于此目的,但是对于不断变化的服务而言,它的灵活性还远远不够。 服务发现系统提供了以下机制:可用服务的注册 查找特定服务的单个实例 服务实例更改通知Curator Service DiscoveryS翻译 2020-05-23 21:53:37 · 1162 阅读 · 0 评论 -
像使用mongoTemplate一样玩转Sql之我的开源项目Gyjdbc
github地址:https://github.com/SpringStudent/GyJdbc目前我们公司正在使用~~~原创 2019-10-15 21:44:00 · 716 阅读 · 0 评论 -
RabbitMQ知识点整理汇总
RabbitMQ的工作机制:首先要知道RabbitMQ的三种角色:生产者、消费者、消息服务器生产者:消息的创建者,负责创建和推送消息到消息服务器 消费者:消息的接收方,接受消息并处理消息 消息服务器:其实RabbitMQ本身,不会产生和消费消息,相当于一个中转站,将生产者的消息路由给消费者RabbitMQ的一些角色ConnectionFactory:连接管理,应用程序或消费方与R...原创 2020-02-14 21:22:40 · 915 阅读 · 0 评论 -
《Redis入门指南》笔记二
本篇幅讲解Redis的进阶知识原创 2020-01-17 11:43:48 · 219 阅读 · 0 评论 -
《Redis入门指南》笔记一
本篇幅主要涉及Redis的配置、基础命令、四种数据类型的操作命令Redis是Remote Dictionary Server远程字典服务器的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。到目前为止Redis支持的键值数据类型如下1.字符串 2.散列类型 3.列表类型 4.集合类型 5.有序集合类型Redis命令返回值1.状态回复:状态回复(sta...原创 2020-01-17 09:18:44 · 284 阅读 · 0 评论 -
AtomicIntegerFieldUpdater与AtomicInteger使用引发的思考
在阅读《实战Java高并发程序设计》一书的4.4.7让普通变量也享受原子操作:AtomicIntegerFieldUpdater使用的demo代码如下:/** * @author 周宁 * @Date 2020-01-03 14:01 */public class AtomicIntegerFieldUpdaterDemo { public static class Can...原创 2020-01-07 19:27:58 · 1883 阅读 · 2 评论 -
ConcurrentLinkedQueue、LinkedBlockingQueue 、ArrayBlockingQueue之间的区别和联系
非阻塞队列ConcurrentLinkedQueue:可以看做是一个线程安全的LinkedList,适用于许多线程共享访问一个公共集合,是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。它采用了“wait-free”算法(即CAS算法)来实现。常用方法:boolean...原创 2020-01-03 17:57:25 · 1060 阅读 · 0 评论 -
Thread的suspend()、resume()与LockSupport的park()、unpark()
Thread的suspend()、resume()方法suspend()方法挂起线程、resume()方法继续执行,如果一个线程调用suspend()方法后,可以通过resume()继续线程的执行。但是jdk已将这俩方法标位@Deprecated,因为使用suspend()方法在使线程暂停但并不会释放线程占用的资源,直到对应线程调用了resume()方法。被挂起的线程才可以继续执行。从而阻塞在...原创 2020-01-02 17:27:58 · 1073 阅读 · 0 评论 -
《从零蛋开始学习MySQL》笔记
MySql数据类型Enum类型和SET类型假如我们有一列是性别只能填男或者女,如果使用Int或者varchar非常尴尬,我们提出了一个叫ENUM的类型,也称为枚举类型,它的格式如:ENUM('str1', 'str2', 'str3' ⋯)它表示在给定的字符串列表里选择一个。比如我们的性别一列可以定义成ENUM('男', '女')类型。这个的意思就是性别一列只能在'男'或者'女'这两个字符串之...原创 2019-12-30 11:45:18 · 942 阅读 · 0 评论 -
使用Swagger测试发布的Dubbo服务之dubbo-swagger
源码地址:https://github.com/SpringStudent/dubbo-swagger源码地址:https://gitee.com/bigfacecat-zhouning/dubbo-swaggerdemo地址:https://github.com/SpringStudent/dubbo-swagger-demo原创 2019-12-02 21:44:33 · 528 阅读 · 0 评论 -
EsAppender代码不当导致队列Mq队列停止消费的问题
问题出现&解决在我们的系统中对MQ消息的消费代码类似如下:private void consumer2Xxx() { EXECUTOR_SERVICE.submit(() -> { try { //mq队列监听 new xxxListener(){ ...原创 2019-11-11 20:24:37 · 342 阅读 · 0 评论 -
Netty实现分段下载文件服务器并集成现有单点登录(CAS)
在工作中有分段下载大文件的需求,年初刚学的Netty,业务接口也已经实现完了,Dubbo源码看的头冷,趁着热情使用Netty手撸一个集成了Cas的分段下载服务器。实现该服务(下文统一称为netty-file)可能会遇到的问题:1.session与session管理设计 2.怎么样集成现有Cas系统,实现单点登录和单点登出 3.单独部署一套服务还是在原有文件系统实现对于3.为了偷懒...原创 2019-11-07 11:23:47 · 1059 阅读 · 1 评论 -
Spring之使用Aop的三种方式
定义将会进行切面增强的类/** * @author 周宁 * @Date 2019-07-20 13:48 */public class AspectBean { public void aspectTest(){ System.out.println("我会被当成切面处理了"); }}1.使用@Aspect的方式定义切面类,定义切入点,增...原创 2019-07-22 21:10:07 · 239 阅读 · 0 评论 -
SpringMVC基础框架环境搭建
1.创建gradle-web项目,老哥在这里命名为study-springmvc2.build.gradle配置plugins { id 'war'}group 'org.springframework.studymvc'version '1.0.0'repositories { mavenCentral()}dependencies { ...原创 2019-08-09 13:52:45 · 167 阅读 · 0 评论 -
Servlet知识点回顾以及SpringMVC分析入口
1.Servlet的生命周期Servlet通过调用init()方法进行初始化。 Servlet调用service()方法来处理客户端的请求 Servlet通过调用destroy()方法结束 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。创建UserServlet/** * @author 周宁 * @Date 2019-08-09 9:44 */publ...转载 2019-08-09 14:33:40 · 174 阅读 · 0 评论 -
SpringMVC配置请求处理的三种方式
SpringMVC框架环境搭建:https://blog.csdn.net/qq_23536449/article/details/98955020方式一:SimpleUrlHandlerMappinga.定义UserController继承自AbstractController接口/** * @author 周宁 * @Date 2019-08-09 9:11 */publ...原创 2019-08-21 10:58:44 · 541 阅读 · 0 评论 -
使用org.apache.commons.lang.ArrayUtils声明可变长数组
import org.apache.commons.lang.ArrayUtils;/** * @author 周宁 * @date 2018/3/9 16:25 */public class MainTest { public static void main(String[] args) { Object[] objs = {}; obj...原创 2019-05-05 14:20:25 · 310 阅读 · 0 评论 -
SpringAOP基础知识储备
1.连接点(Joinpoint) 程序执行的某个特定位置:如类开始初始化前,类初始化后,类某个方法调用前,调用后,方法跑出异常后。一个类或一段程序代码拥有一些具有边界性质的特定点、这些代码中的特定点就成为连接点。Spring仅支持方法的连接点,即仅能在方法调动前,方法调用后,方法跑出异常时以及方法调用前后这些程序执行点织入增强。连接点由两个信息确定: 1)方法表示程序执行点 2)用...转载 2019-07-22 16:17:52 · 138 阅读 · 0 评论 -
Spring之事务的三种实现方式
创建表tb_testCREATE TABLE `tb_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `context` varchar(255) NOT NULL COMMENT '没有实际含义', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=...原创 2019-07-29 15:35:28 · 635 阅读 · 0 评论 -
Interrupt()与InterruptedException
interrupt()与isInterrupted()方法在java很古老的时候,前辈们停止线程的方法可能还是Thread类的stop()方法,但是由于其不安全的原因,jdk已经将该方法废弃,并且提供了更优雅的方式停止线程。public class InterruptThread implements Runnable{ @Override public void run(...原创 2019-06-21 15:22:31 · 1627 阅读 · 0 评论 -
mysql的SQL_CALC_FOUND_ROWS 使用
在很多分页的程序中都这样写:SELECT COUNT(*) fromtableWHERE ......; 查出符合条件的记录总数SELECT * FROMtableWHERE ...... limit M,N;查询当页要显示的数据这样的语句可以改成:SELECT SQL_CALC_FOUND_ROWS * FROMtableWHERE ...... limit M...转载 2019-05-06 08:45:36 · 1016 阅读 · 0 评论 -
Collection和Map的遍历处理工具类
public abstract class MapIterator<K, V> { /** * 对Map中的每个元素的迭代操作 * * @param k * @param v * @throws Exception */ protected abstract void each(K k, V v) thr...原创 2019-05-05 14:17:35 · 248 阅读 · 0 评论 -
mongodb集合添加新字段应用全部数据
db.collectionName.update({}, {$set: {newField: 'defaultVal'}}, {multi: 1})原创 2019-05-05 14:02:32 · 1272 阅读 · 0 评论 -
使用EMQ实现消息推送
为什么写这篇文章?笔者希望能为一些选择了EMQ作为消息推送服务的同学启发,并将使用EMQ过程中笔者遇到的问题暴露出来,当然也希望其他使用EMQ的同学能够给笔者更好的建议。本文的食用人群为对EMQ做过调研或者有相关实践经验的同学,如果您不属于该类,烦请移步:http://www.emqtt.com/。为什么会选择EMQ?1.部署简单;2.支持集群部署;3.官方文档全面;4.上手简单;5:...原创 2019-05-06 10:44:52 · 19087 阅读 · 0 评论 -
分布式任务的实现
问题提出我们的系统中有一处业务场景:会议提醒,对于每一条会议将会在其开始前一小时发送会议通知;对于新创建的会议,使用ScheduledExecutorServicescheduledExecutorService.schedule(() -> { sentMeetingNotify(meetingId); ...原创 2019-05-20 11:32:49 · 685 阅读 · 1 评论 -
disconf上托管的json文件使用
step1.在applicationContext.xml中引入配置<!-- 使用托管方式的disconf配置(无代码侵入, 配置更改会自动reload) --><bean id="configproperties_disconf" class="com.baidu.disconf.client.addons.properties.ReloadableP...原创 2019-05-06 11:06:40 · 562 阅读 · 0 评论 -
Java多线程-线程池ThreadPoolExecutor构造方法和规则
有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。使用线程池主要为了解决一下几个问题:通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。 对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等Exec...原创 2019-06-19 11:12:18 · 358 阅读 · 0 评论 -
正确理解ThreadLocal
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建的...转载 2019-05-06 13:53:22 · 185 阅读 · 0 评论 -
instanceof, isinstance,isAssignableFrom的区别
对象的instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。如果被测对象是null值,则测试结果总是false。形象地:自身实例或子类实例 instanceof 自身类 返回true例:String s=new String("javaisland");System.out.println(s instanceof Str...转载 2019-05-06 11:29:20 · 196 阅读 · 0 评论 -
ApplicationContext与BeanFactory
区别一:ApplicationContext使用饥饿方式加载单例的bean,无论bean后面是否被用到,而BeanFactory的单例bean通过getBean方法调用才会加载;所以导致使用ApplicationContext启动比BeanFactory要慢,更占用内存,但是好处就是在使用bean的过程中不需要在创建bean了提高了运行期的效率,并且在启动过程中便验证了bean的准确性,将问题...原创 2019-07-19 18:00:49 · 271 阅读 · 0 评论 -
Spring事务的隔离级别
本文参考以下文章编写:https://www.cnblogs.com/tiancai/p/9353897.html;https://blog.csdn.net/lyc_liyanchao/article/details/85136247;https://www.jianshu.com/p/aa76625d3715数据库事务的四个特性原子性:原子性是指事务包含的所有操作要么全部成功,要么全部...转载 2019-07-29 11:54:04 · 217 阅读 · 0 评论 -
BeanFactoryPostProcessor与BeanPostProcessor
从名称上不难看出一个是对BeanFactory的后置处理另外一个是对Bean的后置处理。在通过ApplicationContext的BeanFactoryPostProcessor支持两种方式的配置,即通过硬编码方式和xml配置文件配置;BeanPostProcessor一般使用xml配置方式注册BeanFactoryPostProcessor是在ApplicationContext引入的用于...原创 2019-07-18 20:38:05 · 232 阅读 · 0 评论 -
Spring Aop之使用DeclareParents
DeclareParents可以用来给被代理对象添加一些方法,虽然不常用,但是在分析SpringAop源码的时候,对这里一头雾水,所以使用该文章记录下。目前SpringAop也给我们提供了两种实现方式。定义NoMethodAspectBean/** * @author 周宁 * @Date 2019-07-23 16:43 */public class NoMethodAspec...原创 2019-07-23 17:00:04 · 743 阅读 · 0 评论 -
Java动态代理
本文转载自:https://blog.csdn.net/luanlouis/article/details/24589193class文件简介及加载Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 ...转载 2019-05-14 15:09:23 · 148 阅读 · 0 评论 -
Spring管理的Bean的生命周期
在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题。然而在spr...转载 2019-06-24 15:57:13 · 115 阅读 · 0 评论 -
disconf在windows环境下部署调试
disconf介绍disconf,全称 Distributed Configuration Management Platform(分布式配置管理平台),是java下的一个开源项目,其地址为https://github.com/knightliao/disconf。windows部署安装环境要求:nginx+mysql+tomcat+intellij+zk+jdkstep1.下载d...原创 2019-05-06 11:23:42 · 555 阅读 · 0 评论 -
tomcat8 redis session共享
step1.下载jar浏览器打开https://github.com/redisson/redisson/tree/master/redisson-tomcat下载redisson-all-3.8.2.jar和redisson-tomcat-8-3.8.2.jarstep2.将jar拷贝至TOMCAT_BASE/libstep3.在TOMCAT_BASE/conf目录创建red...原创 2019-05-06 10:58:53 · 1545 阅读 · 0 评论 -
Swagger实现接口版本号管理
前言:使用swagger暴露对外接口时原则是每个系统在不同的迭代版本仅仅需要暴露该迭代版本的接口给外部使用,客户端不需要关心不相关的接口先来看张效果图下面是实现代码:定义注解ApiVersion:/** * 接口版本管理注解 * @author 周宁 * @Date 2018-08-30 11:48 */@Retention(RetentionPolicy....原创 2019-05-06 11:15:44 · 9422 阅读 · 10 评论