数据结构
文章平均质量分 72
fenglllle
这个作者很懒,什么都没留下…
展开
-
检查网站是HTTP那种协议与获取域名的ipv6地址
最近在做HTTPS的应用,可能需要使用ipv6的地址做SLB,但是怎么检查配置正确,总不能每次都看日志吧,实际上客户端也很容易查看,总结工作经验。实际上就是些经验总结,没什么技术难度,只不过网上很多时候没说清楚,实际上很多情况是有前提条件的,比如windows,比如js执行的函数等。原创 2023-08-05 20:41:47 · 2740 阅读 · 1 评论 -
go 函数或者方法参数调用的过程
最近做项目,使用go开发,但是在发生函数调用传参数时,对指针的指针的传递有难以理解的代码,就此分析过程。尤其是对于多重指针作为参数,而且对于一些内置函数的修改逻辑也需深入的理解。这里的问题是切片本身是指针,如果再加入指针,就是指针的指针,很难理解。而且再结合函数的参数,本身函数的参数是一个引用,栈变量自己又会分配内存地址,就更难理解了😅。这里的关键还有切片是一个结构体存储的,但是结构体又是内存值拷贝,而非内存地址引用。实际上可以结合内存分配的流程结合函数的入栈出栈,外加参数的存储结构很容易就明白原理了。原创 2023-01-17 22:09:52 · 779 阅读 · 0 评论 -
websocket 传输文件
上一章实现了websocket传输文本信息,实际上网络传输的都是二进制0和1,因而也可以传输文件。实际上websocket是tcp上的双工协议,传输文件是没有问题的,只是需要定义应用层协议才行。如果使用Tomcat的websocket传输,注意传输内容大小。而且HTTP2.0和HTTP3.0并不能使用websocket,尤其是http3.0UDP协议。httpshttpshttps。...原创 2022-07-17 17:27:37 · 9268 阅读 · 0 评论 -
go 语言指针,值引用和指针引用
最近做项目,开发go的sdk,其中就涉及接口编程,类似typescript,指针,指针类型。就像C语音一样,指针就涉及指针引用。在go语言中*类型 在类型上表示当前类型是指针类型,在变量上表示指针的值&变量 表示是当前变量的指针使...原创 2022-06-23 22:50:02 · 390 阅读 · 0 评论 -
Properties load方法 中文乱码
properties中文load乱码,properties是怎么加载的,Unicode是怎么转码的原创 2022-06-15 21:57:50 · 1890 阅读 · 0 评论 -
utf-8 with bom格式的文件
前言经常使用配置文件,一般而言是utf-8,少量的GBK等,实际上utf-8还有一种utf-8 with bom格式,那么这种格式有什么区别,什么是BOM呢。示例创建一个utf-8 with BOM的格式文件使用Java读取这个文件可以看到我们创建文件时并没有空格,而实际读取文件后莫名有个空格,使用go语言试试仍然有空格,那么空格是怎么来的呢,为啥是空格,文件保存时明明没有空格原理解析实际上这个空格就是BOM的占位符,在字符串中,表示为空格,如果使用utf-.原创 2022-04-30 21:48:43 · 3581 阅读 · 0 评论 -
YAML格式文件实践
前言yaml格式现在已经很通用了,yaml有简介已读的格式,在容器环境或者微服务被大量使用,只是使用的过程还是properties的key的方式存储使用,可能跟Spring的发展历程有关,Spring使用PropertySource存储配置数据,而原生的yaml使用还有很多不便利的地方。1. yaml yml properties实际上yaml yml都是一种格式,Spring仅定义了Yaml的类,properties是HashTable包装。在Spring的存储中是用PropertySou原创 2022-03-17 11:01:15 · 1481 阅读 · 0 评论 -
Http Server 文件下载与上传,form表单字节码解析
前言为了实现轻量级的HttpServer,可以使用JDK自带的HttpServer API,那么如何实现文件上传与下载,其实要实现这些需要理解Http协议的输入与输出标记。1. HttpServer文件下载show me the code:????package com.feng.server.http;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;impor原创 2021-07-04 14:50:32 · 2048 阅读 · 5 评论 -
Java应用启动mainclass与Spring boot启动的原理
前言最近把旧项目的框架更换为Spring boot,打包方式更为jar启动,其实以前也不是war部署,而是通过main方式启动的,这里看看原理。1. main方式启动的原理java 命令启动可以-jar也可以直接带main class,那么直接启动带main方法的类即可启动应用 <!-- Assembly plugin --> <plugin> <groupId>org.apa原创 2021-05-30 21:26:28 · 5502 阅读 · 2 评论 -
ArrayList与HashMap遍历删除元素,HashMap与ArrayList的clone体修改之间影响
前言 最近做项目,需要克隆map与list,并在克隆的map或者list中进行增删改操作,发现引用对象在map或者list是浅克隆,即克隆引用或者指针。1. demoPerson类省略package com.feng.clone;import java.util.HashMap;import java.util.Map;public class MapClo...原创 2019-10-24 22:26:51 · 360 阅读 · 0 评论 -
为什么对象重写equals方法必须重写hashCode方法
前言我们知道重写equals方法必须重写hashcode方法,此文从一些使用角度分析原因1. hashCode方法源码 public class Object { /** * Returns a hash code value for the object. This method is * supported for the benefit of has...原创 2018-11-25 12:32:31 · 724 阅读 · 1 评论 -
JDK8 HashSet源码解析
前言HashSet我们使用很多,但仅仅在使用的角度,用法很简单,现在分析原理1. 总体概览public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{ static final long ...原创 2018-10-24 22:33:05 · 547 阅读 · 0 评论 -
JDK8 ArrayList源码解析
1. ArrayList的设计思路。直接看源码/** <p>This class is a member of the * <a href="{@docRoot}/../technotes/guides/collections/index.html"> * Java Collections Framework</a>. * * @author ...原创 2018-08-30 14:57:03 · 248 阅读 · 0 评论 -
String StringBuffer StringBuilder StringJoiner的原理
先看String,上源码 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char va...原创 2018-07-21 10:28:07 · 413 阅读 · 0 评论 -
LRU算法,以及Apache LRUMap源码解析
1. 什么是LRULRU(least recently used) : 最近最少使用LRU就是一种经典的算法,在容器中,对元素定义一个最后使用时间,当新的元素写入的时候,如果容器已满,则淘汰最近最少使用的元素,把新的元素写入。1.1 自定义实现LRU的要求比如redis,如何自己实现简易版的redis缓存。那么我们需要一种数据结构,支持set和get操作。1) get操作时...原创 2018-09-13 11:01:47 · 2733 阅读 · 0 评论 -
JDK8线程池-ThreadPoolExecutor源码解析
JUC(java.util.concurrent)线程池工具类Executors是我们常用的类,处理大批量任务时,非常重要,提供程序的并发能力。虽然很多编码规范(A公司)不推荐使用此工具类,只有明白线程池的工作原理才能在适当的情况下使用。1. Executors用法有3大类,分别是红黄蓝(原创 2018-09-24 00:53:38 · 3014 阅读 · 1 评论 -
Java基本数据类型存储与包装类源码解析
1. 首先,字节即byte,是二进制,最小的存储单位;位即bit,比特流,常用于网络传输:1byte=8bit。2. 8种基本数据类型为:byte、short、int、long、float、double、char、boolean。Java中没有类似C语言中的sizeof()函数,该函数的功能是计算变量的字节数。但是Java中有包装类定义了8种基本数据类型的size(单位bit,...原创 2018-09-14 12:17:54 · 557 阅读 · 0 评论 -
JDK8线程池-Executors-ThreadPoolExecutor用法
前言Executors工具类的用法与缺陷1. 固定线程的线程池 ExecutorService ex1 = Executors.newFixedThreadPool(5); for (int i=0;i<10;i++){ ex1.execute(()-> System.out.println(Thread.currentThread().ge...原创 2018-10-28 21:28:08 · 2973 阅读 · 0 评论 -
JDK8 LinkedList源码解析
1. LinkedList的设计思路。直接看源码/** * Doubly-linked list implementation of the {@code List} and {@code Deque} * interfaces. Implements all optional list operations, and permits all * elements (includ...原创 2018-08-31 16:21:54 · 372 阅读 · 0 评论