随笔分类 - Java
摘要:规则引擎实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程,使用规则引擎可以把复杂、冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植。 规则引擎的选型应用 相对于业务系统,规则引擎
阅读全文
摘要:Java作为一门名副其实的工业级语言,语法友好,学习简单,大规模的应用给代码质量的管控带来了困难,特别是团队开发中,开发过程中的规范会直接影响最终项目的稳定性。 善医者“未有形而除之”,提高工程健壮性最好的方式是在代码出现问题之前就排除掉,不给Bug出现的机会。一份好的开发规范就可以起到这样的作用,
阅读全文
摘要:一、Token Auth机制 基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。 相比原始的Cookie+Session方式,更适合分布式系统的用户认证,绕开了传统的分布式Session一致性等问题。 基于Token的身份验证的主流程如下: 用户通过用户名和密码发送请
阅读全文
摘要:1.微服务架构 微服务这个词越来越多的被提到,2014、15年的一波创业大潮, 很多创业公司需要短平快的产品开发,推动了敏捷开发、持续交付以及基于Docker的应用部署的发展,同时微服务结构也开始慢慢流行起来。 2.应用架构演进 (1)垂直应用架构 传统的LAMP架构和Spring+Struts+i
阅读全文
摘要:Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优化。 1.使用Arrays对数组进行排序 Java API对Arrays类的说明是:此类包含用来操作
阅读全文
摘要:最近在学习Dubbo,RMI是很重要的底层机制,RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机(即JVM虚拟机)上的对象可以调用另外一台计算机上的对象来获取远程数据。 RMI的实现对建立
阅读全文
摘要:回顾这两个关键字前,先考虑一个问题: Static变量存储在JVM中的位置,或者说static变量是如何被加载的? JVM会把类的静态方法和静态变量在类加载的过程中读入方法区(Method Area),相当于常驻内存,如果一个方法或者变量声明为static,可以节约内存,不必要为每个对象实例化的时候
阅读全文
摘要:关于Java传参时是引用传递还是值传递,是一个讨论比较多的话题,有说Java中只有值传递,也有些地方说引用传递和值传递都存在,本篇记录思考过程,不保证正确性, 感兴趣的同学一起讨论。 1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基
阅读全文
摘要:看一下API中关于Object的介绍: 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 那么Object中到底有哪些方法,各自有什么应用呢?这个问题也经常出现在面试中,如果平时没有关注,可能很难回答好,这里简单整理一下。 首先看一
阅读全文
摘要:1.赋值运算符 赋值使用操作符“=”。它的意思是“取右边的值(即右值),把它复制给左边(即左值)”。右值可以是任何 常数、变量或者表达式 (只要它能 生成 一个值就行)。但左值必须是一个明确的,已命名的变量。也就是说,必须有一个物理空间可以存储等号右边的值。分类 基本数据类型 与 类数据类型 的不同
阅读全文
摘要:1.如何在运行时确定对象类型 运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式, 一种是在编译时和运行时已经知道了所有的类型,另外一种是反射机制。 类型信息在运行时是如何表示的,是由Class对象完成的,它包含了与类有关的信息。类是程序的重要组成部
阅读全文
摘要:模块拆分是Maven经常使用的功能,简单梳理一下如何使用Maven进行多模块拆分, 只做归纳总结,网上资料很多,不再一步一步实际创建和部署。 建立Maven多模块项目 一个简单的Java Web项目,Maven模块结构是这样的: 上述示意图中,有一个父项目(parent)聚合很多子项目(mytest
阅读全文
摘要:关于动态代理和静态代理 当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象。 按照代理对象的创建时期不同,可以分为两种: 静态代理:事先写好代理对象类,在程序发布前就已经存在了; 动态代理:应用程序发布后,通过动态创建代理对象。
阅读全文
摘要:"this"作为一个特殊的关键字,它的规则如下: 1.可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。 2.可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,它有静态类型
阅读全文
摘要:现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是在开发中注意这些,更多的是保持一种性能优先的意识,养成良好的编码习惯。 一 条件控制语句中的优化 1.在循环中应该避免使用复杂的表达式。 在循环中,循环条件会被反复计算,应该避免
阅读全文
摘要:NIO中的内存映射 (1)什么是内存映射文件内存映射文件,是由一个文件到一块内存的映射,可以理解为将一个文件映射到进程地址,然后可以通过操作内存来访问文件数据。说白了就是使用虚拟内存将磁盘的文件数据加载到虚拟内存的内存页,然后就可以直接操作内存页数据。我们读写一个文件使用read()和write()
阅读全文