![](https://img-blog.csdnimg.cn/20201204205932480.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础知识
面向对象特性,集合,IO,多线程,JVM_GC
jone1024
真正的失败,不是倒下,而是不再站起来了
展开
-
进制转换_负数的补码
进制转换问题//1、把⼀个⼗进制数转为八进制//思路:用do{}while();循环,保证str里有数字//每次循环num先取余8拼到str里,之后num整除8赋值给自己,直到num到0为⽌。public static String decToOct(int num) { if (num < 0) { // -10的二进制是: 1_777_777_777_777_777_777_766 // 10的八进制原创 2020-12-26 16:32:19 · 695 阅读 · 0 评论 -
线程死锁_hashMap参数
多线程1、模拟一个线程死锁package com.m.sort;public class Test2 { private static final Object obj1 = new Object(); private static final Object obj2 = new Object(); public static void main(String[] args) { new Thread(()->{ synchr原创 2020-12-26 16:30:14 · 84 阅读 · 0 评论 -
String线程安全性
String StringBuffer 和 StringBuilder 的区别是什么?Java 平台提供了两种类型的字符串:String和StringBuffer / StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer和StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是JDK 1.5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线原创 2020-12-12 09:23:25 · 4404 阅读 · 1 评论 -
IntegerCache与Integer
int 和Integer 有什么区别?Java是一个近乎纯面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从JDK 1.5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。Java 为每个原始类型提供了包装类型:原始类型: boolean,char,byte,short,int,long,float,double原创 2020-12-12 08:44:49 · 116 阅读 · 0 评论 -
Java中的float和double
float f=3.4是否正确?答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4或者写成float f =3.4F。 float f2 = 3.1415926999999F; System.out.println(f2); //3.1415927//存在精度损失 double f =转载 2020-12-12 08:16:12 · 628 阅读 · 0 评论 -
分而治之的java类ForkJoin
一个对任务分而治之的java类ForkJoin详解在古代,皇帝要想办成一件事肯定不会自己亲自去动手,而是把任务细分发给下面的大臣,下面的大臣也懒呀,于是把任务继续分成几个部分,继续下发,于是到了最后最终负责的人就完成了一个小功能。上面的领导再把这些结果一层一层汇总,最终返回给皇帝。这就是分而治之的思想,也是我们今天的主题ForkJoin。一、简介从JDK1.7开始,Java提供ForkJoin框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。转载 2020-12-11 12:23:01 · 103 阅读 · 0 评论 -
switch的long转int-精度损失-枚举类型
switch支持int和枚举类型,可以用char,byte,short,int类型,jdk1.7中支持string类型,但是不支持long类型Incompatible types. Found: 'boolean', required: 'char, byte, short, int, Character, Byte, Short, Integer, String, or an enum因为byte取值范围-128~127int的取值范围为(-2147483648~2147483647)原创 2020-12-11 10:35:12 · 925 阅读 · 0 评论 -
对String类型要关联(HAS-A)不要继承(IS-A)
对String类型要关联(HAS-A)不要继承(IS-A)模型元素之间的连接关系有:关联Association、概化Generalization、依赖Dependency、实现Realization、聚合Aggregation、组合Combination。其中,聚合和组合是关联的一种特殊形式。(1)关联Association:用于描述模型元素之间的连接,只要两个模型元素之间存在相互通信的关系,它们之间就存在关联关系。关联关系可以是单向的,但一般为双向的。(2)概化Generalization:又称转载 2020-12-10 10:53:18 · 273 阅读 · 0 评论 -
Maven之scope-runtime
Maven之scope-runtime当时我在配置mybatis时,按照别人方式在pom文件引入包,导致@MapperScan注解找不到。一种寻找办法解决中简单介绍下runtimeruntime 是运行的意思。指的是直接在运行时所需要的包,而非在编译时等时候需要的包。<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boo原创 2020-12-09 16:47:49 · 3558 阅读 · 1 评论 -
牛客网Java评估题
牛客网 Java 工程师能力评估 题转载原文地址:查看原文牛客网免责声明:本博客为学习笔记,如有侵权请联系删除(1)下面有关 JVM 内存,说法错误的是?程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的虚拟机栈描述的是 Java 方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的方法区用于存储 JVM 加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的原则上讲,所有的对象都在堆区转载 2020-12-04 22:45:18 · 263 阅读 · 0 评论 -
AQS
AQS第一次听说AQS,是滴滴的电话面试,之前毫无了解。后来看了几篇博客,也是云里雾里。后来看源码,事半功倍。现在做一些简单的总结。J.U.C是基于AQS实现的,AQS是一个同步器,设计模式是模板模式。核心数据结构:双向链表 + state(锁状态)底层操作:CASpublic final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLU转载 2020-12-03 23:41:38 · 133 阅读 · 0 评论 -
final的多线程场景与 finally finalize的区别
final finally finalize的区别这三个名词长的非常像,但其实他们并没有什么关联关系。finalfinal是保证类和变量不被修改,JDK的很多类都被修饰成了final,比如String, 这是平台的一种自我保护机制。finallyfinally是确保某些操作一定被执行,比如关闭JDBC的连接。finalizefinalize是Object类的一个方法,他的作用是确保对象在被垃圾回收之前完成特定资源的释放,但是finalize这种机制已经不推荐使用了,JDK9之后已经原创 2020-08-28 17:37:48 · 105 阅读 · 0 评论 -
short转换byte
java数据类型转换 long a = 800; //long是64位二进制数 int b = (int)a; //int是32位二进制数 short c = (short)b; //short类型是16位二进制数,0000 0000 0000 0000 byte d = (byte)c; //byte类型是8位二进制数,0000 0000 System.out.println(a); System.out.println(b); System.ou原创 2020-06-25 09:10:18 · 3760 阅读 · 0 评论 -
计数排序_数组与集合时间比较
计数排序_数组与集合时间比较### Integer []与ArrayList比较package com.m.demo;import java.util.ArrayList;import java.util.List;import java.util.Random;public class Test1 { public static void main(String[] args) { List<Integer> list = new ArrayList<Integ原创 2020-11-22 10:37:03 · 86 阅读 · 0 评论 -
插入排序与二分查找与CopyOnWrite 写时复制思想
插入排序与二分查找package com.m.test;import java.lang.reflect.Constructor;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Random;import java.util.concurrent.CopyOnWriteArrayList;public class Test2 { public st原创 2020-11-14 11:01:52 · 55 阅读 · 0 评论 -
java中Map遍历的四种方式
java中Map遍历的四种方式在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方式去遍历。方法一:在for循环中使用entries实现Map的遍历:/*** 最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */Map <String,String>map = new HashMap<String,String>();map.put("熊大",转载 2020-11-13 23:58:19 · 76 阅读 · 0 评论 -
消息队列与生产消费者模型
消息队列与与生产者消费者模型消息队列package com.m.test;import java.util.LinkedList;/** * 消息队列 * * @Author yzx */public class Queue<T> { private LinkedList<T> list = new LinkedList<T>(); private static final Integer MAX_SIZE = 10; pr转载 2020-11-11 15:38:20 · 1080 阅读 · 0 评论 -
用google 提供的 jar实现二维码
步骤1第一步首先创建一个普通的 Maven 项目,然后要实现二维码功能,我们肯定要使用别人提供好的 Jar 包,这里我用的是 google 提供的 jar,pom.xml 文件配置如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"转载 2020-11-10 08:14:58 · 176 阅读 · 0 评论 -
Java反编译工具汇总
2020年支持java8的Java反编译工具汇总大多商业软件,会对程序进行加密、加壳等安全措施以防范软件被破解,从而使得反编译越来越难。反编译是一个对目标可执行程序进行逆向分析,从而得到源代码的过程。尤其是像Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。我们知道,在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大。今天我们盘点一下目前仍然可用的、相对功能很强大的Ja转载 2020-10-30 20:52:18 · 6280 阅读 · 1 评论 -
稳定的算法用于对象排序
稳定的算法用于对象排序插入与归并等,稳定算法用于对象排序插入排序package com.m.algorithm;import java.util.Arrays;public class Test { /** 深入学习排序算法的思路 * 冒泡 选择 * * 插入(二分) O(n^2) 归并(多路) * * 希尔 堆排 快排 * * 计数 桶排 基数 * * * @param args */ public static void原创 2020-10-30 11:09:05 · 114 阅读 · 0 评论 -
C语言按位运算
按位运算<<:左移 左边最高位丢弃,右边补齐0>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1>>>:无符号右移 无论最高位是0还是1,左边补齐0面试题: 请用最有效率的方式写出计算2乘以8的结果? 2 * 8 2 << 3...原创 2020-10-20 15:15:50 · 68 阅读 · 0 评论 -
链表排序之快排与归并(递归与非递归)
链表排序之快排与归并(递归与非递归)1.对链表进行快速排序以【4,2,5,3,7,9,0,1】为例,我们来模拟一趟快排的过程。**1、**初始化时,i指向链表首元素4;j = i +1,指向2。基准数字为当前i 指向的数字:4。j42537901i**2、**随后开始循环,j 当前指向2,因为2小于4,所以要把2移动到前面去。按照我们的算法步骤操作:i ++,首先 i 向后移动一位,指向2swap(i, j) ,随后原创 2020-10-15 21:36:44 · 183 阅读 · 0 评论 -
LeetCode题解——四数之和
LeetCode题解——四数之和我的LeetCode代码集:https://github.com/cnamep001/LeetCode原题链接:https://leetcode-cn.com/problems/4sum/description/思路一:用Set集合来过滤重复元素用一个哈希表存储数组中两个数的和,以及形成这个和可能的索引组合的List。虽然我们的Set集合能够自动帮我们过滤掉重复的List,但是过滤的前提是我们得到的List必须是有序的。比如**(0, 1, -1, 0)和(0,原创 2020-10-13 11:55:03 · 128 阅读 · 0 评论 -
把中台说清楚
把中台说清楚缘起百度指数搜索“中台”,可以发现,中台一词前几年几乎都没有搜索,反倒是今年5月21号开始蹭蹭往上涨!百度指数仔细搜索了一下原来5月21号腾讯召开了全球数字生态大会,会议上腾讯高级副总裁汤道生提出“开放中台能力,助力产业升级”。汤道生介绍,腾讯技术委员会正在推动“开源协同”和“自研上云”,通过技术整合实现高效的能力交付。同时,基于在即时通讯、社交、游戏等优势领域中的技术积累,腾讯将进一步开放业界领先的包括用户中台、内容中台、应用中台等在内的数据中台,以及包括通信中台、AI中台、安全中台转载 2020-10-12 23:20:09 · 606 阅读 · 0 评论 -
DNS 原理入门
DNS 原理入门DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNS。一、DNS 是什么?DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69。转载 2020-10-11 18:00:44 · 234 阅读 · 0 评论 -
互联网协议(二)
互联网协议入门(二)上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想。这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的。互联网协议入门(二)(接上文)七、一个小结先对前面的内容,做一个小结。我们已经知道,网络通信就是交换数据包。电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信。数据包的结构,基本上是下面这样:发送这个包,需要知道两个地址:* 对方的MAC地址* 对方的IP地址有转载 2020-10-11 17:42:00 · 132 阅读 · 0 评论 -
互联网协议入门(一)
互联网协议入门(一)我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。下面就是我的学习笔记。因为这些协议实在太复杂、太庞大,我想整理一个简洁的框架,帮助自己从总体转载 2020-10-11 17:34:52 · 337 阅读 · 0 评论 -
进程间通信的方式有哪些?
进程间通信的方式有哪些?1、进程间通讯方式有:管道,信号,信号量,消息队列,共享内存,套接字共六种2、管道:管道分为有名管道和无名管道,其中无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,一般用于两个不同进程之间的通信。有名管道也是一种半双工的通信方式,但它允许无亲缘关系进程间的通信。3、信号:信号是一种比较复杂的通信方式,信号产生的条件:按键、硬件异常、进程调用kill函数将信号发送给另一个进程、用户调用kill命令将信号发送给其他进程,传递的消息比较转载 2020-10-11 17:25:50 · 3601 阅读 · 0 评论 -
链表排序之快排与归并
链表排序之快排与归并1.对链表进行快速排序以【4,2,5,3,7,9,0,1】为例,我们来模拟一趟快排的过程。**1、**初始化时,i指向链表首元素4;j = i +1,指向2。基准数字为当前i 指向的数字:4。j42537901i**2、**随后开始循环,j 当前指向2,因为2小于4,所以要把2移动到前面去。按照我们的算法步骤操作:i ++,首先 i 向后移动一位,指向2swap(i, j) ,随后交换 i、j 位原创 2020-10-11 14:46:40 · 210 阅读 · 0 评论 -
LeetCode题解——字符串转整数(atoi)
LeetCode题解——字符串转整数(atoi)我的LeetCode代码集:https://github.com/cnamep001/LeetCode原题链接:https://leetcode-cn.com/problems/string-to-integer-atoi/description/题目描述:知识点:字符串思路:顺序遍历字符串,根据题意读取整数对于这一题来说,难点不在算法的实现上,难点在理解题意并正确处理各种边界或者特殊情况上。(1)如果第一个非空字符是正号或负号,选取该符原创 2020-10-11 10:41:43 · 103 阅读 · 1 评论 -
UUID是什么 ?
UUID是什么 ?UUID 是指Universally Unique Identifier,翻译为中文是通用唯一识别码,UUID 的目的是让分布式系统中的所有元素都能有唯一的识别信息。如此一来,每个人都可以创建不与其它人冲突的 UUID,就不需考虑数据库创建时的名称重复问题。定义UUID 是由一组32位数的16进制数字所构成,是故 UUID 理论上的总数为1632=2128,约等于3.4 x 10123。也就是说若每纳秒产生1百万个 UUID,要花100亿年才会将所有 UUID 用完转载 2020-10-10 20:54:28 · 8610 阅读 · 0 评论 -
堆排序与选择排序的关联
堆排序与选择排序的关联一、简单选择排序基本思想:假设排序表为 L[1…n] ,第i趟排序即从L[i,n] 中选择关键字最小的元素与 L(i) 交换,每一趟排序可以确定一个元素的最终位置,这样经过 n-1 趟排序就可以使整个排序表有序。选择排序的执行过程为每次循环遍历数组找出最小(或最大)的数,将其放在数组的有序数列的最后面,每次第i次遍历查找要执行N-i个单位时间,然后要执行N次,故时间复杂度为O(N^2),很简单,比较适合较小的数列的排序。代码如下:public static v原创 2020-10-10 20:31:39 · 229 阅读 · 1 评论 -
递归原则
递归1、递归次数不要太多,太占内存2、递归一定要有出口3、构造方法不能递归使用三种方法实现实例:package test17_digui;import java.util.Scanner;/* * 题目:有一对兔子,从出生后第3个月起每个月都生1对兔子,小兔子第三个月后也可以生一对兔子, * 假如兔子不死,在指定月份时刻一共可以有多少对兔子 * * 分析: * 第一个月:1 * 第二个月:1 * 第三个月:2 * 第四个月:3 * 第五个月:5原创 2020-10-10 18:59:57 · 178 阅读 · 0 评论 -
题解LeetCode——回文数
题解LeetCode009——回文数我的LeetCode代码:https://github.com/cnamep001/LeetCode原题链接:https://leetcode-cn.com/problems/palindrome-number/description/题目描述: 知识点:字符串、集合、数学思路一:翻转数字,判断是否和原数字相等翻转过程中注意越界的情况,如果越界,直接返回false。事实上如果翻转之后越界了,肯定就不会和原数字相等了,我们在代码实现时无需考虑这种情况。原创 2020-10-09 15:20:38 · 100 阅读 · 0 评论 -
字符编码ASCII,Unicode 和 UTF-8
字符编码笔记:ASCII,Unicode 和 UTF-8今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料。这个问题比我想象的复杂,午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。我尽量写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。一、ASCII 码我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制转载 2020-10-08 23:31:08 · 103 阅读 · 0 评论 -
汇编语言解读
汇编语言入门教程学习编程其实就是学高级语言,即那些为人类设计的计算机语言。但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-idzDbwHj-1602164510075)(http://www.ruanyifeng.com/blogimg/asset/2018/bg2018012204.png)]计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就转载 2020-10-08 21:43:05 · 2338 阅读 · 2 评论 -
HashMap解析
HashMap源码解析感谢Neal Gafter、Arthur van Hoff、Josh Bloch、Doug Lea为我们提供了HashMap这一工具类,方便了诸多Java开发者的开发工作。看再多的源码解析,自己不亲身去阅读源码,都是徒劳无功。注释分析为了我们能轻松地阅读源码,JDK的开发者们已经为我们准备了许多详尽的注释,阅读这些注释对我们理解代码起着事半功倍的效果,那么我们就先来看看HashMap在JDK8中的注释吧!Hash table based implementation of t转载 2020-10-08 13:00:05 · 282 阅读 · 0 评论 -
哈希碰撞与生日攻击
SQL语言功能:数据操作语言,DML,操作数据表里的数据的,create,转载 2020-10-06 12:07:21 · 751 阅读 · 0 评论 -
GC与软引用&弱引用
垃圾回收GC引出的引用类型分类引用类型被垃圾回收用途生存时间强引用从来不会对象的一般状态JVM停止运行时终止软引用当内存不足时对象缓存内存不足时终止弱引用正常垃圾回收时对象缓存垃圾回收后终止虚引用正常垃圾回收时跟踪对象的垃圾回收垃圾回收后终止(一) 软引用(SoftReference)如果一个对象只具有软引用,则内存空间充足时,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就原创 2020-10-03 23:37:45 · 357 阅读 · 0 评论 -
面向对象与接口和静态
流行的编程思维_面向对象-1问题:java面向对象的特征有哪些?面向对象与面向过程的区别是什么?基本数据类型与引用类型的区别有哪些?方法重载和方法重写的区别是什么?说到面向对象,就得和比较一下面向过程面向过程是结构化开发,面向功能划分的软件结构从上到下,按步执行,最小的粒度是方法代码一次成型,后续修改非常麻烦,制约了软件的可维护性和可扩展性面向对象开发把软件系统看成各种对象的集合系统结构稳定,由于java是单继承,可以多实现接口(特殊的抽象类)就原创 2020-09-16 15:42:25 · 53 阅读 · 0 评论