Hello, I'm arthinking.
Java技术交流群:280755654,入门群:428693174
2016/10/15 23:00
1、使用kryo序列化 1.1、先升级消费者 dubbo服务接口新增返回值和方法,消费者先升级,调用服务报错: Caused by: com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation [methodName=dataGrid, parameterTypes=[class com.xxx.ProductInfoDTO, null], arguments=null, attachments={dubbo=2.8.4, input=463, path=com.xxx.product.ProductService, version=0.0.0}] at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:190) ~[dubbo-2.8.4.jar:2.8.4] at com.alibaba.dubbo.remoting.exchan...
阅读(1,355 views+) 标签: ,
2016/6/16 19:50
一般的,我们在写一个系统的时候,都会分为持久层,服务层,和控制层,各层之间职责分明,对应的Entity,DTO,VO也是很明确知道用在哪里的,但是有时候为了方便,特别是用MyBatis的时候,直接从持久层返回一个vo,然后这个vo又作为方法的参数在系统之间来回调用,那么会引发什么样的问题呢? 假设我们有如下代码: /** * 确认订单 */ public boolean confirmOrder(String orderId){ OrderVo orderVo = orderDao.findByOrderId(orderId); // 假设计算订单号需要用到一个特殊的利率 BigDecimal annualRate = new BigDecimal(0.12); // 根据订单号和利率计算实际的价格 String...
阅读(1,936 views+) 标签: , ,
2016/6/14 21:45
什么是分布式事务? 互联网应用中,随着系统用户数量的增多,访问压力也不断增大,数据功能相互独立的模块拆分开来,对其进行集群部署。 比如完成一笔交易,分别需要在交易模块,订单模块,用户数据模块中进行处理,分别做一些数据的更新或者入库,当三个模块都处理完毕之后,才算完成了这笔交易的事务。在这种分布式部署的系统中,需要处理的数据分布在不同的物理节点上,怎么去保证能处理完一笔交易之后的数据完整性呢,这就是分布式事务考虑的事情。 分布式事务如何处理 如何用消息系统避免分布式事务?这里提到的方案也是可行的,但是更常见的场景是,我们对接了第三方的支付,需要调用第三...
阅读(1,290 views+) 标签: , , ,
2016/5/3 0:07
HighPay Zoom博客托管于Github,基于Hexo制作成静态博客; Hexo Hexo是一款基于Node.js的静态博客框架,简单的说,就是可以通过Hexo,把markdown文件直接转换成一个静态的网站输出到一个文件夹,然这个文件夹可以直接上传到服务器或者github,就可以访问啦~ 接下来是使用Hexo的使用方法: Hexo基于Node.js,所以需要先安装NodeJS的环境,怎么安装就不说啦,搜索一下可以找到相应的教程;主要通过NodeJS生成静态站点; 同时你需要安装Git,用于把代码提交到github上面去; 安装Hexo: sudo npm install-g hexo 初始化项目: hexo init 生成静态页面: hexo generate 本地启动访问静态网站: hexo ser...
阅读(1,036 views+) 标签: ,
2016/5/1 0:33
Author: ChinSyun Pang Weibo: http://weibo.com/arthinkingplus 项目地址:app-mis 安装webpack: $ npm install webpack -g 关于npm install 初始化项目: $ npm init 执行完这步会在目录下生成package.json文件 为项目安装webpack: $ npm install webpack --save-dev 或者安装特定的版本: $ npm install webpack@1.2.x --save-dev webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX)、coffee、样式(含less/sass)、图片等都作为模块来使用和处理。 --save-dev 与 --save的区别 --save-dev: Package will appear in your devDependencies. seeGr...
阅读(1,077 views+) 标签: ,
2016/4/6 0:23
Git常用命令 # 将远程分支信息获取到本地 git fetch # 将远程分支映射到本地命名为`local-branchname`的一分支 git checkout -b local-branchname origin/remote_branchname 分支管理 设置推送分支 git remote add origin https://github.com/... 查看分支 git branch git branch -a   git branch -r 创建分支 # 创建test分支 git branch test # 把本地test分支推到远程 git push origin test 切换分支 # 切换到test分支 git checkout test 删除分支 # 删除本地分支 test git branch -d test # 删除远程分支origin/test git branch -r -d origin/test
git push origin :test Reb...
阅读(721 views+) 标签:
2015/10/1 19:17
Development adventure - times var dndTreeParam = { 'treeDataPath':'http://www.itzhai.com/itzhai-times/mindmap-tech/learn.json' } Development adventure. 开发技术思维导图:算法,数据结构,Java基础,JVM,数据库,网络协议,分布式架构,大数据分析,消息推送,大数据索引搜索技术,缓存技术。 「Nice」 | Development adventure Development adventure - times var musicHtml = ''+ ''; $('#music-player-div').html(musicHtml); $('.img-rotate').click(function(){ ...
阅读(772 views+) 标签: , ,
2015/8/19 23:39
改变世界的逆行者 “道生一”的商业智慧 从1到n只是复制, 创造不了新价值, 甚至可能沦为遍地抄袭的山寨模式。 企業的三個境界: 复制生存产品; 与时俱进不断进化; 企业创造了社会基因或者思想基因; 未来的挑战: 越來越多的扶持年輕人的創業計劃 中國的很多創業其實仍然是從1到n的複製過程。 照搬他人的模式,要比创造新东西容易。 成功人士总是能在意想不到的地方发现价值,他们遵循的是基本原则,而非秘籍。 水平进步(全球化) 垂直进步(科技创新) 在资源稀缺的今天,丢掉科技创新的全球化不会长久 像1999年那样狂欢 占主导商业思想的经验: 1、循序渐进 2、保守精简和灵...
阅读(956 views+) 标签:
2015/3/13 15:34
1、配置 1.1、安装 sudo apt-get install memcached 1.2、启动 Memcached的基本设置: -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d uninstall 卸载memcached服务 -u 以的身份运行 (仅在以root运行的时候有效) -m 最大内存使用,单位MB。默认64MB -M 内存耗尽时返回错误,而不是删除项 -c 最大同时连接数,默认是1024 -f 块大小增长因子,默认是1.25 -n 最小分配空间,key+value+flags默认是48 -h 显示帮助 mixi的设置,单台: # ...
阅读(3,451 views+) 标签: ,
2015/3/13 15:10
有这样一个场景:使用getMulti一次性读取一个系列的所有手机100个key,请求了100万次,系统最初只有一个MC服务器,随着访问量的增加,负载加大了,于是增加了几个MC服务器,但结果负载反而更加大了。 原因是开始那100个key在一台服务器上获取,现在分不到了几MC服务器,需要访问的服务器增多了,而关键性的因素是我们用到的MC客户端memcached-client,其中的AscIIClient如下: public Map<String, Object> getMulti(String[] keys, Integer[] hashCodes, boolean asString) { if ((keys == null) || (keys.length == 0)) { if (log.isErrorEnabled()) log.error("...
阅读(2,832 views+) 标签: ,
2015/3/9 22:34
获取调用者信息的方法 一般的,我们可以通过堆栈信息获取调用当前方法的类名和方法名 // 通过堆栈信息获取调用当前方法的类名和方法名 String className = ""; String methodName = ""; Class clazz = null; StackTraceElement[] elements = new Throwable().getStackTrace(); for (int i = 0; i < elements.length; i++){ if (this.getClass().getName().equals(elements[i].getClassName())){ // 获取堆栈的下一个元素,就是调用者元素 // 如果想要获取当前方法所在类的信息,直接读取elements[i]就可以了 className = elements[i + 1].getClassName(); ...
阅读(4,018 views+) 标签: ,
2015/3/9 10:36
当我们使用富文本编辑器的时候,为了确保存储的内容没有XSS注入问题,比较安全的做法是对输入的内容进行过滤。 常见的XSS注入方式可以参考这里: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet Jsoup中提供给了白名单过滤的功能,但是并没有对属性进行校验,而属性中可能包含JS脚本或者是CSS注入,所以除了设置白名单的标签和属性之外,也需要对属性进行过滤。以下是一个过滤程序,允许你对属性进行自定义的过滤设置,并且允许动态的刷新白名单列表,方便在运行时增减支持从标签。 https://github.com/arthinking/java-code/tree/master/src/main/java/me/arthinki...
阅读(2,684 views+) 标签:
2015/3/2 9:55
1、概述 2、线程安全 2.1、Java语言中的线程安全 按照线程安全的“安全程度”由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程建荣和线程对立。 不可变 不可变的对象一定是线程安全的。 保证对象行为不影响自己状态的途径有很多种,其中最简单的就是把对象中带有状态的变量都声明为final。 Java API中符合不可变要求的类型:String,java.lang.Number的部分子类(如Long和Double的数值包装类,BigInteger和BigDecimal等大数据类型但`AtomicInteger`和`AtomicLong`则并非不可变的)。 绝对线程安全 Java API中标注自己是线...
阅读(3,335 views+) 标签: ,
2015/3/1 23:57
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》笔记 1、概述 2、硬件的效率与一致性 基于告诉缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也为计算机系统带来了更高的复杂度,因为它引入了一个新的问题:缓存一致性。 处理器可能会对输入代码进行乱序执行优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的。 3、Java内存模型 线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行。 3.1、主内存与工作内存 3.2、内存间交互操作 3.3、对于volatile型...
阅读(3,100 views+) 标签: ,
2015/3/1 22:46
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》笔记 1、概述 即时编译器并不是虚拟机必需的部分。 本章提及的编译器、即时编译器都是指 HotSpot 虚拟机内的即时编译器,虚拟机也是特指 HotSpot 虚拟机。 2、HotSpot虚拟机内的即时编译器 2.1、解释器与编译器 HotSpot 虚拟机中内置了两个即时编译器,分别称为 Client Compiler 和 Server   Compiler。 HotSpot 虚拟机会根据自身版本与宿主机器的硬件性能自动选择运行模式,用户也可以使用"- client" 或"- server" 参数去强制指定虚拟机运行在 Client 模式或 Server 模式。 参数"- Xint" 强制虚拟机运行于“解释模式”( Interp...
阅读(2,477 views+) 标签: ,
2015/3/1 22:41
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》笔记 1、概述 Java语言的“编译期”是一段不确定的操作过程,可能是: 前端编译器(编译器的前端)把Java文件转换为class文件;Sun 的 Javac、 Eclipse   JDT 中的增量式编译器( ECJ)[ 1]。 后端编译器(JIT编译期 Just in time compiler)把字节码变成机器码;JIT 编译器: HotSpot   VM 的 C1、 C2 编译器。 静态编译器(AOT编译器 ahead of time compiler)直接把Java编译成本地机器代码; AOT 编译器: GNU   Compiler   for   the   Java( GCJ)[ 2]、 Excelsior JET[ 3]。 本章讨论第一类编译过程。 Javac 这类...
阅读(2,251 views+) 标签: ,
2015/3/1 22:35
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》笔记 1、概述 能通过程序进行操作的,主要是字节码生成与类加载器这两部分的功能。 2、案例分析 2.1、Tomcat:正统的类加载器架构 主流的 Java   Web 服务器,如 Tomcat、 Jetty、 WebLogic、 WebSphere 或其他笔者没有列举的服务器,都实现了自己定义的类加载器(一般都不止一个)。因为一个功能健全的 Web 服务器,要解决如下几个问题: 部署在同一个服务器上的两个 Web 应用程序所使用的 Java 类库可以实现相互隔离。 部署在同一个服务器上的两个 Web 应用程序所使用的 Java 类库可以互相共享。 服务器需要尽可能地...
阅读(1,605 views+) 标签: ,
2015/3/1 22:27
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》笔记 1、概述 物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。 2、运行时栈帧结构 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。 对于执行引擎来说,在活...
阅读(2,053 views+) 标签: ,
2014/12/9 21:34
##Maven项目目录结构如下: project - src - main - java - resources - webapp - WEB-INF - classes - lib - target - project-snapshot - WEB-INF - classes - lib - classes 其中 project-snapshot就是maven编译生成的项目目录了,我们一般使用这个目录对项目进行部署,这样问题来了: 每次改动JSP文件或者Java文件,都得重新用maven编译一下,以便生成代码到该目录,有没有方便点的做法呢...
阅读(5,216 views+) 标签:
2014/12/8 8:45
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》笔记 1、概述 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。 Java 里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。 2、类加载的时机 加载( Loading)、 验证( Verification)、 准备( Preparation)、 解析( Resolution)、 初始化( Initialization)、 使用( Using) 和卸载( Unloading) 7 个阶段。 其中验证、准备、解析 3 个部分统称为连接( Linking)。 加载、验证、...
阅读(1,673 views+) 标签: ,
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.