java基础
文章平均质量分 58
福神007
慢鸟多飞就快了
展开
-
Java中字符串存储在JVM的哪部分?
原文链接:https://www.cnblogs.com/holten/p/5782596.html现在总结一下:基本类型的变量数据和对象的引用都是放在栈里面的,对象本身放在堆里面,显式的String常量放在常量池,String对象放在堆中。常量池的说明常量池之前是放在方法区里面的,也就是在永久代里面的,从JDK7开始移到了堆里面。这一改变我们可以从oracle的release ver...转载 2019-06-27 15:14:07 · 5058 阅读 · 3 评论 -
什么是CAS机制?
转载声明:无法找到原作者,查到后会添加声明我们先看一段代码:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果一定是200吗?因为这段代码是非线程安全的,所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁,再来看一下。加了同步锁之后,count自增的操作变成了原子性操作,所以最终输出一定是count=200,代...转载 2019-04-30 15:03:44 · 119 阅读 · 0 评论 -
为什么volatile在并发下也是线程不安全的
volatile修饰的变量在各个线程的工作内存中不存在一致性的问题(在各个线程工作的内存中,volatile修饰的变量也会存在不一致的情况,但是由于每次使用之前都会先刷新主存中的数据到工作内存,执行引擎看不到不一致的情况,因此可以认为不存在不一致的问题),但是java的运算并非原子性的操作,导致volatile在并发下并非是线程安全的。最简单的例子就是多线程为一个变量连续赋值 每次做到 ...原创 2019-05-05 17:06:20 · 1959 阅读 · 0 评论 -
java中for循环执行顺序
for(表达式1;表达式2;表达式3){//循环体}先执行“表达式1”,再进行“表达式2”的判断,判断为真则执行“循环体”,循环体执行完以后执行表达式3.例如for(int i=0;i<2;i++){//TODO}先执行 int i = 0;然后 判断 i<2然后执行函数体最后执行i++然后轮回到判断i<2...原创 2019-04-10 18:07:39 · 2103 阅读 · 0 评论 -
【Java】生产者消费者模式的三种实现
原文地址:https://blog.csdn.net/u010983881/article/details/78554671前言生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。wait/notif...转载 2019-03-25 14:37:03 · 418 阅读 · 0 评论 -
Java异常(exception)性能优化
在Java中,构造异常对象是”十分”耗时的,其原因是在默认情况下,创建异常对象时会调用父类Throwable的fillInStackTrace()方法生成栈追踪信息,JDK中的源码如下:public synchronized Throwable fillInStackTrace() { if (stackTrace != null || backtrace...转载 2019-01-24 14:15:14 · 1076 阅读 · 0 评论 -
java web 中两种跳转方式
java web 中两种跳转方式服务器端跳转与客户端跳转:首先我们需要理解什么是服务器端跳转,什么是客户端的跳转。简单理解所谓服务器端跳转就是指地址栏内容不变(客户端浏览器的地址栏不会显示目标地址的URL),而客户端跳转是指地址栏内容发生改变(客户端向服务器发请求,然后服务器再给客户端一个响应,然后客户端再根据服务器端给的响应中的URL再向服务器发送请求,所以是两次请求,因此地址栏改变了显示...转载 2019-01-24 14:11:26 · 1685 阅读 · 0 评论 -
Tomcat中JVM内存溢出及合理配置
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。一、Java JVM内存介绍JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚...转载 2018-05-10 11:30:02 · 128 阅读 · 0 评论 -
JVM调优总结 -Xms -Xmx -Xmn -Xss
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms3550m -Xmn2...转载 2018-03-27 18:21:07 · 156 阅读 · 0 评论 -
Java 中 String的三种判断方式NotEmpty,NotNull和@NotBlank的区别
1.@NotNull:不能为null,但可以为empty(""," "," ") 2.@NotEmpty:不能为null,而且长度必须大于0(" "," ")3.@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0("test") 即:必须有实际字符@NotNull: The CharSequence, Collecti原创 2017-06-14 13:07:17 · 15030 阅读 · 0 评论 -
Java分布式锁
为什么要使用分布式锁为了保证一个方法在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。但是,随着业务发展的需要,原单体单机部署的系统被演化成分布式系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,为了解决转载 2017-11-21 14:54:52 · 271 阅读 · 0 评论 -
Collections.sort()和Arrays.sort()排序算法选择
Collections.sort();和Arrays.sort();两个方法的排序算法实现,我只记得一个是快速排序一个是归并排序,但是刚刚看到没那么简单。Arrays.sort()先来看看Arrays.sort();,一点进这个方法会看到是这样子的public static void sort(int[] a) { DualPivotQuicksort.sort(a,转载 2017-11-02 12:11:13 · 674 阅读 · 0 评论 -
简单的灰度测试,lua或者直接改nginx配置
配置过程:1.根据cookies特征值实现在做的过程中把login的操作给做了过滤。登录过程将cookie中设置了一个新的cookie值 GINA_gray_SESSIONID =gray这样在nginx配置中加入筛选Root不要配置在最前面而是配置在location中#过滤login 请求进来会优先判断 请求是不是/ gina-client/login 然后判断是原创 2017-09-21 17:06:28 · 1639 阅读 · 0 评论 -
RandomAccessFile创建文件java.io.FileNotFoundException
今天突然发现经常用的一个下载文件的任务,测试那边环境报错。结果原因是: RandomAccessFile 不能创建多级目录,比如想要创建/data0/a/b.csv 必须先手动创建 /data0/a 文件夹.RandomAccessFile类的常用的操作方法1、public RandomAccessFile(File file, String mod原创 2017-10-27 18:03:38 · 2640 阅读 · 0 评论 -
java反序列化php序列化的对象
最近工作中遇到一个需要解析php序列化后存入DB的array,12a:4:{i:0;a:2:{s:11:"province";s:8:"0016";s:7:"img";s:49:"20150117105023_kk-1.jpg";}i:1;a:2:{s:11:"province";s:8:"0017";s:7:"img";s:翻译 2017-10-18 14:59:41 · 1323 阅读 · 0 评论 -
常用Quartz定时任务触发的cron表达式
Cron表达式Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成。Cron表达式时间字段(从左到右依次为): 位置时间域名允许值允许的特殊字符1秒0-59, - * /2分钟0-59, - * /3小时0-23转载 2017-10-18 14:56:50 · 487 阅读 · 0 评论 -
hive 突破group_by限制,取某一列数据 不需要放在group by里面(Hive笔记之collect_list/collect_set(列转行))
Hive中collect相关的函数有collect_list和collect_set。它们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重而collect_set去重。select concat_ws(',',collect_list(event)) as connection ,user_id,rank from mds_user_growth_user_pat...原创 2019-10-11 15:10:15 · 2585 阅读 · 0 评论