
Java
文章平均质量分 74
慕容野野
这个作者很懒,什么都没留下…
展开
-
SSDP协议
SSDP(Simple Service Discovery Protocol)简单服务发现协议,用于发现局域网里面的设备和服务。SSDP消息分为设备查询消息、设备通知消息两种,通常情况下,使用更多地是设备查询消息。1、设备查询消息:格式例子如下:M-SEARCH * HTTP/1.1HOST: 239.255.255.250:1900MAN: “ssdp:discover”MX: 5ST: ssdp:all第一行 消息头,固定;第二行 HOST对应的是广播地址和端口,239.255.2原创 2022-02-24 12:08:05 · 8656 阅读 · 0 评论 -
Modbus
一、简介Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。二、报文先来简单分析一条MODBUS报文,例如:01 06 00 01 00 17 98 04 01原创 2022-02-24 12:02:36 · 3630 阅读 · 0 评论 -
HashMap源码分析
Hash源码一、Hash表二、hash值怎么计算2.1 为什么用hash计算2.2 计算数组下标三、如何添加键值对四、hash碰撞|冲突五、如何通过key找value六、为什么需要加载因子6.1 为什么需要加载因子?6.2 什么时候扩容呢?6.3 扩容会带来什么问题呢?6.4 hashMap java8有什么改进一、Hash表拿hashMap举例,因为hashMap是hash表实现的,在jdk1.8之前,都是通过数组+链表来实现的hashmap,数组就是一个桶,存储元素和查找都要先找到桶的位置,就像是原创 2021-06-14 22:33:21 · 389 阅读 · 2 评论 -
ThreadLocal原理分析
ThreadLocal初步理解ThreadLocal一、ThreadLocal原理总结二、源码分析2.1 存储2.2 取值2.3 移除初步理解ThreadLocalThreadLocal是线程本地变量,是隔离的思想来解决线程安全问题的一种方法ThreadLocal是HashMap思想在多线程的应用ThreadLocal是作为Key为ThreadLocalMap获取数据而备一、ThreadLocal原理总结大致原理总结:在每个Thread中包含一个ThreadLocalMap,ThreadLoc原创 2021-06-14 22:31:12 · 278 阅读 · 0 评论 -
for-each原理
for-each原理原创 2021-06-04 11:34:14 · 58 阅读 · 0 评论 -
Java类加载器
类加载器一、类加载器ClassLoader类图二、类加载器运用三、PathClassLoader源码四、DexClassLoader源码五、PathClassLoader和DexClassLoader区别一、类加载器ClassLoader类图二、类加载器运用三、PathClassLoader源码四、DexClassLoader源码五、PathClassLoader和DexClassLoader区别唯一区别:dex优化后的odex的一个存储路径不同DexClassLoader:如下图,第原创 2021-06-04 11:32:45 · 149 阅读 · 0 评论 -
Https原理
目录HTTP缺点HTTPS的安全性数据保密性一、连接建立过程二、通信过程数据完整性通信双方身份的真实性抓包原理HTTP缺点HTTP也有几个较为显著的缺点:通信使用明文,内容容易被抓包泄露无法证明报文的完整性,所以有可能遭到篡改不验证通信方的身份,因此有可能遭遇伪装HTTPS的安全性正是由于这几个显著的缺点存在,所以HTTPS应运而生。https俗称超文本传输安全协议。是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详原创 2021-01-25 11:37:01 · 617 阅读 · 0 评论 -
算法:删除排序数组中的重复项 java实现
Leecode 26. 删除排序数组中的重复项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数原创 2020-12-31 13:21:20 · 110 阅读 · 0 评论 -
算法:删除排序数组中的重复项 II java实现
Leecode 80. 删除排序数组中的重复项 II给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝原创 2020-12-31 13:13:58 · 138 阅读 · 0 评论 -
算法:数组中找出重复的数字 Java实现
给的数组中找出重复的数字?方法一:set.add(num) 返回值是boolean类型,来实现巧妙去重class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<>(); for (int num : nums) { if (!set.add(num)) return原创 2020-12-31 12:45:38 · 633 阅读 · 0 评论 -
算法:两数之和 Java实现
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]可以一次循环搞定,在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我原创 2020-12-31 12:11:07 · 168 阅读 · 0 评论 -
单例模式-线程安全的5种实现
前言单例模式是 Java 中最简单设计模式之一。在运行期间,保证某个类只创建一个实例,在实际项目中,还要考虑线程的安全性,面试的时候很多面试官容易问到这个问题,有几种实现方式,分别如何保证线程安全,小编直接上各种实现方案的线程安全写法:一、懒汉式特点:延迟加载使用场景:如果开销比较大,希望用到时才创建,就要考虑延迟实例化public class Singleton1 { //volatile 为了防止指令重排序 private static volatile Singleton1原创 2020-12-18 16:28:49 · 994 阅读 · 2 评论 -
Java垃圾回收机制-可达性分析算法教你GC如何判断对象的存活
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式==标记文本==插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学原创 2020-12-18 16:12:04 · 736 阅读 · 1 评论 -
为什么String是不可变的
先看一段测试代码: @Test public void testStringFinal() { String str = new String("abc"); System.out.println(str.hashCode()); str += "d"; System.out.println(str.hashCode()); str += "e"; System.out.println(st.原创 2020-12-17 18:33:32 · 107 阅读 · 0 评论 -
==和equals区别
== 比较内存地址equals 比较存放的内容字符序列是否相等String str1 = "a"+"b"+"c";//常量池String str2 = "abc";//常量池String str3= new String("abc");//堆内存str1==str2 truestr1==str3 falsestr2==str3 falsestr1.equals str2 truestr1.equals str3 truestr2.equels str3 truestr1....原创 2020-12-17 17:59:46 · 90 阅读 · 0 评论 -
什么是匿名内部类?为什么必须用final
什么是匿名内部类? 说白了就是没有名字的接口1、匿名内部类中,没有构造函数,但是可以用构造代码块;2、局部变量 必须定义成final的才能使用内部类访问外部类属性为什么必须用final?因为内部类中的属性的改变不会影响外部的形参,然而,这从程序员角度来看是不可行的,站在程序员的角度看,这两个根本就是一个,如果内部类改变了,而外部方法的形参却没有改变是难以理解和不可接受的,为了保持参数的一致性,规定使用final来避免形参的不可变...原创 2020-12-17 17:29:50 · 614 阅读 · 0 评论 -
单例有几种实现方式,如何保证线程安全
直接上各种实现方案的线程安全写法:一、懒汉式特点:延迟加载public class Singleton1 { //volatile 防止指令重排序 private static volatile Singleton1 sInstance; private Singleton1() { } public static Singleton1 getInstance() { if (sInstance == null) { //第一次校验原创 2020-12-17 13:37:17 · 1097 阅读 · 2 评论 -
Java内存分配是怎样的?哪些区域是线程共享的?常量保存在什么区域?局部变量和成员变量呢?
一:Java内存分配是怎样的?哪些区域是线程共享的?常量保存在什么区域?局部变量和成员变量呢?先上两个图: 线程共享:堆、方法区 注意:因为有了TLAB技术,堆内存并不是完完全全的线程共享,其eden区域中还是有一部分空间是分配给线程独享的。 线程独享:栈 常量存储在方法区的常量池 成员变量存储在堆中的对象里面,由垃圾回收器负责回收。 局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。 栈中用来存放一些...原创 2020-12-16 13:05:54 · 1468 阅读 · 0 评论 -
Java序列化理解-Serialiable和Parcelable区别
一、什么是序列化和反序列化:序列化和反序列化是一个过程,而不是什么接口,是把数据按照一定规则和格式保存下来,将来按照这种规则再把数据恢复回来。注意:Serialiable和Parcelable仅仅是实现序列化的方案之一简单总结这俩就是:Serialiable Java独有的,序列化接口 规则是JDK规则,序列化过程原理:需要大量IO和反射Parcelable Android独有的,序列化接口,需要程序员实现过程,是内存的序列化,存的是值,不会保存类和属性类型,序列化过程不需要IO操作,..原创 2020-12-17 13:14:17 · 343 阅读 · 0 评论 -
抽象类和接口区别
共同点:都没办法直接创建异同点的一点总结:抽象类: 1、抽象方法,成员属性, 2、有方法体,可以空实现; 3、java单继承,一个类必须有一个父类接口: 1、有方法名 没有方法体 2、可以定义属性,但是必须public final 3、由于java单继承,一个类必须有一个父类,接口弥补了单继承的缺陷,是对多继承的一个补充Android中BaseActivity 基类一般使用抽象类,封装一些多个界面共同拥有的功能,譬如主题、框架...原创 2020-12-17 13:12:08 · 79 阅读 · 0 评论