- 浏览: 49449 次
- 性别:
- 来自: 厦门
最新评论
-
xiangshouxiyang:
应该是主线程的线程变量可以传递给runable方法中。。你这个 ...
配合线程池定义可继承的线程变量InheritableThreadLocal -
pch272215690:
微博的motan目的就是精简,事实上确实简单了很多,毕竟是站在 ...
动态代理在RPC框架中的性能对比 -
Pengjx2014:
public class UserIdUtil { pr ...
配合线程池定义可继承的线程变量InheritableThreadLocal -
xiangshouxiyang:
zhanghs886 写道如果集成的springboot里面没 ...
springboot使用undertow作为web容器而引发的中文乱码问题 -
zhanghs886:
如果集成的springboot里面没有web.xml文件的配置 ...
springboot使用undertow作为web容器而引发的中文乱码问题
文章列表
公司某流程系统项目组出现内存溢出问题,场景是使用dubbo进行文件传输。首先,dubbo协议不适合进行文件传输,这个做法本身有问题,该项目组可能出于开发效率,历史原因等情况,使用了这样的技术方案。
发生内存溢出的场景是 测试人员连续的上传一个144M大小的文件,在上传四五次后,出现内存溢出。web接收文件,通过dubbo传输给service端进行文件处理。web和service端设置堆内存都是1g。在没有并发的情况下,连续上传144M的文件不应该出现内存溢出。初步怀疑是发生的内存泄露导致文件占用的内存没有被回收。
把项目组的代码down下来本 ...
公司内部的P2P平台由于监管,进行了一系列不合规项的整改。其中有一条就是要对数据库中一些比较敏感的信息进行加密,比如:手机,邮箱,身份证,银行卡之类的。解决方案是,在整个过程,查询的时候在java服务端进行解密,插入和更新的时候在java服务端进行加密。数据库端则存放加密后的信息。本来只需要考虑java服务端加解密后能保持一致即可,但是为了方便某些在数据库端进行运维的人能使用sql对已加密的信息进行处理。这里要求了java服务端加密的内容能够在数据库端进行解密。所以两边需要使用一样的算法。
首先,第一步就是在postgresql数据库端安装pgcrypto模块
...
网络学习的学习笔记,记录一些学习要点。
1.网络的五层模型:从下到上 :物理层,链路层,网络层,传输层,应用层。
2.物理层:物理层面把电脑连接起来:可以是光纤电缆无线信号之类的,传输0和1。
3.链路层:主要是以太网协议,定义了帧,即一组电信号。协议头记录通讯双方MAC地址(硬件网卡的唯一标识,前六位是厂商id,后六位是厂商内部的流水id)以及其他协议信息。MAC地址一般通过ARP协议获得。
4.网络层:IP协议,把无数个子网络合并成整个互联网。IP地址主要通过DHCP协议向网络提供商获得。定义了主机之间的通讯。ip地址 =网络号+主机号,通过子网掩码来划分网络 ...
dubbo协议报文格式
- 博客分类:
- 学习笔记
dubbo默认采用netty进行TCP通讯。TCP是传输层协议,在应用层,往往会拓展自定义的协议,一是可以处理TCP本身的粘包拆包问题,二是约定通讯过程的其他细节。
所以dubbo默认采用自定义的dubbo协议。文档描述:
Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
缺省协议,使用基于netty3.2.5+hessian3.2.1交互。 连接个数:单连接 连接方式:长连接 传输协议:TCP 传输方式:NIO异步传输 序列化:Hessian二 ...
说到可继承的线程变量,大家可能会想到jdk里的实现java.lang.InheritableThreadLocal。它拥有和线程变量ThreadLocal一样的功能,并且,在当前线程上创建一个新的线程实例Thread时,会把这些线程变量从当前线程传递给新的线程实例。(此时线程变量不再线程安全,需要考虑线程安全问题)
InheritableThreadLocal:
public class InheritableThreadLocal<T> extends ThreadLocal<T> {
/**
* Computes t ...
在用mybatis作为持久层框架时,有时候会有需要进行批量增删改的操作。
百度了一下,大致有两种方法,一种是拼接SQL的方式。类似这样:
<insert id="insertList" parameterType="java.util.List" >
insert into t_project ( projectid,productid ) values
<foreach collection="list" item="item" index="in ...
先说一下出现这种情况的场景。该场景在使用jetty,tomcat作为容器时是可以正常运行的。首先是表单提交。
<form id="submitForm" action="${base}/test/aa.html" method="post">
<input type="hidden" name="userSource" value="admin"/>
<input type="h ...
这几天打算自己写一个RPC框架,参考了阿里的dubbo,微博的motan等框架的设计。在选择代理技术时,dubbo有两种方案,一个是jdk的动态代理,一个JAVAASSIST的字节码生成技术,在dubbo作者梁飞的博客《动态代理方案性能对比》http://javatar.iteye.com/blog/814426中,因为作者在编写服务框架需要用动态代理生成客户端接口的stub,进行了几个动态代理方案性能的测试,测试表明了JAVAASSIST的字节码生成技术的性能应该是最好的。而微博的motan框架里,只使用了jdk代理技术。我脑海里就有疑问,为什么motan框架不用JAVAAS ...
先看一段demo:
package com.onlyou;
/**
* Created by cd_huang on 2017/5/25.
*/
public class Test {
public static void main(String args[]) {
intTest();
}
public static String intTest(){
int aa =100;
Integer bb =100;
System.out.println(aa==bb);
Integer cc =100;
System ...
场景:他人的服务端暴露的webservice接口,我这边客户端集成了dubbo,所以想用dubbo直接去调用webservice。因为dubbo的官方文档上说dubbo有提供这些功能。
dubbo版本2.3.0以上版本支持。需要在pom里添加依赖,它是基于CX ...
在java里,我们是怎么写for循环的代码呢。一般都是用这两种写法:
第一种:最传统的for循环写法,for(代码段a;代码段b;代码段c),其中代码段a是初次进入for循环时执行的代码,代码段b是一个boolean的表达式,true则继续执 ...
在写测试用例的时候,突然很疑惑,为什么我只是加了一个@Test的注解,就能运行一个程序。我们知道,main方法才是一个java程序的起点。那junit4的测试用例是怎么跑起来的呢。
为了解决这个疑惑,我就自己写测试用例debug调试了下。
测试用例如下:
package com.onlyou.olyfinance.remote.base;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;
import org.springframework. ...
为了验证编译器对于String相关代码的字节码优化,我简单的做了个测试:jdk版本:1.7.0_51
java 用例代码:
package com.rsp.shiro;
/**
* Created by cd_huang on 2017/4/1.
*/
public class StringTest {
public static String StaticString(){
return "BBB";
}
public static String getString1(){
return "AAA"+&q ...
前两天在开涛的公众号里,开涛聊到一次请求生成唯一的traceId在各个业务系统中传递,然后通过日志收集各个业务服务中的日志,形成一次请求的完整日志。开涛简单的提到了是使用自己实现的线程池增强技术来传递traceId。
我这边系统也有类似的需求。所以我就尝试性地实现了下线程池增强。本来想着既然是增强,第一反应是用代理技术去实现,后来发现不需要代理就可以简单地实现。
我大致的场景是把线程中附带的用户信息从当前线程传递到要开启的新的线程中去,并告诉MDC进行日志打印。
下面简单介绍下代码的实现:
首先是自定义的线 ...
在使用spring做事务管理时,很多人都会遇到这样一段异常:
org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:718) ...