- 博客(30)
- 收藏
- 关注
原创 算法初级杂谈
本文档的主要目的是:本接口设计规范(IDS)的目的是详细描述VAP和VA引擎之间的软件接口。VAP提供了2种方式生成VA引擎到VAP上: 1.通过VA Plugin 2.通过VA提供的接口VAP与不同的VA供应商集成,允许 通过标准化的API 使用他们自己的 analyticsVAP有2个集成点:1.VA Plugin SDK 2.VA网关提供的接口VA Plugin:一个VA Plugin 代表一个VA引擎 每一个VA plugin 通过一个唯一的APP ID进行定义,还有一个 PLug
2023-05-06 16:59:28
642
原创 FastDFS操作文件上传,下载,删除
FastDFS/** * * @description file upload of type Mutilpart * @author feifei.yuan * @param file: the file will to be uploaded * @return String * @throws IOException * @date Aug 27, 2020 10:30:26 AM */ public String upLoadFile(MultipartF
2020-09-18 23:58:51
2149
原创 数组中出现超过一半的数字&&2数之和
这是我的第一篇刷题处女作,写作的目的主要有个:第一:记录自己所学的知识,加深印象,巩固基础。第二:分享自己的知识经验,希望能够帮助广大的互联网小伙伴们。第一次写算法,没有经验,希望小伙伴们能够指出我的错误,让我继续成长。第一题:给定一个序列,找出其中出现了超过一半的数。第一题比较简单,可以使用方法也很多,下面介绍三中方法来解决这个问题:排序 public int getNumMoreHalf(int[] a){ //快速排序,这里最好是将快排写出来,非非比较懒,就没有.
2020-09-15 23:13:44
218
原创 UUID与数字ID的区别与适用场景
今天在做项目的时候发现系统里面使用的主键UUID,于是我想着使用Long类型的自增主键他不香嘛。于是找我老大理论一番:我:我看到项目里面使用的主键类型是UUID,使用Long类型的自增不好嘛?老大:你先理出Long类型的自增ID的优点。我:第一:自增Long类型的主键可以主键自增,数字类型占用空间小,走索引速度更快,对于排序有更好的性能,不用担心重复的问题,在程序中使用起来更方便。老大:那你说一说UUID的缺点。我:UUID占用内存空间大,索引相对来讲慢一些,数据量大了可能会重复,不易排序,在程序
2020-09-15 21:19:50
4109
2
原创 池化思想集大成者------线程池
Java中有很多池化思想的技术,比如数据库连接池,HttpClient 连接池,内存池,线程池,而我们今天的主题就是线程池。有些文章我看到讲的很大白话,生动形象,但是我尽量讲的专业一点,准确一点。开始我们的正文吧。作者感言:大家在看我的文章的时候会发现,作者其实自己说的比较少,都是讲源码占据很大一部分,一直都是围绕源码在讲,我听过一个老师讲过的课,他说在讲java知识原理的时候,任何人在没有拿出证据之前,说的话都是不值得相信的。在业界有一句话:talk is cheap,show me the co.
2020-09-03 12:58:06
206
原创 java动态加载jar实现热拔插
这是一篇关于项目经验积累的文章,在实际的项目中我们常常会遇到很多的问题,可能有很多种不同的解决办法,但是将自己的解决办法通过文字的方式记录下来,不失为一种经验值积累的好方法,毕竟好记性不如烂笔头嘛,下面就开始我们的正题,go!!!这几天,非非做公司的项目,需要做如下的一个需求,对于我一个基本没有项目经验的实习生来说,这可把我给难住了,终于在我翻了几十篇博客后,给出了我的解决方法:需求如下:有这么一个需求,我们提供一个接口标准,写成了一个jar,这个标准给不同的厂商去实现,实现完了打成一个jar,.
2020-08-07 15:12:26
3364
2
原创 并发利器--ConcurrentHashMap
我们知道HashMap是线程不安全的,会产生数据覆盖的问题,当我们在多线程的环境下,使用HashMap就不合适了,此时我们可以使用HashTable,Collections.synchronizedMap(new HashMap<String,String>()),或者是使用synchronized来保证线程安全。但是我们一般使用ConcurrentHashMap来保证线程安全。...
2020-07-31 16:56:40
166
原创 解开LRU的神秘面纱
LRULRU是Least Recently Used的缩写,即最近最少使用。----摘自百度百科LRU最近最少使用,说的直白一点就是最久未使用。我们可以利用这一特点来做缓存的淘汰策略再合适不过了,当缓存满了的时候使用这种算法进行数据淘汰。在Java里面LinkedHashMap自己实现了LRU,使用的数据结构是HashMap+双向链表。...
2020-07-19 22:45:34
169
原创 HashMap2
由于今年疫情的原因,再加上学业的繁重和找工作的艰难准备,csdn个人博客的文章从去年放寒假到现在一直没有更新过了,在这半年的时间里,自己对于所学的知识有了一个更加清晰的认知,发现以前的文章有很多错误,难免有误人子弟的嫌疑,所以在接下来的时间我会将前面文章的错误一一改正,并继续写出高质量的技术文章,欢迎广大网友的批评与指正。
2020-07-16 13:16:28
263
原创 HashMap
HashMap:jdk1.7和1.8的区别:jdk7的HashMap使用的数据结构是:数组+链表jdk8中会将链表转成红黑树(链表的长度超过8的时候),数组+链表+红黑树为什么转成红黑树?链表的插入效率很高,但是查询效率较低,完全平衡二叉树的查询效率很高,但是插入效率很低,于是在链表和完全平衡二叉树之间做了一个折中,采用的是红黑树。但是remove操作之后,如果红黑树的节点个数小...
2020-03-16 15:55:37
210
原创 redis知识梳理
redis:redis的数据类型redis支持的几种数据类型:String(字符串) Hash(哈希) List(有序可重复元素集合) Set(无序不重复元素集合) ZSet(有序不重复元素集合)String:键和值都是字符串,存储简单字符串数据类型,一个键最大能存储512M 。命令功能set key value设置值(多次设置相同的...
2020-03-05 16:30:02
157
原创 shell基础编程
shell基础编程1编写shell程序判断字符串是否为数字字符串#! /bin/bashexpr $1 "+" 10 &> /dev/nullif [ $? -eq 0 ];then echo "$1 is number"else echo "$1 not number"fi2编写shell程序比较2个数的大小#! /bin/bashmax=0if [...
2019-11-19 17:07:42
2763
原创 布隆过滤器
布隆过滤基本原理:当一个元素被加入集合时,通过k个散列函数将这个元素映射到一个位数组中的k个点,把他们置为1。检索时,我们只需要看这些点是不是都是1,就(大约)直到集合中有没有他了:如果这些点中有任何一个点为0,则被检索元素一定不存在;如果都是1,则该元素很可能存在。原理图:分析:不用保存原始数据,只需要保存原始数据的位图,位图占据的空间很小。只需要经过k次hash进行比对即,效率高。但...
2019-11-04 22:19:14
172
1
原创 海量数据问题
最多出现次数题目描述:有一个包含20个亿全是32位整数(4byte)的大文件,在其中找到出现次数最多的数。分析:使用hashmap,每一个元素维护一个出现次数:比如(“1”,1),(“2”,2),(“3”,1),key:表示某个元素,value:表示某个元素出现的次数,对文件的每一个元素进行扫描,使用map.contains(“key”)判断是否存在,如果存在就map.get(“key”),...
2019-11-04 20:37:03
223
原创 落单的数
落单的数1题目描述:某一个数组里面只有一个数K出现了一次,其余的都出现了2次,找出这个数。public static void main(String[] args) { int[] a=new int[]{1,1,2,2,3,3,4,4,5,5,6,7,7,8,8,9,9,0,0}; int x=0; for(int i=0;i<a.length;i++){ x=x^...
2019-11-01 22:33:18
227
原创 1的个数
1的个数题目描述:输入一个整数,输出该二进制表示中1的个数public static void main(String[] args) { int n=9; oneCount(n); } public static void oneCount(int n){ int count=0; int count1=0; int count2=0; //将1向左挪,一次与二...
2019-11-01 22:32:48
144
原创 巧妙的位运算解决重复数据出现问题
题目描述:1到1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次,找出这个重复的值。解法1:巧妙使用位运算public static void main(String[] args) { int N = 11; int[] a = new int[N]; //初始化数组 不包括最后一个元素 for (int i = 0; i...
2019-11-01 15:39:11
693
原创 单双链表的基本操作
单链表的基本操作单链表图示单链表的删除节点操作单链表的添加节点操作(将节点添加到末尾)单链表的添加节点操作(将节点添加到中间)定义单链表类public class NodeList { Object object; NodeList next; public NodeList(Object object) { this.object = object; }}...
2019-10-29 22:29:45
173
原创 数组实现列表
数组实现列表先写一个接口,定义了列表的增删查改的方法public interface MyList { void delete(int index); //根据索引值删除元素 void delete(Object element); //删除某个元素 void add(Object element); //添加一个元素 void update(int index,Object...
2019-10-29 22:28:56
490
原创 虚拟机字节码执行引擎
虚拟机字节码执行引擎概述Java虚拟机的执行引擎:输入的时字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。运行时栈帧结构一个线程中的方法调用链可能工会很长,很多方法都同时处于执行状态。对于执行引擎来说,在活动过程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,于这个栈帧相关联的方法称为当前方法。执行引擎运行的所有字节码指令都只针对当前栈帧进行操作。接下来详细的解释一下栈帧中...
2019-10-28 19:46:29
114
原创 虚拟机类加载机制
虚拟机类加载机制虚拟机的类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。总结以下知识点:在Java语言中,类的加载连接初始化过程都是在程序运行期间完成的。1 类加载的时机:类从被加载到虚拟机内存中开始,到卸载出内存它的整个生命周期包括:加载,验证,准备,解析,初始化,使用,卸载7个阶段,验证,准...
2019-10-28 17:22:47
91
原创 JVM底层原理分析
JVM的内存模型很多人都看过,周志明老师的《深入理解Java虚拟机》已经解释的很清楚了。但是只限于概念性的知识,关于底层的原理并没有做深入的阐述,下面我们通过一个实例代码来分析JVM内存模型之间的联系与各模块之间的底层原理,底层比较复杂,可能篇幅有点长,请耐心阅读,一定给你讲透彻,阅读本文建议同《深入理解JVM》这本书一起参考。此处先上一段代码,以下通过代码逐步分析:public cla...
2019-10-19 17:55:14
403
原创 synchronized底层原理解析
sychronized底层原理探秘Synchronized作用:官方解释:同步方法支持一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成的。一句话总结出Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果synchronized的底层原理及其实现:代码结合模...
2019-10-18 16:21:05
327
原创 InnoDB的MVCC
什么是MVCCMVCC即Multi-Version Concurrency Control,中文翻译过来叫多版本并发控制。MVCC解决的问题MySQl默认的存储引擎是InnoDB,默认的事务隔离级别是REPEATABLE RED(可重复度),这种事务隔离级别要求2个事务之间不能影响,而且还能支持并发,悲观锁无法达到这个性能要求。所以该隔离级别采用的是乐观锁的形式实现的,乐观锁采用的具体实现方...
2019-10-16 14:19:30
303
原创 Java虚拟机GC垃圾回收
Java虚拟机对象已死吗:引用计数方法给对象添加一个计数器,每当一个地方引用他时,计数器就加1,当引用失效时,计数器就减1,任何时候计数器为0的对象就是不会再被使用的。引用计数方法带来的问题:无法解决对象之间循环引用的问题:例如:Person a=new Peson();Peson b=new Person();a.instance=b;b.instance=a;以上情况,使...
2019-10-15 18:02:16
109
原创 数据库事务
Mysql事务:事务的概念:对于用户而言,事务是具有完整逻辑意义的数据库操作序列的集合。对于数据库管理系统而言,事务是一个读写操作序列。这些操作是一个不可分割的逻辑工作单元,要么都做,要么都不做。事务结束语句:1 事务提交(commit):将成功完成事务的执行结果(即更新)永久化,并释放事务占有的全部资源2 事务回滚(rollback) : 终止当前事务,撤销其对数据库做的更新,并释...
2019-10-11 10:47:47
259
1
原创 equals和==的比较
Java中equals和==的比较:String类型的常量池主要有2种使用方法:1 直接使用双引号声明出来的String字符串对象会直接储存在常量池中。2 如果不是用双引号声明的String对象,可以用String提供的intern方法。intern方法会从字符串常量池种查询当前字符串是否存在,如果不存在就会将当前字符串放入常量池中。Java中2种创建字符串的方式的分析:Stri...
2019-10-10 21:58:40
118
原创 悲观锁和乐观锁
乐观锁和悲观锁:悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行时,可以同时进入执行,在最后更新数据的时候要检查这些数据是否被其他线程修改了(版本和执行初是否相同),没有修改则进行更新,否则...
2019-10-10 21:22:54
121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人