Java
文章平均质量分 94
zxx901221
这个作者很懒,什么都没留下…
展开
-
JVM内存模型与垃圾回收
Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础——这就是JVM。在C++中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情况。在Java中JVM内置了垃圾回收的机制,帮助开发者承担对象的创建和释放的工作,极大的减轻了开发的负担。那是不是我们就不需要了解JVM了,显然在做一些优化或者深入研究应用性能的时候,JVM还是起了...转载 2018-10-11 23:39:22 · 99 阅读 · 0 评论 -
软件设计七大原则
转载:https://www.cnblogs.com/kinglongdai/archive/2011/10/09/2204134.html正如牛顿三大定律在经典力学中的位置一样,“开-闭”原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石。其他设计原则(里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法...转载 2018-10-19 22:03:19 · 879 阅读 · 0 评论 -
多个线程之间共享数据
多个线程之间共享数据,首先想到的是将共享数据设置为全局变量,并且用static修饰,但是static修饰的变量是类变量,生命周期太长了,占用内存,本文将介绍三种方法实现多个线程之间共享数据。方法一:多个线程对共享数据的操作是相同的,那么创建 一个Runnable的子类对象,将这个对象作为参数传递给Thread的构造方法,此时因为多个线程操作的是同一个Runnable的子类对象,所以他们操作的...转载 2018-10-10 22:18:38 · 5504 阅读 · 0 评论 -
常用的设计模式
转载:https://www.cnblogs.com/feng-sc/p/5710724.html单例模式简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。单例模式实现起...转载 2018-10-21 10:30:25 · 116 阅读 · 0 评论 -
深入理解Java之线程池
原作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本文归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线...转载 2018-10-24 15:39:32 · 133 阅读 · 0 评论 -
java中equals,hashcode和==的区别
转载: http://blog.csdn.net/hla199106/article/details/469077251、==java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.引用类型(类、接口、数组) ...转载 2018-10-24 15:46:23 · 110 阅读 · 0 评论 -
Java map 详解 - 用法、遍历、排序、常用API等
转载自:https://www.cnblogs.com/lzq198754/p/5780165.html概要:java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。本文主要介绍java map的初始化、用法、map的四...转载 2019-02-28 17:31:20 · 240 阅读 · 0 评论 -
Intellij IDEA Cannot resolve symbol XXX 问题解决办法汇总
转载自:https://blog.csdn.net/lesaqiu/article/details/54846960maven项目遇到这类问题基本上是两方面的原因,类对应的依赖没有加载进来、编译器自身的设置和缓存问题。解决第一类:1、检查项目的pom文件,是否必要的依赖都写清楚了;2、是否使用自己的私有库,<repositories><repository>...转载 2019-03-01 15:18:56 · 14775 阅读 · 0 评论 -
Java中String的学习与总结
构造方法这里只介绍部分构造函数String()初始化空串String(byte[] bytes)byte类型数组,数据为char才能转为字符串String(byte[] bytes, Charset charset)以指定编码解析成字符串String(char[] value) char数组转为字符串String(String original) 获得的是original的副本St...原创 2019-03-01 18:02:32 · 246 阅读 · 0 评论 -
Java LinkedList 学习与总结
JDK1.8构造方法LinkedList() 一个空的LinkedListLinkedList(Collection<? extend E> c) 可将一个集合初始化为LinkedList常用方法add(E e) 添加元素,尾部添加,返回booleanadd(int index, E element) 指定索引处添加元素, voidadd(Collection&l...原创 2019-03-15 10:13:44 · 280 阅读 · 0 评论 -
Java中ArrayList 的学习与总结
基于JDK1.8构造方法ArrayList()默认长度为10ArrayList(Colletion&lt;? extend E&gt; c) 将集合初始化为list元素ArrayList(int len)指定长度为len的list常用方法add(E e) 添加元素 ,返回boolean 类型add(int index, E e) 在index索引位置,添加元素; void 方法...原创 2019-03-12 09:52:00 · 482 阅读 · 0 评论 -
service和serviceImpl的选择
转载自:https://www.cnblogs.com/zqsky/p/6143319.html同行中,有些同行公司的代码风格是service层=service接口+serviceImpl实现类;而有的同行公司的代码风格是service层=service类;为什么不一样呢?以前没想过这个问题,今天突然对这个产生了疑惑,通过百度,和github及朋友处以及自己的思考,有了如下结论:当项目的...转载 2019-03-18 10:18:58 · 21985 阅读 · 10 评论 -
Java不使用Math.sqrt方法实现的求平方根
转载:https://blog.csdn.net/qq_17776287/article/details/53762265今天中午吃饭闲暇,和朋友聊到了如果不使用Math.sqrt方法,该怎么通过Java实现同样的功能,我们各自发表了下意见。以下是我和朋友二人的解法思路:1、朋友采用的是先确定当前数所处的最小整数区间,然后再通过二分法来进行判断检测。2、我当时的想法是直接通过二分法...转载 2018-10-17 09:48:23 · 2485 阅读 · 0 评论 -
关于Java中List三个实现类区别
1. 前言:List实现Collection接口,它的数据结构是有序可以重复的结合,该结合的体系有索引;它有三个实现类:ArrayList、LinkList、Vector三个实现类。2. 三个实现类的基本区别:2.1 ArrayList:底层数据结构使数组结构,查询速度快,增删改慢,2.2 LinkList:底层使用链表结构,增删速度快,查询稍慢;2.3 Vector:...转载 2018-10-10 15:20:34 · 8846 阅读 · 1 评论 -
Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较
0. 前言 HashMap和HashTable的区别一种比较简单的回答是:(1)HashMap是非线程安全的,HashTable是线程安全的。(2)HashMap的键和值都允许有null存在,而HashTable则都不行。(3)因为线程安全、哈希效率的问题,HashMap效率比HashTable的要高。但是如果继续追问:Java中的另一个线程安全的与HashMap功能极其类...转载 2018-10-10 15:09:57 · 135 阅读 · 0 评论 -
Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级
一、Synchronized实现原理1、Synchronized锁的3中形式:Synchronized修饰普通同步方法:锁对象当前实例对象;Synchronized修饰静态同步方法:锁对象是当前的类Class对象;Synchronized修饰同步代码块:锁对象是Synchronized后面括号里配置的对象;2、Synchronized在JVM里的实现那么Synchroniz...转载 2018-10-12 09:35:54 · 122 阅读 · 0 评论 -
大数据常用技巧之位图法
大数据常用技巧之位图法介绍位图的基本概念是用一个位(bit)来标记某个数据的存放状态,由于采用了位为单位来存放数据,所以节省了大量的空间。举个具体的例子,在Java中一般一个int数字要占用32位,如果能用一位就表示这个数,就可以缩减大量的存储空间。一般把这种方法称为位图法,即Bitmap。BitSet正因为位图运算在空间方面的优越性,很多语言都有直接对它的支持。如在C++的STL库中就...转载 2018-10-12 15:54:49 · 1481 阅读 · 0 评论 -
Lock与synchronized是不一样的
很多编码者都会说,Lock类和synchronized关键字用在代码块的并发性和内存上时语义 是一样的,都是保持代码块同时只有一个线程具有执行权。这样的说法只对了一半,我们以一个任务提交给多个线程运行为例,来看看使用显式锁(Lock类)和内部锁(synchronized 关键字)有什么不同。首先定义一个任务:class Task{ public void doSomething(){...转载 2018-10-12 20:52:01 · 138 阅读 · 0 评论 -
什么情况下会发生堆内存溢出,栈内存溢出,结合实例说明
一、 栈溢出(StackOverflowError)栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口灯信息。局部变量表又包含基本数据类型,对象引用类型(局部变量表编译器完成,运行期间不会变化)所以我们可以理解为栈溢出就是方法执行是创建的栈帧超过了栈的深度。那么最有可能的就是方法递归调用产生这种结果。public...转载 2018-10-12 21:40:04 · 5597 阅读 · 0 评论 -
原子操作的实现原理
原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。在多处理器上实现原子操作就变得有点复杂。让我们一起来聊一聊在Intel处理器和Java里是如何实现原子操作的。1.术语定义在了解原子操作的实现原理前,先要了解一下相关的术语,如表2-7所示。2.处理器如何实现原子操作32位IA-32处理器使用...转载 2018-10-12 23:04:13 · 14502 阅读 · 0 评论 -
HashSet和TreeSet的区别
转载:http://blog.51cto.com/13579086/2069837HashSet 无序(存入和取出的顺序不同),不重复,无索引底层是哈希表结构,也称散列表结构,查找和删除快,添加慢像HashSet中存储自定义对象需要重写hashCode()和equals()方法import java.util.HashSet;import java.util.Iterator;...转载 2018-10-17 23:21:33 · 459 阅读 · 0 评论 -
Java并发编程:线程池的使用
转载:https://www.cnblogs.com/dolphin0520/p/3932921.htmlJava并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。...转载 2018-10-18 09:18:21 · 87 阅读 · 0 评论 -
缓存穿透,缓存击穿,缓存雪崩解决方案分析
前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有很多种...转载 2018-10-14 20:49:52 · 81 阅读 · 0 评论 -
Java线程池入门必备
一. 线程池的简介1.什么是线程池? 最早期的工作线程处理任务的模型。一个任务的到来,会伴随着线程的创建,当处理完任务后,线程会被销毁,资源回收。这种一个任务一个线程一系列创建销毁的模式,缺陷毋庸置疑.不仅是线程创建销毁带来的系统开销,也不好管理工作线程。于是引入了“线程池”的概念。它是一种预创建线程的技术。每次线程执行完任务前,先把任务委派给线程池空闲的线程, 如果没有空闲的线程, 则...转载 2018-10-15 23:59:12 · 108 阅读 · 0 评论 -
HashMap的底层实现原理
最近做的几个项目都是用Map来存储的数据 ,虽然用得挺顺手,但是对HashMap的底层原理却只知甚少,今天便来简单学习和整理一下。 数据结构中有数组和链表这两个结构来存储数据。 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度...转载 2018-10-16 09:49:52 · 7127 阅读 · 4 评论 -
深入理解JVM—JVM内存模型
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子...转载 2018-10-16 23:40:05 · 101 阅读 · 0 评论 -
Java HashSet 学习与总结
构造方法HaseSet() //一个空的hashsetHashSet(Collection<? extend E> c)//讲一个集合初始化为hashsetHashSet(int n)//指定长度为nHashSet(int n, float factor) 指定长度和装载因子方法add(E e) 添加元素clear() 清空hashsetclone() 克隆一个副...原创 2019-03-21 18:24:00 · 324 阅读 · 1 评论