
java基础总结
文章平均质量分 74
秋天的猿
这个作者很懒,什么都没留下…
展开
-
正则表达式
正则表达式转载 2022-11-01 09:43:03 · 3463 阅读 · 0 评论 -
java基础总结(八十五)--下载https服务上的图片
java version "1.8.0_172"package com.lisx.controller;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;/** * 李双喜下载https图片 */public class DownLoadPic { public.原创 2021-07-31 20:58:24 · 292 阅读 · 0 评论 -
java基础总结(107)--排序
来自https://blog.youkuaiyun.com/qq_23179075/article/details/78753136在日常开发中,很多时候都需要对一些数据进行排序的操作。然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中。他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是 可比较的。怎么让一个对象是 可比较的,那就需要该对象实现 Comparable<T> 接口啦。然后重写里面的compareTo()方法。我转载 2021-04-05 10:40:28 · 207 阅读 · 0 评论 -
java基础总结(八十四)--Java并发编程:Callable、Future和FutureTask
原文链接在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。 今天我们就来讨论一下Callable、Future和FutureTask三个.转载 2021-02-28 15:17:37 · 119 阅读 · 0 评论 -
java基础总结(八十五)--线程池中shutdown()和shutdownNow()方法的区别
原文链接一般情况下,当我们频繁的使用线程的时候,为了节约资源快速响应需求,我们都会考虑使用线程池,线程池使用完毕都会想着关闭,关闭的时候一般情况下会用到shutdown和shutdownNow,这两个函数都能够用来关闭线程池,那么他们俩之间的区别是什么呢?下面我就用一句话来说明白shutdown和shutdownNow的区别。一、一句话说明白shutdown和shutdownNow的区别shutdown只是将线程池的状态设置为SHUTWDOWN状态,正在执行的任务会继续执行下去,没有被执行的则中转载 2021-02-27 21:09:50 · 1112 阅读 · 0 评论 -
java基础总结(八十六)--为什么我墙裂建议大家使用枚举来实现单例。
原文链接关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的破坏等。单例相关文章一览:设计模式(二)——单例模式设计模式(三)——JDK中的那些单例单例模式的七种写法深度解析单例与序列化之间的爱恨情仇~不使用synchronized和lock,如何实现一个线程安全的单例?不使用synchronized和lock,如何实现一个线程安全的单例?(二)转载 2021-02-27 21:08:29 · 134 阅读 · 0 评论 -
java基础总结(八十九)--synchronize编译后的效果
jdk1.8. 编译出来的字节码原创 2021-02-27 21:05:37 · 188 阅读 · 0 评论 -
java基础总结(八十七)--Ack机制
原文链接1、ack是什么ack 机制是storm整个技术体系中非常闪亮的一个创新点。通过Ack机制,spout发送出去的每一条消息,都可以确定是被成功处理或失败处理, 从而可以让开发者采取动作。比如在Meta中,成功被处理,即可更新偏移量,当失败时,重复发送数据。因此,通过Ack机制,很容易做到保证所有数据均被处理,一条都不漏。另外需要注意的,当spout触发fail动作时,不会自动重发失败的tuple,需要spout自己重新获取数据,手动重新再发送一次ack机制即, spout发送的每转载 2021-02-26 19:56:00 · 1667 阅读 · 0 评论 -
java基础总结(八十八)--内存调优
原文链接如果要解决内存溢出,可以设置jvm的哪些参数? 我认为可以看下面的一些描述部分信息可以有用。理想的情况下,一个Java程序使用JVM的默认设置也可以运行得很好,所以一般来说,没有必要设置任何JVM参数。然而,由于一些性能问题(很不幸的是,这些问题经常出现),一些相关的JVM参数知识会是我们工作中得好伙伴。在这篇文章中,我们将介绍一些关于JVM内存管理的参数。知道并理解这些参数,将对开发者和运维人员很有帮助。所有已制定的HotSpot内存管理和垃圾回收算法都基于一个相同的堆内存划分:新生代转载 2021-02-25 21:53:10 · 163 阅读 · 0 评论 -
java架构模式与设计模式(十一)--云原生时代下的12-Factor应用与实践
原文链接作者简介:黄庆兵,网易蜂巢首席技术布道师,浙大硕士毕业,从事云计算、Docker、Go等相关开发及技术布道工作;喜欢开源,乐于分享,勤于布道,折腾过开源小工具,制作过Docker课程,分享过 Gopher Meetup。欢迎一起来探讨技术!个人主页:http://bingohuang.com/以下为正文:1. 简介在云的时代,应用会更多的迁移到云端,基于云的架构设计和开发模式需要一套全新的理念去承载,于是云原生思想应运而生,而针对云原生应用开发的最佳实践原则,12-Factor脱颖而转载 2021-02-24 20:24:55 · 507 阅读 · 1 评论 -
java基础总结(九十)--AQS
转载第一篇文章原文链接AQS原理AQS:AbstractQuenedSynchronizer抽象的队列式同步器。是除了java自带的synchronized关键字之外的锁机制。AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤...转载 2021-02-24 00:02:23 · 271 阅读 · 0 评论 -
java基础总结(八十九)--详解 ThreadPoolExecutor 的参数含义及源码执行流程?
原文链接目录1.典型回答2.考点分析3.知识扩展3.1 execute() VS submit()3.2线程池的拒绝策略3.3自定义拒绝策略3.4ThreadPoolExecutor 扩展4.小结线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程池的话一定离不开 ThreadPoolExecutor ,在...转载 2021-02-24 20:22:51 · 279 阅读 · 0 评论 -
java基础总结(八十八)--Servlet 生命周期
原文链接目录Servlet生命周期init() 方法service() 方法doGet() 方法doPost() 方法destroy() 方法架构图Servlet生命周期Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:Servlet 初始化后调用init ()方法。 Servlet 调用service()方法来处理客户端的请求。 Servlet 销毁前调用destroy()方法。 最后,Serv...转载 2021-02-24 20:23:00 · 395 阅读 · 0 评论 -
java架构模式与设计模式(十一)--IaaS,PaaS,SaaS 的区别
原文链接越来越多的软件,开始采用云服务。云服务只是一个统称,可以分成三大类。IaaS:基础设施服务,Infrastructure-as-a-service PaaS:平台服务,Platform-as-a-service SaaS:软件服务,Software-as-a-service它们有什么区别呢?IBM 的软件架构师 Albert Barron 曾经使用披萨作为比喻,解释这个问题。David Ng 进一步引申,让它变得更准确易懂。请设想你是一个餐饮业者,打算做披萨.转载 2021-02-24 20:23:40 · 770 阅读 · 0 评论 -
java基础总结(八十七)--keytool生成证书的方法
原文链接1. 导入最近在开发中,笔者遇到了这样的问题:当第三方向我们系统请求pay bill业务时,我们的系统就会报错,而且错误的信息是找不到有效的证书,所以交易就被cancelled了。我们不去深究为什么会有这样的错误,笔者今天主要讲的是关于keytool的相关知识,因为了解这个,你就会知道上面的问题是为什么了。2. keytool介绍笔者查找了关于keytool的相关解释,网站上给出的定义是:keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过转载 2021-02-24 20:23:49 · 457 阅读 · 0 评论 -
java架构模式与设计模式(十)--失效模式与影响分析
原文链接失效模式与影响分析失效模式与影响分析即“潜在失效模式及后果分析”,或简称为FMEA。FMEA是在产品设计阶段和过程设计阶段,对构成产品的子系统、零件,对构成过程的各个工序逐一进行分析,找出所有潜在的失效模式,并分析其可能的后果,从而预先采取必要的措施,以提高产品的质量和可靠性的一种系统化的活动。FMEA分为DFMEA/PFMEA以及FMEA-MSR。中文名失效模式及后果分析外文名Failure Mode and Effects Analysis最早出现1950年飞转载 2021-02-25 21:53:49 · 757 阅读 · 0 评论 -
java基础总结(八十六)--JSON的基本格式有哪些
原文链接JSON是在js,ajax中常用的一种格式,可以快速处理数据,灵活实用,那JSON都有哪些基础格式呢,下面就进行一个简单的介绍工具/原料 Ajax资料 JSON基本格式资料 JS相关资料 五种基础格式 一个基础的JSON对象 俗称的键值对 JSONObject 一般是一个主键对应一个值 var data= {"id":"Jd1" , "name":"节点1"}; 在使用时可以直接 使用主键值获取信息 var id=dat...转载 2021-02-25 21:54:31 · 408 阅读 · 0 评论 -
java基础总结(八十五)--java8新特性之put与compute,computeIfAbsent与putIfAbsent区别
原文链接 是否覆盖value 返回值 put 是 覆盖前 compute 是 覆盖后 putIfAbsent 否 覆盖前 computeIfAbsent 否 覆盖后 总结: 1. put与compute: 不论key是否存在,强制用value覆盖进去。 区别:put返回旧value或null,compute返回新的value 2. putIfAbsent与co...转载 2021-02-26 19:54:25 · 815 阅读 · 0 评论 -
java基础总结(八十四)--基本线程方法详解
原文链接什么是线程线程是操作系统调度的最小单位,一个进程中可以有多个线程,这些线程可以各自的计数器,栈,局部变量,并且能够访问共享的内存变量。多线程的优势是可以提高响应时间和吞吐量。使用多线程一个进程正在运行的时候,至少会有一个线程运行。public class Test { public static void main(String[] args) { System.out.println(Thread.CurrentThread().getName());转载 2021-02-23 21:52:37 · 135 阅读 · 0 评论 -
java基础总结(八十五)--Akka框架简介
原文链接Akka是JAVA虚拟机平台上构建高并发、分布式和容错应用的工具包和运行时。Akka用Scala语言编写,同时提供了Scala和Java的开发接口。Akka处理并发的方法基于Actor模型,Actor之间通信的唯一机制就是消息传递。Akka特点:对并发模型进行了更高的抽象是异步、非阻塞、高性能的事件驱动编程模型是轻量级事件处理(1GB内存可容纳百万级别个Actor)它提供了一种称为Actor的并发模型,其粒度比线程更小,你可以在系统中启用大量的Actor。它提供了一套容错转载 2021-02-23 21:51:49 · 2085 阅读 · 0 评论 -
java基础总结(九十五)--二叉树有几种存储方式?(上)
原文链接写在前边前边几篇文章的讲了数组、链表、队列等,今天和大家主要分享的是树这种数据结构。树这种数据结构不像数组、链表一样,它是一种非线性结构,学起来可能比其他数据结构比较吃力,但是它在数据结构中占有很重要的地位,也是面试中的频繁考点,尤其是二叉树,一定注重起来。由题目抛出的问题,树到底怎么存储呢?二叉树有几种存储方式呢?如果带着好奇心学习,学习更加的高效,一颗树横七竖八的,咋表示?下边小鹿带你一起来探索。1、什么是树?顾名思义,第一想到的就是路边的树,有树干、树根、树叶,数.转载 2021-02-22 22:59:57 · 477 阅读 · 0 评论 -
java基础总结(九十四)--取模和取余
原文链接 public static void main(String[] args) { System.out.println((-4)%(3));//取余 System.out.println(Math.floorMod(-4, 3));//取模 /* * 取余的结果和被除数同号,取模的结果和除数同号 * * * 取模:这里Math.floorMod方法的功能是向下取模(也就是取模)。 * “向下”的意思就是说尽可能让商更小(商值向负无穷方向取)。 *转载 2021-02-22 23:00:15 · 239 阅读 · 0 评论 -
java基础总结(九十三)--深入理解 DAO,DTO,DO,VO,AO,BO,POJO,PO,Entity,Model,View的概念
原文链接 DAO (Data Access Object)数据访问对象 DTO(Data Transfer Object)数据传输对象 DO (Domain Object)领域对象 VO(View Object)视图模型 AO(Application Object)应用对象 BO( Business Object)业务对象 POJO( Plain Ordinary Java Object)纯普通Java对象 PO(Persisten转载 2021-02-22 23:00:35 · 1901 阅读 · 0 评论 -
java基础总结(九十二)--java中哈希表及其应用详解
原文链接http://blog.youkuaiyun.com/u010297957/article/details/51974340什么是哈希表数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系。当要查找一个对象时,只能以某种顺序(如顺序查找或二分查找)与各个元素进行比较,当数组或向量中的元素数量很多时,查找的效率会明显的降低。一种有效的存储方式,是不与其他元素进行比较,一次存取便能得到所需要的记录。这就需要在对象的存储位置和对象的关键属性(设为 k)之间转载 2021-02-22 23:00:50 · 836 阅读 · 0 评论 -
java基础总结(九十一)--long和double类型变量的非原子性问题
原文链接“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。错误数据出现的原因是:对于long和double变量,把它们作为2个原子性的32位值来对待,而不是一个原子性的64位值,这样将一个long型的值保存到内存的时候,可能是2次32位的写操作,2个竞争线程想写不同的值到内存的时候,可能导致内存中的值是不正确的结果。1、写入高位32位值(线程2)2、写...转载 2021-02-22 23:01:04 · 341 阅读 · 0 评论 -
java基础总结(九十)--性能:Lock的锁之优化
原文链接Lock / synchronizedLock锁的基本操作是通过乐观锁实现的,由于Lock锁也会在阻塞时被挂起,依然属于悲观锁synchronizedLock实现方式JVM层实现Java底层代码实现锁的获取JVM隐式获取lock() / tryLock() / tryLock(timeout, unit) / lockInterruptibly()锁的释放JVM隐式释放unlock()锁的类型非公平锁、可重入非公平锁/公平锁、可重入锁的状态不可中断可中断锁的性能高并发下会升级为重量级锁更转载 2021-02-22 23:01:17 · 287 阅读 · 0 评论 -
java基础总结(八十九)--CopyOnWriteArrayList的原理和使用方法
原文链接CopyOnWriteArrayList:CopyOnWriteArrayList这是一个ArrayList的线程安全的变体,其原理大概可以通俗的理解为:初始化的时候只有一个容器,很常一段时间,这个容器数据、数量等没有发生变化的时候,大家(多个线程),都是读取(假设这段时间里只发生读取的操作)同一个容器中的数据,所以这样大家读到的数据都是唯一、一致、安全的,但是后来有人往里面增加了一个数据,这个时候CopyOnWriteArrayList底层实现添加的原理是先copy出一个容器(可以简称副本).转载 2021-02-22 23:01:29 · 510 阅读 · 0 评论 -
java基础总结(八十八)--synchronized也是可重入的
原文链接、可重入锁,从字面来理解,就是可以重复进入的锁。可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下ReentrantLock和synchronized都是可重入锁。synchronized是一个可重入锁。在一个类中,如果synchronized方法1调用了synchronized方法2,方法2是可以正常执行的,这说明synchronized是可重入锁。否则,在执行方法2想获取锁的时候,该锁已经在执行方法1时获取了,转载 2021-02-23 21:48:32 · 1173 阅读 · 0 评论 -
java基础总结(八十七)--Callable 实现原理分析
原文链接前言我们常用的创建线程方式一般有下面 2 种:继承Thread,重写run方法 实现Runnable接口,重新run方法其实在 Executor 框架中还有一种方法可以实现异步,那就是实现 Callable 接口并重写call方法。虽然是实现 Callable ,但是在 Executor 实际运行时,会将 Runnable 的实例或 Callable 的实例转化为 RunnableFuture 的实例,而 RunnableFuture 继承了 Runnable 和 Future 接口转载 2021-02-23 21:48:42 · 915 阅读 · 0 评论 -
java基础总结(八十六)-CAS底层CPU实现原理
原文链接上图可以看到一个8核CPU计算机系统,每个CPU有cache(CPU内部的高速缓存,寄存器),管芯内还带有一个互联模块,使管芯内的两个核可以互相通信。在图中央的系统互联模块可以让四个管芯相互通信,并且将管芯与主存连接起来。数据以“缓存线”为单位在系统中传输,“缓存线”对应于内存中一个 2 的幂大小的字节块,大小通常为 32 到 256 字节之间。当 CPU 从内存中读取一个变量到它的寄存器中时,必须首先将包含了该变量的缓存线读取到 CPU 高速缓存。同样地,CPU 将寄存器中的一个值存.转载 2021-02-23 21:48:50 · 195 阅读 · 0 评论 -
java基础总结(八十三)--ConcurrentHashMap
原文链接HashMap存在的问题:HashMap线程不安全因为多线程环境下,使用Hashmap进行put操作可能会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如如下代码:final HashMap<String, String> map = new HashMap<String, String>(2);for (int i = 0; i < 10000; i++) { new Thread(new Runnab转载 2021-02-28 15:16:56 · 163 阅读 · 0 评论 -
java基础总结(八十二)-一文彻底理解ReentrantLock可重入锁的使用
原文链接java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能。而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。这篇文章主要是从使用的角度来分析一下ReentrantLock。一、简介ReentrantLock常常对比着synchronized来分析,我们先对比着来看然后再一点一点分析。(1)synchronized是独占锁,加锁和解锁的过程自动进行,易于操作,但不够灵活。R转载 2021-02-28 15:16:45 · 168 阅读 · 0 评论 -
java数据结构与算法总结(二十五)--初识BitSet之API
原文链接1.BitSet类的基本原理类实现了一个按需增长的位向量。用一位来表示一个数据是否出现过,0表示没有出现过,1表示没有出现过默认情况下,set中所有位的初识值都是0(或者false)。多个线程操作一个BitSet是不安全的。2.API解析2.1 底层数据结构内部维护了一个long数组,所以数组words中的每个元素word默认是64位的long值。ADDRESS_BITS_PER_WORD = 6:每个word值需要6个bit来表示地址:64 = 2^...转载 2021-02-22 22:55:38 · 225 阅读 · 0 评论 -
java数据结构与算法总结(二十四)--RoaringBitmap数据结构及原理
原文链接首先每个RoaringBitmap(GitHub链接)中都包含一个RoaringArray,名字叫highLowContainer。highLowContainer存储了RoaringBitmap中的全部数据。RoaringArray highLowContainer;1这个名字意味着,会将32位的整形(int)拆分成高16位和低16位两部分(两个short)来处理。RoaringArray的数据结构很简单,核心为以下三个成员:short[] keys;Co.转载 2021-02-21 15:01:06 · 361 阅读 · 0 评论 -
java数据结构与算法总结(二十三)--通过BitSet源码来理解BitMap算法
原文链接BitMap是一种很常用的数据结构,它的思想的和原理是很多算法的基础,当然,并且在索引,数据压缩,海量数据处理等方面有广泛应用。一、简介BitMap 是一种很常用的数据结构,它的思想和原理是很多算法的基础,比如Bloom Filter 。BitMap 的基本原理就是用一个 bit 位来存放某种状态(如果理解不了,看完下文再回头来看即可),适用于拥有大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。它最大的一个特点就是对内存的占用极小,所以经常在大数据中被优化转载 2021-02-21 14:57:42 · 286 阅读 · 0 评论 -
java基础总结(八十一)-字节(Byte)和位(位)的关系
原文链接java中字节容量关系1GB =1024MB GB:千兆 1MB=1024KB MB:兆 1KB=1024Byte KB是千字节Byte的缩写B也就是字节Byte和Bit的关系1 bit: Binary digit(二进制数位)的缩写,是“位”,或“比特”,它是计算机运算的基础; 2 byte:是字节,是计算机文件大小的基本计算单位; 3 关系: 1Byte = 8bitbit代表二进制数位,取值范围:0或1.二进制是计算机中表示信息的...转载 2021-02-21 14:48:32 · 306 阅读 · 0 评论 -
oracle数据库总结(十八)--修改oracle数据库编码格式
目录1说明2oracle客户端编码格式 2.1查询客户端编码格式 2.2修改客户端编码格式3oracle服务端编码格式 3.1查看编码格式 3.2修改编码格式4补充1说明1:本文部分内容来自:https://www.cnblogs.com/jpfss/p/11164896.html2:本文中未特别说明环境都为linux,...原创 2019-12-22 14:20:04 · 1608 阅读 · 0 评论 -
java基础总结(七十八)--JAVA中断言的使用
相信学过c,c++的朋友一定不会对断言感到陌生。下面介绍一下断言在JAVA中的使用,JAVA是从JDK1.4才开始支持断言的(添加了关键字assert),请注意老版的JRE不支持。断言概述编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设可以将断言看作是异常处理的一种高级形式断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题...转载 2020-06-02 23:32:11 · 465 阅读 · 0 评论 -
java基础总结(七十九)--通过Java反射的获取私有成员变量,调用私有方法
Java的反射工具很强大,有句著名的话:No reflection ,no frameworks.纳整理一个小工具类:/** * @Author 落叶飞翔的蜗牛 * @Date 2018/3/10 * @Description */public class ReflectionUtils { /** * 获取私有成员变量的值 * @param instance * @param filedName * @return */转载 2020-06-02 23:34:52 · 815 阅读 · 0 评论 -
java架构模式与设计模式(三)--事件风暴
本文来自什么是事件风暴很多人在学习DDD的过程中,都会有一个疑问:DDD的概念看着挺多,听起来也很有用。但具体怎么落地实施到项目中?事件风暴(Event Storming)于2013年首次被提出,2015年被ThoughtWorks技术雷达添加到“实验”阶段,2018年被ThoughtWorks技术雷达添加到“采纳”阶段。事件风暴是一种快速探索复杂业务领域和对领域建模的实践。事件风暴从领域中关注的业务事件出发,在此过程中团队经过充分讨论,统一语言,最后找到领域模型。那到底什么是领转载 2020-06-02 23:23:05 · 439 阅读 · 0 评论