![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 66
扎克begod
喜欢算法、数据结构,大数据开发,性能优化,源码分析,高并发、低能耗、高容错、可扩展、解耦合架构设计。
展开
-
一文解决JAVA并发安全问题
项目场景:并发的应用场景,在开发过程会经常遇到。 例如:服务应用启动后,需要简单统计接口的总访问量;实时更新订单状态,成交总额。问题描述:比如统计接口访问次数,如下的实现,在并发访问下,统计是不准确的 。 private int viewCount = 0; private void addViewCount(){ viewCount++; }复制代码比如A、B两个线程同时访问,各自从JVM主存中加载变量viewCount到线程内存里viewCo原创 2021-12-13 13:57:20 · 751 阅读 · 0 评论 -
Java 指定线程执行顺序
三种方式实现:共享对象锁、通过主线程join方法、通过线程执行过程join方法 参考自:原文:https://blog.csdn.net/difffate/article/details/63684290 方法一 通过共享对象锁加上可见变量来实现定义三个加锁的方法和现场共享变量public class MyService { private volatile i...转载 2018-10-21 21:47:17 · 252 阅读 · 0 评论 -
JAVA 内存泄露详解-值得收藏的好文
非常好的文章, 转载自:http://blog.csdn.net/anxpp/article/details/51325838 Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存。理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同。JAVA 中的内存管理 要...转载 2018-10-21 22:11:56 · 111 阅读 · 0 评论 -
排查Java 内存泄露-借助排查工具
转自:https://juejin.im/entry/57fb07255bbb50005b2f20acjava内存泄露典型特征现象一: 堆/Perm 区不断增长, 没有下降趋势(回收速度赶不上增长速度), 最后不断触发FullGC, 甚至crash(如下**两张图是同一个应用的GC和Perm数据, GC触发原因确认是Perm不足**) . 一般是现象二的晚期表现.现象二:每次Full...转载 2018-10-21 22:28:04 · 194 阅读 · 0 评论 -
JAVA Linux 排查CPU 过高的方法
原文:https://blog.csdn.net/zhanglh046/article/details/50443528 方法一1 ps -ef | grep java 查找java 进程号2 top -p PID -H 观察占用CPU较多的线程3 找出CPU消耗较多的线程id,如15844,将15844转换为16进制0x3de4,注意是小写哦4 使用jstack PID |grep ...转载 2018-10-21 22:42:03 · 160 阅读 · 0 评论 -
Http Cookie机制及Cookie的实现原理
转自:https://itbilu.com/other/relate/4J4n8fIPe.htmlCookie是进行网站用户身份,实现服务端Session会话持久化的一种非常好方式。Cookie最早由Netscape公司开发,现在由 IETF 的RFC 6265标准备对其规范,已被所有主流浏览器所支持。 1. 为什么需要Cookie?HTTP是一种无状态的协议,客户端与服务器建立连...转载 2018-10-21 23:31:59 · 614 阅读 · 0 评论 -
监控你的java程序服务
当我们JAVA开发工程师开发一个服务或系统后,我们想监控JVM里面的各种资源情况,实现可视化和告警。可以使用prometheus+ grafana去做。环境系统:CentOS 7.5软件:jmx_prometheus_javaagent-0.3.1.jar客户端 下载jmx_exporter # mkdir -p /usr/local/prometheu...转载 2018-11-28 11:11:23 · 1113 阅读 · 0 评论 -
JVM垃圾回收器 CMS和G1的区别
转自:https://www.cnblogs.com/rgever/p/9534857.htmlCMS:以获取最短回收停顿时间为目标的收集器,基于并发“标记清理”实现过程:1、初始标记:独占PUC,仅标记GCroots能直接关联的对象2、并发标记:可以和用户线程并行执行,标记所有可达对象3、重新标记:独占CPU(STW),对并发标记阶段用户线程运行产生的垃圾对象进行标记修正...转载 2018-12-25 17:18:50 · 2002 阅读 · 0 评论 -
Java中的时间与时区__java
转:https://yq.aliyun.com/ziliao/245667 摘要: 本文讲的是Java中的时间与时区__java, 0. 前言: 时间格式: //世界标准时间,其中T表示时分秒的开始(或者日期与时间的间隔),Z表示这是一个世界标准时间 2017-12-13T01:47:07.081Z //本地时间,也叫不含时区信息的时间。时间格式://世界标准时间,...转载 2019-01-11 14:21:53 · 4218 阅读 · 0 评论 -
junit使用
常用几个方法,assertTrue()、assertFalse()、assertEqual()、还有抛出的异常@Test(expected= 异常类.class)。还有几个常用注解,@Before、@BeforeClass、@After、@AfterClass、@PrepareForTest、@Test等。下面具体介绍,fail()用法。摘自//www.cnblogs.co...原创 2019-03-06 20:56:20 · 309 阅读 · 0 评论 -
powermockito的使用技巧
当IT中有些依赖组件无法正常集成,需要mock支持测试,可以使用power mockito。特别注意: 当对一个对象进行powermockito,应该在prepare方法,统一mock这个对象。然后在其他方法,分别进行调用when,否则,多个方法内进行mock,会出错。比如有个 Service处于IT case的底层,普通的mock根本mock不进去,但我们又不能为了集...原创 2019-03-06 21:00:09 · 2461 阅读 · 0 评论 -
Java内存模型
转自:https://juejin.im/post/59da10a76fb9a00a664a5e6e面试中问到“内存模型”,通常是考察Java内存结构和GC,而不是Happens-Before等更深入、细致的内容。内存模型是考察coder对一门语言的理解能力,从而进一步延伸到对JVM优化,和平时学习的深度上,是Java面试中最重要的一部分。这里整理了内存结构和GC的知识点,Happens-Be...转载 2018-10-21 21:27:31 · 125 阅读 · 0 评论 -
HTTP状态码分类和详解
常见的几个状态码: 1、200,表示请求成功。 2、301,表示请求的资源被永久转移到其他URL上了。 3、302,表示临时移动,与301类似。 4、400,bad request,客户端请求有语法错误。 5、401,Unauthorized,客户端请求需要带上认证授权信息。 6、403,Forbid...转载 2018-10-17 15:33:43 · 199 阅读 · 0 评论 -
深入理解Java 类加载机制(阿里面试题)
转载:https://www.cnblogs.com/aspirant/p/7200523.html(1)阿里的面试官问我,可以不可以自己写个String类答案:不可以,因为 根据类加载的双亲委派机制,会去加载父类,父类发现冲突了String就不再加载了;(2)能否在加载类的时候,对类的字节码进行修改答案:可以,使用Java探针技术,可以参考:Java探针-Java Agent技术...转载 2018-10-16 09:23:03 · 1116 阅读 · 0 评论 -
有序二叉树层次遍历
遍历有序二叉树,顺序输出每一层node 的data。 比如二叉树 6 3 91 5 7 10打印输出就是,6,3,9,1,5,7,10。这个利用队列实现非常高效。package dayscode;import java.util.LinkedList;import j...原创 2018-08-22 11:59:44 · 249 阅读 · 0 评论 -
判断一个整数是否为素数算法
素数:n%i==0,那就可以判断n是非素数。算法的复杂度,依赖i的取值范围,如果是2~n那就是O(N)。如果是2~sqrt(N),复杂度就是O(sqrt(N))。 package dayscode;import java.util.Scanner;/** * 判断是否为素数,也就是一个整数只能被1和自己整除。1不是素数 */public class Prime { ...原创 2018-08-22 17:45:16 · 4166 阅读 · 0 评论 -
两数相加-一看就懂,非常详细code解法解释
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解法: ...原创 2018-08-27 11:41:34 · 442 阅读 · 0 评论 -
leetcode 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法: 该实现时间复杂度是O(N),空间复杂度为O(N). *依赖hashM...原创 2018-08-27 13:33:53 · 325 阅读 · 0 评论 -
java文档注释添加url链接和class跳转链接
@link 语法{@link package.class#member label}为文档注释添加url链接可以使用@see,记得,@see前面必须是*注释,否则无法正常使用。@see <a href="http://www.luo.com">luo.com</a>...原创 2018-09-01 13:21:45 · 14226 阅读 · 0 评论 -
Java中字符串indexof() 、subString(x),subString(x,y)的用法
这两个方法,尤其是字符串截取,经常忘记。记录一下。 indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回-1。 subString(x,y)和subString(x)的区别 str=str.substring(int beginIndex,int endIndex);中最终得到的值 beginIndex ...原创 2018-09-02 12:15:32 · 741 阅读 · 0 评论 -
JDK 8 foreach的用法
forEach forEach 方法接收一个 Lambda 表达式,然后在 Stream 的每一个元素上执行该表达式。清单 打印姓名(forEach 和 pre-java8 的对比) 1 2 3 4 5 6 7 8 9 10 // Java 8 roster.stre...原创 2018-09-05 15:44:41 · 15581 阅读 · 0 评论 -
官方翻译 Java 8的新特性—完整版
转载自:https://www.jianshu.com/p/5b800057f2d8声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己翻译了一版(写作驱动学习,加深印象),有些地方参考了该同学的。Java 8前言: Java ...转载 2018-10-12 17:27:44 · 267 阅读 · 0 评论 -
解析Java类加载机制
转载:https://www.cnblogs.com/chanshuyi/p/the_java_class_load_mechamism.html在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} ...转载 2018-10-15 22:01:06 · 129 阅读 · 0 评论 -
JVM加载类class文件的原理机制
JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。 由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是...原创 2018-10-15 22:35:00 · 513 阅读 · 0 评论 -
JVM GC算法和过程
GC回收算法1、标记清除算法(Mark-Sweep算法) 先标记然后删除,这个算法效率不高。而且容易导致内存碎片多,难以找到连续足够大的内存片供使用。2、复制算法(Copying) 将内存分为两块,一块是在使用的。这块使用到一定程度,开始回收。将里面还活着的对象复制到另一半中。让后清理整半块内存。缺点就是内存利用率不高,只有一半。而且存活对象多时候,复...原创 2018-10-15 22:40:08 · 271 阅读 · 0 评论 -
新建有序二叉树BST、求树的最大深度或高度
新建有序二叉树,left node 小于等于root,right node 大于等于root。并求二叉树的树高。package dayscode;import java.util.Scanner;/** * 插入new node到有序二叉树,获取二叉树最大树高 */public class BSTHeight { static class Node { ...原创 2018-08-22 11:16:18 · 1768 阅读 · 0 评论