代码千万行, 注释第一行, 编码不规范, 同事两行泪.
开发中日志这个问题,每个公司都强调,也制定了一大堆规范,但根据实际情况看,效果不是很明显,主要是这个东西不好测试和考核,没有日志功能一样跑啊。
但是没有日志, 一旦系统出现问题, 将导致排查问题时困难重重. 因此好的日志输出有利于快速定位问题
但是我们在什么时候打印日志? 需要打印什么信息? 用什么日志级别? 这些问题都将应用我们排查问题时的速度
因此这里制定一个日志规范, 将日志相关的常识性问题做一个总结.
SSH(Secure Shell)是什么?是一项创建在应用层和传输层基础上的安全协议, 为计算机上的 Shell(壳层)提供安全的传输和使用环境. 也是专为远程登录会话和其他网络服务提供安全性的协议. 它能够有效防止远程管理过程中的信息泄露问题. 通过 SSH 可以对所有传输的数据进行加密, 也能够防止 DNS 欺骗和 IP 欺骗.
通过扩展 dubbo Filter, 拦截 RPC 请求的方式, 将在请求 API 时通过 SnowFlake 算法生成的全局唯一 traceId 存入到 RpcContext 中, 传递给下一个服务.
其实前面写了一些东西, 但还是删了, 直接撸代码. 这篇是从 git clone 项目开始, 从搭建环境到部属的过程, 希望对想学习的朋友有帮助.
这是第一篇, 会有系列解析文档放出.
应用中需要实现一个功能: 需要将数据上传到远程存储服务, 同时在返回处理成功情况下做其他操作.
这个功能不复杂, 分为两个步骤: 第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果;第二步拿到第一步结果或者捕捉异常, 如果出现错误或异常实现重试上传逻辑, 否则继续逻辑操作.
Zookeeper 是 Google 的 Chubby一个开源的实现, 是 Hadoop 的分布式协调服务
自2010年10月升级成Apache Software Foundation(ASF)顶级项目
当程序使用某个类时, 如果该类还没被初始化, 加载到内存中, 则系统会通过加载、连接、初始化三个过程来对该类进行初始化. 该过程就被称为类的初始化
在构造函数内对一个final域的写入, 与随后把这个被构造对象的引用赋值给一个引用变量, 这两个操作之间不能重排序.
初次读一个包含final域的对象的引用, 与随后初次读这个final域, 这两个操作之间不能重排序.
在构造函数内对一个final域的写入, 与随后把这个被构造对象的引用赋值给一个引用变量, 这两个操作之间不能重排序.
初次读一个包含final域的对象的引用, 与随后初次读这个final域, 这两个操作之间不能重排序.
锁是java并发编程中最重要的同步机制. 锁除了让临界区互斥执行外, 还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代码:
当我们声明共享变量为volatile后, 对这个变量的读/写将会很特别. 理解volatile特性的一个好方法是: 把对volatile变量的单个读/写, 看成是使用同一个锁对这些单个读/写操作做了同步
如果程序是正确同步的, 程序的执行将具有顺序一致性(sequentially consistent)–即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同(马上我们将会看到, 这对于程序员来说是一个极强的保证). 这里的同步是指广义上的同步, 包括对常用同步原语(lock, volatile和final)的正确使用.
Java编译器、运行时会对指令进行重排序. 这种重排序在单线程和多线程情况下分别有什么影响呢?
介绍 Java 内存模型 3 大核心
写Java程序时会经常从classpath下读取文件, 是时候该整理一下了, 并在不断深入的过程中, 陆续补充上.
使用线程池主要为了解决一下几个问题:
生产者消费者问题是研究多线程程序时绕不开的经典问题之一, 它描述是有一块缓冲区作为仓库, 生产者可以将产品放入仓库, 消费者则可以从仓库中取走产品
Try-with-resources 是 java7 中一个新的异常处理机制, 它能够很容易地关闭在 try-catch 语句块中使用的资源
Web服务器一旦发出响应,一个请求响应过程就结束了. 当再次发出请求时,Web服务器不记得曾就做过的请求,也不记得给用户发出过响应.,这就是http的无状态模式
泛型, 即 “参数化类型”. 一提到参数, 最熟悉的就是定义方法时有形参, 然后调用此方法时传递实参. 那么参数化类型怎么理解呢?顾名思义, 就是将类型由原来的具体的类型参数化, 类似于方法中的变量参数, 此时类型也定义成参数形式(可以称之为类型形参), 然后在使用 / 调用时传入具体的类型(类型实参)
泛型, 即 “参数化类型”. 一提到参数, 最熟悉的就是定义方法时有形参, 然后调用此方法时传递实参. 那么参数化类型怎么理解呢?顾名思义, 就是将类型由原来的具体的类型参数化, 类似于方法中的变量参数, 此时类型也定义成参数形式(可以称之为类型形参), 然后在使用 / 调用时传入具体的类型(类型实参)
JUnit 是一个开放源代码的 Java 测试框架, 用于编写和运行可重复的测试. 他是用于单元测试框架体系xUnit的一个实例(用于java语言).
代码优化, 一个很重要的课题. 可能有些人觉得没用, 一些细小的地方有什么好修改的, 改与不改对于代码的运行效率有什么影响呢? 这个问题我是这么考虑的, 就像大海里面的鲸鱼一样, 它吃一条小虾米有用吗?没用, 但是, 吃的小虾米一多之后, 鲸鱼就被喂饱了. 代码优化也是一样, 如果项目着眼于尽快无BUG上线, 那么此时可以抓大放小, 代码的细节可以不精打细磨. 如果有足够的时间开发、维护代码, 这时候就必须考虑每个可以优化的细节了, 一个一个细小的优化点累积起来, 对于代码的运行效率绝对是有提升的.
方法区是 JVM 的规范, 永久代(PermGen space)是 HotSpot 对这种规范的实现, 在 JDK 1.8 中, HotSpot 已经没有 PermGen space
这个区间了, 取而代之的是 Metaspace(元空间).
漫威(Marvel)(即惊奇漫画)始建于1939年, 2009年12月31日, 迪士尼公司(DIS)以42.4亿美元的价格完成了对Marvel Entertainment Inc的收购, 从而获得了蜘蛛侠、钢铁侠以及其它5000多个漫画角色的所有权