![个人头像照片](https://ucc.alicdn.com/avatar/img_41388f43b24671e788ee409b4b4999fc.jpg)
java,架构相关技术专家
netty中的ChannelHandler和ChannelPipeline ChannelHandler 家族 https://www.w3cschool.cn/essential_netty_in_action/ Channel 生命周期 channelRegistered: 注册。
Netty buffer缓冲区ByteBuf byte 作为网络传输的基本单位,因此数据在网络中进行传输时需要将数据转换成byte进行传输。netty提供了专门的缓冲区byte生成api ByteBuf。
使用sshfs将远程目录挂载到本地 转自:http://blog.sina.com.cn/s/blog_6561ca8c0102vc2u.html 在Linux下我们通常使用ssh命令来登录远程Linux服务器,如果需要登录的远程服务器不止一个,来回切换的过程将会变得非常麻烦。
Netty 中ChannelOption的含义以及使用的场景 转自:http://www.cnblogs.com/googlemeoften/p/6082785.html 1、ChannelOption.
netty4.0 Server和Client的通信 创建一个maven项目 添加Netty依赖 io.netty netty-all 4.1.16.Final Server端开发 public class HelloServer { p...
Netty重要概念介绍 Bootstrap Netty应用程序通过设置bootstrap(引导)类开始,该类提供了一个用于网络成配置的容器。 一种是用于客户端的Bootstrap 一种是用于服务端的ServerBootstrap Channel Netty中的channel定义了丰富的和socket交互的操作方法:bind, close, config, connect, isActive, isOpen, isWritable, read, write 等等。
Zookeeper单机伪集群 1.配置 zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.
整数集合 整数集合的升级 升级整数集合并添加新元素的步骤: 1、根据新元素的类型, 扩展整数集合底层数组的空间大小, 并为新元素分配空间。 2、将底层数组现有的所有元素都转换成与新元素相同的类型, 并将类型转换后的元素放置到正确的位上, 而且在放置元素的过程中, 需要继续维持底层数组的有序性质不变。
Redis集群规范 什么是 Redis 集群 分布式(distributed) 容错(fault-tolerant) 是普通单机 Redis 所能使用的功能的一个子集(subset)。 集群的容错功能: 主节点和从节点使用完全相同的服务器实现, 它们的功能(functionally)也完全一样, 但从节点通常仅用于替换失效的主节点。
Redis集群 http://doc.redisfans.com/topic/cluster-tutorial.html redis 集群是为了多个节点之间数据的共享和集群高可用的保证。 redis 集群不支持同时处理多个键的redis命令,由于集群需要在多个redis之间迁移数据,在高负载的情况下这些命令会降低redis的性能,并导致不可预知的问题。
Kafka与常见消息队列的对比 RabbitMQ Erlang编写 支持很多的协议:AMQP,XMPP, SMTP, STOMP 非常重量级,更适合于企业级的开发 发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。
开始前的准备 产品理念 在开始之前,我们需要先理清产品的理念,这是指导整个产品走向的关键部分。只有清晰地知道想要打造一个怎样的产品才能很好地落地。这是一个垂直类的搜索引擎,但不仅限于搜索,应该是一个真实有效信息和价格分析的集合。
写在前面 熬馊了的主意 这是一个很多年的想法了,细细地想来应该有4年了。4年可以发生太多太多的事情了,4年从科技的角度来说应该是翻天覆地的变化。4年也让一些曾经挺新鲜的想法变得馊了。在现在看来,这样的一个想法和需求着实有点落伍了。
当两个或多个功能很大一部分实现都一样,只有其中一部分处理逻辑不同的情况下。我们通常都会采用模板设计模式来实现,这样既可以满足功能的需求也可以很好地实现代码的维护。这也正是设计模式的精髓所在。但是,如果有这样一个需求,该如何实现呢?既满足了模板设计模式的条件,也就是说两个或多个功能的总体实现流程是一致的,只是部分处理逻辑上存在差异;但有点特别的是根据不同的功能,返回值类型有所差别。
git 对比两个commit 之间的差异 比较两个版本之间的差异 git diff commit-id-1 commit-id-2 > d:/diff.txt 结果文件diff.txt中: "-"号开头的表示 commit-id-2 相对 commit-id-1 减少了的内容。
CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值。
单例模式 Java内存模型的抽象示意图: 所有单例模式都有一个共性,那就是这个类没有自己的状态。也就是说无论这个类有多少个实例,都是一样的;然后除此者外更重要的是,这个类如果有两个或两个以上的实例的话程序会产生错误。
如: public class SingleTest implements Serializable{private static final long serialVersionUID = -8600246627673134435L;private static class SingleTe...
前言 CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。
查看JVM统计信息 [myname@name ~]$ jstat -gcutil 17421 Warning: Unresolved Symbol: sun.gc.generation.2.space.
mysql deadlock found when trying to get lock 问题排查 1 获 取锁等待情况 可以通过检查 table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺: mysql> show status like ...
本文转自:http://ifeve.com/%E5%A6%82%E4%BD%95%E5%BB%BA%E8%AE%BE%E9%AB%98%E5%8F%AF%E7%94%A8%E7%B3%BB%E7%BB%9F/ 如何建设高可用系统 面试的时候经常会问一个问题,如何建设高可用系统?大家可以一起探讨下。
api重复引用导致的诡异问题排查 最近一个项目上线前开发环境、测试环境都能正常打包并运行。然而到了准生产环境和生产环境则报一些诡异的错误信息: [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.
线程安全日期格式化操作的几种方式 由于 DateFormat 是非线程安全的,因此在多线程并发情况下日期格式化时需要特别注意。下面记录几种格式化的方式: 线程不安全的处理方式 private static final DateFormat DATE_FORMAT = new SimpleDateFo...
ZooKeeper服务命令 在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作 启动ZK服务: sh bin/zkServer.sh start 查看ZK服务状态: sh bin/zkServer.
命令行调用dubbo远程服务 telnet远程连接到dubbo telnet 127.0.0.1 20880 查看提供服务的接口 dubbo>ls com.test.service.TestInfoQueryService ls 接口名对外提供的方法 dubbo>ls com.
java问题排查命令 jps:查看java进程jmap:导出堆详细信息(与jhat一起使用)jhat:分析Java堆的命令(与jmap一起使用)jstack:可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。
linux 内存优化: 1>. /proc是一个虚拟文件系统,我们可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。
java class加载机制及对象生成机制 当使用到某个类,但该类还未初始化,未加载到内存中时会经历类加载、链接、初始化三个步骤完成类的初始化。需要注意的是类的初始化和链接的顺序有可能是互换的。 ClassLoader加载机制 ClassLoader用于动态加载class文件到内存中。
Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象;数据总条数正确,但有些记录多了,有些记录却又少了甚至没了。针对这个问题找了好久,最后发现是由于多个排序字段不唯一,同样的排序顺序每次运行返回的结果顺序不一致,导致这样的现象出现。
在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉。一般情况下是通过修改程序,添加打印日志;然后重新发布程序来完成。然而,这不仅麻烦,而且带来很多不可控的因素。有没有一种方式,在不修改原有运行程序的情况下获取运行时的数据信息呢?如方法参数、返回值、全局变量、堆栈信息等。
垃圾收集器详解及参数配置 垃圾搜集器简介 垃圾搜集器大致分为以下三类 串行搜集器(serial collector):它只有一条GC线程,且就像前面说的,它在运行的时候需要暂停用户程序(stop the world)。
概述 内存划分 虚拟机规范中将内存分为六大部分,分别为PC寄存器、JAVA虚拟机栈、JAVA堆、方法区、运行时常量及本地方法栈。 1.PC寄存器:线程独占; 2.JAVA虚拟机栈:线程独有;JAVA虚拟机栈是在创建线程的同时创建的,用于存储栈帧,JAVA虚拟机栈也是线程独有的。
Java在JDK7之后加入了并行计算的框架Fork/Join,可以解决我们系统中大数据计算的性能问题。Fork/Join采用的是分治法,Fork是将一个大任务拆分成若干个子任务,子任务分别去计算,而Join是获取到子任务的计算结果,然后合并,这个是递归的过程。
常用线程池 可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程 ExecutorService threadPool = Executors.newFixedThreadPool(3);// 创建可以容纳3个线程的线程池 根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们 ExecutorService threadPool = Executors.
ORA-01502: index 'INDEX_NAME' or partition of such index is in unusable state 原因: 这个错误一般是因为索引状态为UNUSABLE引起的。
所有单例模式都有一个共性,那就是这个类没有自己的状态。也就是说无论这个类有多少个实例,都是一样的;然后除此者外更重要的是,这个类如果有两个或两个以上的实例的话程序会产生错误。 基于上述原因,非线程安全的实现方式,在此不再讨论。
Curator Zookeeper分布式锁 pom.xml中添加如下配置 org.apache.curator curator-recipes 2.10.0 zookeeper配置 下载zookeeper并解压至D:\java\zookeeper-3.
LruCache算法原理及实现 LruCache算法原理 LRU为Least Recently Used的缩写,意思也就是近期最少使用算法。LruCache将LinkedHashMap的顺序设置为LRU顺序来实现LRU缓存,每次调用get并获取到值(也就是从内存缓存中命中),则将该对象移到链表的尾端。
lombok 简化java代码注解 安装lombok插件 以intellij ide为例 File-->Setting-->Plugins-->搜索“lombok plugin”,安装后重启ide lombok 注解 lombok 提供的注解不多,可以参考官方视频的讲解和官方文档。
Oracle客户端工具出现“Cannot access NLS data files or invalid environment specified”错误的解决办法 方法一:参考,http://blog.
解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。 某个表在进行数据插入和更新时突然出现Table ‘xxx’ is marked as crashed and should be repaired这个异常,随后整个表无法查询,表数据全部丢失。
Redis 3.0 Cluster集群配置 安装环境依赖 安装gcc:yum install gcc 安装zlib:yum install zib 安装ruby:yum install ruby 安装rubygems:yum install rubygems 安装ruby的redis驱动:gem install redis 安装redis 参考:http://www.
分布式锁的三种实现方式 一、zookeeper 1、实现原理: 基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来自于IBM网站)。大致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。
maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。
nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。
MySQL 使用SELECT ... FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的Tansaction isolation level 为REPEATABLE READ,在SELECT 的读取锁定主要分为两种方式: SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE 这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都必须等待其它事务数据被提交(Commit)后才会执行。
redis主从复制 Redis Replication的特点和优势。 1). 同一个Master可以同步多个Slaves。 2). Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。
mysql 优化实例之索引创建 优化前: pt-query-degist分析结果: # Query 23: 0.00 QPS, 0.00x concurrency, ID 0x78761E301CC7EE47 at byte 394687 # This item is included in the report because it matches --limit.
mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B5 at byte 628331 # This item is included in the report because it matches --limit.