0%

高级开发进阶

Java基础

  • Java泛型
  • 代理
  • 反射
  • JVM类加载机制
    • 类加载过程:加载,链接(验证,准备,解析),初始化。
    • 加载方式:双亲委派模型
    • JVM 加载 Class 文件的原理机制,显示加载(New),隐式加载(反射)
      Read more »

Java程序员学习Go指南

从事java编码也有三年多了,写的Java代码也很多。Go语言,我是无意间接触到的。在去年12月份左右的时候比特币大涨到1w刀,就想着研究下比特币,而同时有听说Go语言在区块链中非常火爆。就抱着学着看看的心情了解了Go,不知不觉喜欢上Go语言的简洁和优雅了。

Read more »

2018-02-03 上周四版本上线,我的服务有几次重复发版,负责人让我总结下原因,感觉一阵蛋疼。

基金基础服务发版过于频繁的总结

原因分析

  1. 思考问题不全面
    • 在编写代码过程中,开发人员想到的场景可能不全。往往都会出现某些条件没有考虑的清形。例如:在飞鱼3.7.1基金终止上市该功能开发中,我只考虑到基金终止和正常上市的情况。而在上线之后,测试人员发现将“转型”过的基金(该基金由终止状态转换为正常上市交易)也设置为终止。导致上线之后需要修复该功能。
    • 测试环境只包含线上很少的基金数据,导致自测和测试都无法发现场景分支。
    • 业务能力不够。对基金业务仍不是非常了解,往往容易出现业务场景思考不足,导致代码容易出bug。
      Read more »

2017年个人总结

2017年是我的本命年,可以说过的非常充实。不是浑浑噩噩的一年,有着很多如数家珍的回忆;也有一些时光飞快的感慨,不及回首。

Read more »

solr实践

Solr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言。实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

Read more »

  • 多线程死锁的产生:
  • 当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时,那么它们将永远被阻塞。
  • 如果线程A持有锁L并且想获得锁M,线程B持有锁M并且想获得锁L,那么这两个线程将永远等待下去,这种情况就是最简单的死锁形式。
  • 检测死锁产生:
  • 1、先找到可疑进程,jps获得当前Java虚拟机进程的pid
  • 2、使用jstack打印堆栈,jstack打印内容的会报告发现了一个死锁,同时也能够通过分析waiting,locked得出结论
    Read more »

Spring Framework

Spring core

IoC、AOP是spring的核心

IoC容器管理POJO对象,以及它们相互之间的耦合关系,是数据资源可用简单的Java语言来描述和抽象
AOP以动态非侵入式的方式来增强服务的功能
(Spring架构图)

Read more »

分布式

中心化
中心化副本控制协议的基本思路是由一个中心节点协调副本数据的更新、维护副本之间的一致性。
去中心化副本控制协议没有中心节点,协议中所有的节点都是完全对等的,节点之间通过平等协商达到一致。

Zookeeper:
用Paxos协议选择Leader,用Lease协议控制数据是否有效。用Quorum协议把Leader的数据同步到follow。

MySql:
MySQL的主从库设计也是基于日志。从库只需通过回放主库的日志,就可以实现与主库的同步。由于从库同步的速度与主库更新的速度没有强约束,这种方式只能实现最终一致性。
读写分离,主从同步

Read more »

  

打算用Nodejs和Express做一个简单的项目,从零开始一步一步学习nodejs。

nodejs, mongodb分页实现

  1. 使用mongoose skip方法实现:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exports.pagingBySkip = function (model, pageIndex, pageSize, callback) {
    var modelSchema = mongoose.model(model);
    var query = modelSchema.find();
    if (Number(pageIndex) >= 1 && Number(pageSize) >= 1) {
    query.skip((pageIndex - 1) * Number(pageSize));
    query.limit(Number(pageSize));
    }
    query.exec(function (err, docs) {
    callback(err, docs);
    });
    };
  2. 根据ObjectId获取最后一个,然后获取这个id的下一页,需要实现两个方法:

    Read more »

技术进阶之路

  • java
  • mysql()
  • redis
  • mybatis
  • RPC(hessian,grpc,thrift,protobuf)
  • Spring FrameWork(Spring MVC,Spring Boot)
  • Rabbitmq
  • Mongodb(mongoose)
  • Nodejs(express,promise,callback)
    Read more »