
Java
文章平均质量分 77
还能坚持
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 内存分配全面浅析
java内存分配全面浅析转载 2022-06-06 11:58:38 · 192 阅读 · 0 评论 -
Java中Integer[]、int[]、List互转
将List<Integer> 或者 Integer[]转换为int[] :首先要调用stream()方法将其转换为Stream<Integer>,再使用mapToInt()将其转换为IntStream,最后使用toArray()即可转换为int[]。将int[]转换为List<Integer>或者Integer[]:首先调用Arrays.stream()方法,将int[]转化为IntStream,再用boxed()对其封装转化为Stream<Integer..转载 2022-04-07 00:30:00 · 2175 阅读 · 0 评论 -
Java中的<< 和 >> 和 >>> 详细分析
Java中的<< 和 >> 和 >>> 详细分析转载 2021-09-25 15:59:50 · 212 阅读 · 0 评论 -
java:I/O流
1、I/O流1.1 概念通俗易懂,不解释1.2 分类按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的角色划分为节点流和处理流。Java IO 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。nputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入OutputStream/Writer:转载 2021-09-13 19:34:57 · 153 阅读 · 0 评论 -
Throwable类 -- Exception类 -- 受检查异常 && 运行时异常
文章目录1、异常1.1 Throwable类1.2 被捕获的异常分类2、异常被抛出或捕获后,后面代码是否执行3、哪些异常必须声明并捕获,否则产生编译错误4、throw和throws的区别4.1 为什么使用throw主动抛出异常对象1、异常1.1 Throwable类Throwable 是所有 Java 程序中错误处理的父类 ,有两个子类: Error 和 Exception 。(1)Exception:表示可恢复的例外,出现的问题是可以被捕获的(2)Error:表示由 JVM 所侦测到的无法预原创 2021-09-13 18:45:56 · 450 阅读 · 0 评论 -
java:反射机制
1、反射机制通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。这种动态地获取信息以及动态调用对象的方法称为反射。以下是反射的一般作用:在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断一个类所具有的成员变量和方法在运行时调用任意一个对象的方法生成动态代理:通过 JDK 实现动态代理就使用了反射类 Method 来调用指定的方法public class DebugInvocationHandler implements InvocationHan原创 2021-09-13 18:30:22 · 158 阅读 · 0 评论 -
Java中基本数据类型、包装类
1、 8 种基本数据类型6 种数字类型 :byte、short、int、long、float、double1种字符类型:char1 种布尔型:boolean2、8种基本类型对应的包装类2.1 包装类Byte、Short、Integer、Long、Float、Double、Character、Boolean2.2 常量池Java 基本类型的包装类的大部分都实现了常量池技术。Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类原创 2021-09-13 17:11:55 · 228 阅读 · 0 评论 -
Git:解决Your branch is ahead of ‘origin/master‘ by N commits问题
1 如果你想要保留本地当前改动:git push -u origin master将自己修改的代码推送到远程仓库的master分支origin/master : 一个叫 origin 的远程库的 master 分支HEAD指向当前工作的branch,master不一定指向当前工作的branchgit push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名>git push origin 本地分支A : 远程分支B ,原创 2021-09-11 00:22:31 · 26039 阅读 · 0 评论 -
什么是软件设计中的上游和下游?
1、前言在我们日常工作当中,经常会听到这些词汇,与上游xx对接、升级要保证下游xx兼容性,据我了解啊,很多人还搞不起什么是上游、什么是下游,或者脑袋里很模糊,不会去判断这些。那么搞清楚这些概念,对于我们的软件设计还是很有必要的,为了搞清楚,那么下面我先举几个例子来介绍下:我们的上游的xx系统今天down掉了,导致我们一部分业务没有闭环,需要晚些时候去补偿。我们提供的接口被调用频率过高,爆掉了,导致下游的几个厂商业务阻断1小时。在自然界中,上游和下游一般是指我们生活中的河流流向,如下图所示:例转载 2021-09-03 00:23:37 · 3060 阅读 · 0 评论 -
集合Collection(List、Set、Deque),Map,Comparator与Comparable
1、Collection1.11.2 功能介绍Collection是一个顶层接口,不能被实例化,其功能可分为:a) 根接口Collection的常用子接口List接口实现类:ArrayList、Vector、LinkedListSet接口实现类:HashSet、TreeSetb) 添加功能boolean add(object obj)添加一个元素boolean addAll(Collection c)将集合c的全部元素添加到原集合元素后返回true添加功能永远返回true原创 2021-09-02 20:37:12 · 156 阅读 · 0 评论 -
Kafka基本原理详解(超详细!)
文章目录一、概念理解(1)产生背景(2)Kafka的特性(3)Kafka应用场景(4)Kafka一些重要设计思想二、消息队列通信的模式(1)为什么需要消息队列(2)点对点模式(3)发布订阅模式三、Kafka的架构原理(1)基础架构与名词解释(2)工作流程分析1)发送数据2)保存数据① Partition 结构② Message结构③存储策略3)消费数据一、概念理解Kafka是由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调原创 2021-08-21 16:06:09 · 909 阅读 · 0 评论 -
MacOS中的Kafka安装、启动、使用
1、安装Kafka打开终端执行brew install kafka2、启动2.1 启动zookeepersudo zkServer start 2.2 启动kafkacd /usr/local/Cellar/kafka/ —到kafka安装目录cd 2.8.0 —(查看kafka版本)cd bin./kafka-server-start /usr/local/etc/kafka/server.properties —前台启动kafka(后台启动 末转载 2021-08-21 14:02:13 · 1481 阅读 · 0 评论 -
MacOS中的Kafka安装与启动
1、安装Kafka使用brew安装Kafkabrew install kafka安装完之后,会在/usr/local/Cellar目录下生成kafka和zookeeper两个文件夹kafka安装目录与配置文件路径如下所示,Kafka的默认端口号是9092Kafka的集群管理依赖于ZooKeeper,ZooKeeper的默认端口号是2182# kafka安装目录/usr/local/Cellar/kafka/2.8.0# kafka配置文件目录/usr/local/etc原创 2021-08-21 13:49:46 · 1285 阅读 · 0 评论 -
Jackson序列化和反序列化
1、添加maven依赖可行的依赖 <!-- Jackson序列化和反序列化 --><dependency> <groupId>com.dianping.dpsf</groupId> <artifactId>dpsf-net</artifactId> <version>2.10.4.1</version></dependency>在添加依赖的时候碰到过坑,下原创 2021-08-16 13:37:02 · 728 阅读 · 0 评论 -
Fastjson
1、简介1.1 Fastjson 简介Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。Fastjson 源码地址:https://github.com/alibaba/fastjsonFastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start原创 2021-08-15 16:27:18 · 726 阅读 · 0 评论 -
自动装箱与自动拆箱
1、什么是装箱?什么是拆箱?在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:Integer i = new Integer(10);而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:Integer i = 10;这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:Integer i = 10;转载 2021-08-12 20:07:58 · 647 阅读 · 0 评论 -
匿名类、匿名函数、函数式接口
1、函数式编程函数是一个数学上的概念,表示一个集合到另一个集合的映射关系,这种关系在编程的时候通过箭头函数 (input)->{expression} 来表示,就是函数式编程箭头的左边表示输入集合右边表示整个函数的结果2、函数式接口函数式接口是只有一个抽象方法的接口,因此使用labmda函数重写方法的前提是该接口中有且仅有一个需要重写的抽象方法通过匿名函数实现通过匿名类实现java的Runnable接口就是一个函数式接口,在Runable接口中只有一个抽象方法(那就是run()原创 2021-08-09 23:50:47 · 622 阅读 · 0 评论 -
回调函数、钩子函数
1、回调函数1.1 下定义回调函数是一个通过函数指针调用的函数。1.2 好处可以把调用者与被调用者分开。调用者不关心谁是被调用者,它需知道的,只是存在一个具有某种特定原型(如参数个数和类型)、某些限制条件(如返回值为 int )的被调用函数。1.3 例子https://blog.csdn.net/gaohua106/article/details/1034257402、钩子函数2.1 下定义钩子函数实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的原创 2021-08-05 20:20:49 · 659 阅读 · 0 评论 -
工具类的详解
1、工具类1.1 定义工具类是为了提供一些通用的、某一非业务领域内的公共方法,不需要配套的成员变量,仅仅是作为工具方法被使用。所以将它做成静态方法最合适,不需要实例化,能够获取到方法的定义并调用就行。1.2 不实例化的原因如果要实例化一个工具类,就需要一定的内存空间,工具类提供的是静态方法,通过类就能调用,所以不必浪费内存去实例化工具类对象。1.3 做法Java项目中使用的工具类非常多,比如JDK自己的工具类java.lang.Math、java.util.Collections等都是我们经常用原创 2021-08-02 17:26:59 · 15925 阅读 · 0 评论 -
thrift-语法
1.什么是thrift thrift是一个软件框架,⽤来进行可扩展且跨语言的服务的开发。它结合了功能强⼤的软件堆栈和代码⽣成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间⽆缝结合的、高效的服务。他是跨语言的、支持多种协议、适用各种应用场景。2.Thrift 的组成(1)类型系统以及 IDL 编译器:负.原创 2021-08-02 13:20:57 · 985 阅读 · 0 评论 -
运维面试中提到的熔断和降级
1 优化策略如果把缓存和异步看作提高系统的战斗力,那限流和降级就是在防御。作为运维人员有时候太过于注重防守,比如缓存,池化,异步化,负载均衡,消息队列。这一些是为了增加系统的容量。而限流和降级则关心的是一旦达到了系统的瓶颈时候怎么办, 更看重稳定性;2 限流,降级,熔断,隔离限流顾名思义,需要对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源(限流需要结合压测,了解系统的最高水位,也是在实际开发中应用最多的一种稳定性保障手段)。各类限流算法:计数转载 2021-08-01 15:55:35 · 330 阅读 · 0 评论 -
java参数后面跟三个点是什么意思
1、....的作用在形式参数里面出现,表示可变数组参数,即传入的参数可以随意多个,不论传多少个参数都被放到一个数组里面。用…的话:传参数时可不传。在方法里取时,s是一个数组,如果调用时什么都没有传,那么s的长度就是0。传参时传可传,可以是一个个并列地传,也可以直接是一个数组。 在方法里取时,s是一个数组,调用时传了几个,s的长度就是几。类型后面三个点(比如 String…),是从Java 1.5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟...,表原创 2021-07-29 12:23:37 · 5895 阅读 · 0 评论 -
Java的向上转型(多态)与向下转型
Java的向上转型与向下转型Java中父类强制转换成子类的原则原创 2021-07-27 22:48:04 · 225 阅读 · 0 评论 -
对范型深刻又通俗易懂的理解
文章目录来源0、范型的好处1、范型通配符1.1 JAVA泛型通配符? T K V E1.2 ?和T区别1.3 方法中为什么需要 T 修饰呢1.4 通配符只是个约定的大写字母1.5 同时使用多个范型参数,如K,V2、普通的非泛型类 Class2.1 Class类介绍2.2 Class类的获取3、T 与 Class< T >以及Class<?>的理解3.1 Class< T >和Class< ? >的区别3.2 如何创建一个 Class< T >原创 2021-07-17 23:58:32 · 489 阅读 · 0 评论 -
java语法糖
文章目录1、`::`双冒号操作符1.1 使用方式1.2 举例2、`->`2.1 Java 8 函数式接口2.1.1 函数式接口2.1.2 函数式接口实例2.1.3 链接2.2 Java Lambda 表达式2.2.1 特性2.2.2 语法2.2.3 举例2.2.4 变量作用域2.2.5 链接2.3 与`foreach()`搭配更美味3 Foreach3.1 特性3.2 语句格式:3.33.4 举例3.4.13.4.24、list.stream().map().collect(Collectors.to原创 2021-07-11 17:04:32 · 2055 阅读 · 1 评论 -
【Java 8 新特性】JBiConsumer跟BiFunction的区别详解
文章目录1、Comsumer和BiConsumer方法1.1 联系1.2 方法详解1.3 举例1.3.1 Consumer1.3.2 BiConsumer2、Function和BiFunction2.1 联系2.2 方法详解2.3 举例2.3.1 Function2.3.2 BiFunction1、Comsumer和BiConsumer方法1.1 联系首先看一下两个接口,几乎差不多,BiConsumer可以看做Consumer的增强, 区别在于BiConsumer方法的参数多了一个。1.2 方法详转载 2021-07-10 17:45:41 · 1093 阅读 · 0 评论 -
JVM的四种内存屏障
文章目录1、为什么要有内存屏障1.1 解释一1.2 解释二2、硬件上面的内存屏障3、Java里面的四种内存屏障1、为什么要有内存屏障1.1 解释一为了解决cpu,高速缓存,主内存的带来的的可见性和重序性问题。我们都知道计算机运算任务需要CPU和内存相互配合共同完成,其中CPU负责逻辑计算,内存负责数据存储。CPU要与内存进行交互,如读取运算数据、存储运算结果等。由于内存和CPU的计算速度有几个数量级的差距,为了提高CPU的利用率,现代处理器结构都加入了一层读写速度尽可能接近CPU运算速度的高速缓存来原创 2021-05-02 18:05:51 · 5286 阅读 · 3 评论 -
运行时数据区域、Class常量池、运行时常量池、字符串常量池
文章目录1、引言2、Class常量池3、运行时常量池3.1 基本类型的包装类3.2 String.intern()4、字符串常量池4.1 直接用双引号创建字符串4.2 使用new关键字创建字符串4.3 组合4.4 总结1、引言2、Class常量池当 .java文件被编译成 .class文件后,在类加载时,将.class文件提取在方法区的Class文件中,在Class文件中生成我们所说的Class常量池。jvm的方法区里存放着类的版本,字段,方法,接口和常量池,常量池里存储着字面量和符号引用原创 2021-05-14 22:38:05 · 2051 阅读 · 11 评论 -
编译、类加载、解释
wu原创 2021-05-14 19:21:39 · 1327 阅读 · 1 评论 -
双向队列Deque
文章目录1、Deque(double ended queue)1.1 定义1.2 Deque的三种用途1.3 特点1.4 方法2、栈2.1 栈的两种实现方法2.2 Deque与Stack对应的接口3、队列3.1 队列的两种实现方式3.2 Deque与Queue对应的接口1、Deque(double ended queue)1.1 定义Deque是JDK 1.6出的一个新接口,它是一个双端队列接口,可以在首尾插入或删除元素Deque接口继承自Queue接口,Deque的实现类是LinkedList原创 2021-05-14 15:55:34 · 774 阅读 · 2 评论 -
垃圾收集、垃圾收集算法、垃圾收集器
文章目录1、垃圾收集Garbage Collection(GC)1.1 需要GC的内存区域1.2 GC的对象1.3 什么时候触发GC1.4 GC做了什么事2、垃圾收集算法2.1 标记-清除(Mark-Sweep)算法2.2 标记-压缩(Mark-Compact)算法2.3 复制(Copying)算法2.4 分代收集(Generational Collection)算法3、垃圾收集器3.1 Serial收集器、Serial Old收集器3.2 ParNew收集器3.3 Parallel收集器3.3.1 Par原创 2021-05-13 22:50:36 · 716 阅读 · 1 评论 -
==和equals的区别,为什么要同时重写equals和hashCode?
1 基础数据类型基础数据类型只有==,没有equals方法,比较的是值2 引用数据类型==比较的是引用类型对象在内存中存放的地址。准确的说是堆内存中的地址equals() 是基类Object自带的方法,我们写的每个类都会有这个默认的方法,你可以重写它,也可以不重写2.1 不重写equals()当我们自己写的类没有重写equals方法时,equals等同于==,比较的是引用类型对象在内存中存放的地址class A{ int a=0; public A(int a){ thi原创 2021-05-13 15:14:31 · 578 阅读 · 3 评论 -
内存溢出、内存泄漏;强软弱虚引用
1、内存泄漏内存泄露 memory leak,是指程序在申请内存后,没释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光memory leak会最终会导致out of memory!2、内存溢出内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出3、强引用、软引用、弱引用、虚引用在JDK1.2以前原创 2021-05-10 20:48:17 · 734 阅读 · 3 评论 -
线程、线程池、ThreadLocal
文章目录1、进程与线程1.1 进程(process)1.2 线程(thread)1.2.1 单线程与多线程1.3 区别1.4 举例2、线程2.1 线程的5种状态2.2 线程的状态流程图2.2.1 初始状态2.2.2 可运行状态2.2.3 运行状态2.2.4 .死亡状态2.2.5 阻塞状态2.2.6 等待队列(本是Object里的方法,但影响了线程)2.2.7 锁池状态2.3 线程中的方法2.3.1 调用run()方法或main()方法2.3.2 调用线程自身的sleep()方法或其他线程的join()方法2原创 2021-05-04 20:51:42 · 1538 阅读 · 0 评论 -
Synchronized、Lock、volatile
文章目录1、锁1.1 四种锁类型1.2 加锁的两种方式2、Synchronized2.1 三种应用场景2.2 synchronized实现原理2.2.1 同步代码块的实现原理2.2.2 同步方法的实现原理2.3 monitorenter和monitorexit的分析2.4 synchronized锁升级:偏向锁 → 轻量级锁 → 重量级锁3、Lock3.1 ReentrantLock3.2 Lock接口源码解析3.2.1 lock()3.2.2 tryLock()4、Synchronized和Lock的区别原创 2021-05-03 20:40:36 · 557 阅读 · 0 评论 -
java中的全局变量、局部变量与static
文章目录1、java中的变量类型1.1、Java局部变量1.2、实例变量1.3、类变量(静态变量)2、C++中的变量类型2.1、static全局变量与普通的全局变量2.2、static局部变量和普通局部变量2.3、static函数与普通函数1、java中的变量类型类变量:独立于方法之外的变量,用 static 修饰。实例变量:独立于方法之外的变量,不过没有 static 修饰。局部变量:类的方法中的变量。public class Variable{ static int allClic原创 2021-05-03 14:43:58 · 1100 阅读 · 0 评论 -
HashMap、HashTable、ConcurrentHashMap、HashSet底层原理
1、哈希表哈希表(hash table)也叫散列表,是一种非常重要的数据结构,我们先来看一下其他数据结构的特点。数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结点间的引用即可,时间复杂度为O(1),而查找操作需要遍历链表逐一进行比对,复杂度为O(原创 2021-05-02 21:19:33 · 831 阅读 · 0 评论 -
Java:对象的序列化、反序列化
1、什么是对象的序列化(Serialization)“序列化”是一种把对象的状态转化成字节流的机制,“反序列”是其相反的过程,把序列化成的字节流用来在内存中重新创建一个实际的Java对象。这个机制被用来“持久化”对象。通过对象序列化,可以方便的实现对象的持久化储存以及在网络上的传输。大致的过程如下图所示:对象被转换成“字节流”后可以存入文件,内存,亦或者是数据库内进行持久化保存。然后通过“反序列化”可以把“字节流”转换成实际的Java对象。对象的序列化是与平台无关的,因此在一个平台上被“序列化”的转载 2021-04-25 22:00:29 · 749 阅读 · 0 评论 -
同步、异步 and 阻塞、非阻塞
1、同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。1.1 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。1.2 异步异步的概念和同步相对。当一个异步过程调用发出后,这个调用就直接返回了,调用者不能立刻得到结果,实际处理这个调用的执行部件在完成操作后,通过状态、通知或回调来通知调用者。原创 2021-04-25 21:06:34 · 233 阅读 · 0 评论 -
Java:float/double取值范围与精度、BigDecimal
0、基本数据类型1、浮点数的表示在同等位数的情况下,浮点数可表示的数值范围比整数的大;浮点数无法精确表示其数值范围内的所有数值,只能精确表示可用科学计数法m*2e表示的数值而已;(如0.5的科学计数法是2-1,则可被精确存储;而0.2则无法被精确存储)浮点数不仅可表示有限的实数,还可以表示有限的整数。1.1 浮点数结构要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识0和1,你想表示小数,你要机器认识小数点这原创 2021-04-24 14:03:33 · 1103 阅读 · 0 评论