自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 golang中关于dataFrame聚合数据类型的使用

一·数据结构及其功能介绍dataframe主要是以二维的数据结构形式展现,突出一点比较像数据库中的表格,可以自定义一些虚拟字段,有自己的行和列,配合自带的一些函数可以对于数据进行较为复杂过滤和聚合。二·使用详解1· 如其名,整个的数据都承托在其dataframe这个数据结构上,依靠着这个数据结构来构建过滤的结果集或者其他的数据源。2.初始化一个dataframe//直接.New就可以初始化一个简单的dataFrame结构 a:=dataframe.New(//series.

2021-12-24 19:14:41 2548 1

原创 floa64转换int64

//将float64转成精确的int64func Wrap(num float64, retain int) int64 { return int64(num * math.Pow10(retain))}//将int64恢复成正常的float64func Unwrap(num int64, retain int) float64 { return float64(num) / math.Pow10(retain)}//精准float64func WrapToFloat64(num f..

2021-12-17 14:43:14 1787 1

原创 关于Collections中的方法

reverse(List list):反转指定List集合中元素的顺序 shuffle(List list):对List中的元素进行随机排序(洗牌) sort(List list):对List里的元素根据自然升序排序 sort(List list, Comparator c):自定义比较器进行排序 swap(List list, int i, int j):将指定List集合中i处元素和j出元素进行交换 rotate(List list, int distance):将所有元素向右移位指定长度,如

2021-09-19 12:14:22 144

原创 常用的数据结构对比

2021-09-02 19:51:16 158

原创 Http的长短连接小总结!!!

一·长连接http长连接是指http的请求头和响应头的均有connection: keep-alive的请求,也就是客户端和服务端均为keep-alive的请求.实际上,http是请求/响应式的,无长短之分,长连接实际上是指TCP的连接为长连接。如此,多个http请求就可以复用一个TCP连接,减少了了TCP连接建立和断开的消耗。http的长连接是从http1.1开始的,http1.0没有keep-alive这个设置。长连接相应字段connection:keep-alive 请求为长连

2021-08-30 19:31:56 1488 1

原创 ThreadLocal扩容详细讲解

在ThreadLocalMap.set()方法的最后,如果执行完启发式清理工作后,未清理到任何数据,且当前散列数组中Entry的数量已经达到了列表的扩容阈值(len*2/3),就开始执行rehash()逻辑:if (!cleanSomeSlots(i, sz) && sz >= threshold) rehash();接着看下rehash()具体实现:private void rehash() { expungeStaleEntries(); .

2021-08-30 09:24:11 1146

原创 ConcurrentHashMap和HashTable有什么区别?能否取代HashMap?

主要区别体现在实现线程安全的方式上:1.7:①在jdk1.7时,ConcurrentHashMap采用分段锁方式对整个桶数组进行了分割分段(Segment)(其中segment继承自ReentrantLock)每一把锁只锁容器中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提供了并发访问率;1.8:①在jdk1.8,直接摒弃了Segment的概念,直接采用Node数组+链表+红黑树来实现,并发控制使用synchronized和CAS来操作。②Hashtable则直接对整

2021-08-25 09:41:48 343 1

原创 Redis的应用场景

总结一:计数器可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。缓存将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。会话缓存可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。全页缓存(FPC)除基本的会话token之外,Redis还提供

2021-08-22 17:27:59 58

原创 volatile关键字的作用

一·volatile原理:被volatile关键字修饰的变量,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。二·应用volatile在Java并发编程中常用于保持内存可见性和防止指令重排序。内存可见性(Memory Visibility):所有线程都能看到共享内存的最新状态;防止指令重排:在基于偏序关系的Happens-Be

2021-08-20 16:55:28 129

原创 死锁的详解

1·产生条件互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。 请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。 环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。2·避免死锁避免一个线程同时获取多个锁避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源尝试定时锁数据库锁,加锁和解锁必须要在一个数据库连接里,否则会出现解

2021-08-20 16:30:29 98

原创 拥塞控制机制的四种算法

拥塞控制主要是四个算法:1.慢启动:意思是刚刚加入网络的连接,一点一点地提速,不要一上来就把路占满。连接建好的开始先初始化cwnd = 1,表明可以传一个MSS大小的数据。每当收到一个ACK,cwnd++; 呈线性上升每当过了一个RTT,cwnd = cwnd*2; 呈指数让升阈值ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”2.拥塞避免:当拥塞窗口 cwnd 达到一个阈值时,窗口大小不再呈指数上升,而是

2021-08-19 15:30:08 9464

原创 HashMap在JDK1.7和 1.8中的关键区别

1·存储结构:1.7:采用的是数组+链表的方式,底层是一个node的table数组,如果没有冲突的时候直接根据hash所得的值进行hash&(length-1)的计算获得在数组中的下标位置;产生冲突的话直接通过链表进行拉链处理。1.8:采用的是数组+链表/红黑树,主要是对1.7中的结构进行了优化,在源码中我们可以看到其实就是如果链表长度大于等于了8,会将我们的链表转换成红黑树的形式进行存储。2·插入方式1.7:头插法,当链表拉起来的时候,采用的头插的形式(会出现链表回路,形.

2021-08-19 14:12:45 123 1

原创 CMS收集器和G1收集器

G1(JDK7正式开始商用) ①介绍:里程碑式成果,开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。G1不再区分分代或者固定数量的划分,而是把联系徐的Java堆划分为多个大小相等的独立区域,每一个独立区域都可以式新生代或者老年代。根据区域垃圾数量的大小,选择性回收释放;基于停顿时间模型设计;通过原始快照搜索算法来实现的;②对于大对象的处理:Region中有一块专门的区域,专门离开存储大对象,G1认为只要大小超过了Region大小的一半,就是大对象,G1的大多数时候都会..

2021-08-18 20:12:59 113

原创 JVM垃圾回收算法详解

标记-清除算法 ①原理:首先标记出所有需要回收的对象,标记完成后统一回收,②缺点:执行效率不稳定(堆中的对象数量不确定);内存空间的碎片化问题 标记-复制算法 ①原理:半区复制,将内存分为两块,一块为保留区域,保留区域会在清除前把存储的对象复制进来,清理完毕后和另外一个区域互换身份②优点:解决了碎片化问题缺点:会分走额外的内存 标记-整理算法 ①原理:将所有对象向内存的一端移动,清理掉边界的对象②缺点:运行的时候需要暂停程序的运行(STW);移动..

2021-08-18 20:02:04 62

原创 树的中序遍历如何实现?

首先我们需要直到树的中序遍历顺序:左根右,有了顺序之后,我们需要采用的方式是递归调用,这也是最基础的DFS遍历,接下来我们看看代码如何实现? public static List<Integer> inorderTraversal(TreeNode root) {//对结果集要准备好一个数组 List<Integer> data = new ArrayList<>(); dfs(root,data); ret

2021-08-18 09:00:48 144

原创 讲解JVM中为什么新生代中要有两个Survivor区

1·结构图2·分析Survivor中分为两个区一个FromService一个ToService区,首先如果只有一个区的话,当新生代的Gc开始工作的时候先把Eden区的垃圾回收了,根据其标志-复制算法,我们需要保留的对象会被移动到FromService区中,当FromService中的内存容量达到了一个阈值,需要我们堆FromService区进行收集的时候,会导致大量的内存碎片残存其中,以至于后来无法在存入大对象了;两个区的好处在于,当FromService区的不需要用到对象也需要被清理的时候,.

2021-08-17 21:28:51 595

原创 看完你必须会的堆排序!!!

1·小铺垫首先我们需要了解两个词,大顶堆,小顶堆,我们借用个图来表示大顶堆的节点会比自己的子节点要大,小顶堆的节点要比自己的子节点要小;用表达式就是:大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]2·堆排序讲解我们主要是利用了大顶堆升序排列了数组,排序过程只需要干两件事情:1·..

2021-08-17 13:19:18 69

原创 Java设计模式之适配器模式讲解

一·模式的定义适配器模式:将一个类的接口转换成用户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高。二·模式的优缺点该模式的主要优点如下:客户端通过适配器可以透明地调用目标接口。 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。 在很多业务场景中符合开闭原则。其缺点是:适配器编写过程需要结合业务场景全

2021-08-16 11:18:29 137

原创 Java中的四种引用详解

一·强引用1·含义强引用是现在大家做开发时最普遍使用的,强引用的存在使得被创建的对象即使在不被使用的情况下,也可以不被垃圾回收器给回收掉2·具体分析Object strongMan = new Object();这种创建的实例即为强引用,当我们的栈空间不足以创建其他对象的时候,gc也不会将这类对象清理掉,对于这类引用,我们可以手动弱化它,使得它可以被处理掉。strongMan = null ;做如上处理,即被弱化,在下一此gc处理的时候,会根据不同的算法机制将该对象回收掉。在

2021-08-15 20:42:38 113

原创 HashMap中的put方法底层源码分析

首先进入put方法时入参的key和value一并传入此时会根据穿入的key去调用一个hash算法,将此时的key生成一个相对应的hash值然后调用putVal方法 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i;.

2021-08-15 12:03:09 101

原创 Java设计模式之工厂模式(三)工厂方法模式

2021-08-15 10:41:23 64

原创 Java设计模式之工厂模式(二)抽象工厂模式

一·定义抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。满足的条件:1· 系统中有多个产品族,但是又分别属于不同的等级;2·每次只使用一个产品族,即同等级的产品族;具体的示意图如下:二·结构和实现①抽象工厂模式中涉及到的角色:抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduc..

2021-08-14 10:35:43 91

原创 Java设计模式之工厂模式(一)简单工厂模式

一·模式分类:工厂模式主要分为三种:1·简单工厂模式2·工厂方法模式3·抽象工厂模式此次我们简单讲讲第一种,简单工厂模式的优缺点和使用二·简单工厂模式分析1·含义:在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern),简单来说,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。2·优缺点:

2021-08-13 23:38:34 111

原创 AOP的代理模式源码解析

一·代理模式在Aop中我们可以选择的是两种代理模式:1·Cglib的动态代理模式2·JDK的动态代理模式而且我们选择代理的时候是否有接口会影响到我们的代理选择模式;二·代理过程我们首先来看看整个的代理对象的生成过程:此时主要是做了两件事,第一件事:初始化了通知链;第二件事:如果单例为空,则根据反射我们会去生成一个代理对象;此时我们继续可以看到这里主要是我们的代理对象的配置类,如果实例为空则进入AOP的代理工厂选择一种代理模式并创建对象返回...

2021-08-13 23:16:30 171

原创 Java设计模式之单例模式详解,简单明了

一·定义单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式,就好像一个人只能由一个身份证一样,都是唯一的。二·主要特点单例类只有一个实例对象; 该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点。三·单例模式的优缺点1·优点:单例模式可以保证内存里只有一个实例,减少了内存的开销。 可以避免对资源的多重占用。 单例模式设置全局访问点,可以优化和共享资源的访问。2·缺点:单例模式一般没有接口,扩展困难。如..

2021-08-13 00:43:01 134

原创 简述Java中的值传递,面试小技巧教你如何快速记住!

1·结论:Java是值传递2·证明+分析: 1>·首先我们来看一段代码: public static void main(String[] args) { int a = 50; String b = "hello"; changeNum(a,b); System.out.println("["+a+"]"+","+"["+b+"]"); } public static void change...

2021-08-12 00:20:42 73

原创 源码层次分析ThreadPool中的Executor,ExecutorService之间的区别与联系

一·结构图具体的子类和实现类继承和实现关系,图中已经明确标明了,不再过多叙述二·源码层次分析 Exector: 1·首先来看看Executor的源码,比较能明确看出Executor 接口定义了execute()方法用来接收一个Runnable接口的对象。 ExecutorService: 1·我们看到ExecutorService 接口中的 submit()方法可以接受Runnable和Callable接...

2021-08-10 00:17:10 243

原创 Mybatis的底层实现流程(一)

一·整体的架构Mybatis的整体架构其实大致的可以分为三个层次:接口层,核心层,基础层;接口层也就是我们经常会在编码时看到的sqlSession会话,核心层其实主要是由配置解析,参数处理,sql执行,以及结果映射几个部分构成。二·流程分析: 整体的sql运行流程中主要是会由一个叫Executor的执行者来进行,流程的开始会进入建造者模式创建一个有关sqlSession的sqlSessionFactoryBuilder的会话工厂,主要是产生会话...

2021-08-08 23:59:19 256

原创 Redis的缓存击穿,穿透,雪崩总结

一·缓存击穿 1·出现分析日常生产中,我们知道数据的请求路径是从客户端出发,先查询缓存中是否存在,如果有直接返回,若没有则会把请求打入DB,进而查询出所需要的数据,如下图但是此时便会出现一种情况,如果我们请求量非常的多,高并发时,缓存的存在就是为了提高数据的查询速度,减轻DB的很多负担,当大量请求涌入,并且缓存中没有的时候,所有的请求全部进入到了DB,此时便会出现直接击穿缓存的情形,数据库便会直接崩溃。 2·解决方案: 在缓存失效...

2021-08-05 00:56:09 96 1

原创 关于SpringSecurity的认证下实现不同的登陆方式的实现记录

一·登陆方式的选择1·账号密码登陆时:正常登录接口Service层:@Override public ResultJson login(SysUser sysUser) { //用户的信息传入进来首先放入UsernamePasswordAuthentication类中 UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationTo

2021-07-30 17:37:36 865

原创 Redis如何实现在远程服务器上的部署

一·部署需要的环境 centos,redis-5.0.7 二·开始部署Redis 1·下载命令: 远程去下载redis的版本到服务器来,如果提前准备了也可以使用rz命令上传 1 wget http://download.redis.io/releases/redis-5.0.7.tar.gz 2·解压缩: 1 tar -zvxf redis-5.0.7....

2021-07-24 00:49:00 960

原创 总结基于RBAC模型如何实现AOP的权限验证

一·RBAC模型初步认识所谓RBAC模型,是在用户和角色以及角色权限之间实现一对多,多对多的权力控制模式,从单个角色到,一个单一的角色拥有多个权限,以及不同角色之间的权限分配,是一个比较均衡化的控制模型,通过简单的数据视图看一下。该模型涉及到多种权限的分配和管理,二·如何实现AOP的权限校验 首先需要知道一点,在Spring框架下,AOP是属于面向切面编程的,根据自定义切点切入程序的运行,从而实现不同的操作。@Aspect@Component1...

2021-07-13 22:27:09 429 1

原创 如何将Springboot+mybatis的项目打成war包

一·修改pom.xml配置<packaging>war</packaging>Spring默认的是打包是jar包,所以我们需要修改pom.xml配置,换成war包。并且增加一个plugins,此处的意义在于跳过maven中的测试,避免打包的时候出现报错! <plugin> <groupId>org.apache.maven.plugins</groupId>

2021-07-13 16:20:39 280

原创 如何初步搭建Spring Boot + Mybatis的框架(附测试)

一·环境准备阶段这次Spring Boot的框架搭建我们需要用到:jdk1.8 ,idea。二·开始阶段1·创建一个新的工程:这里可以看到一个链接,这里面点开我们可以看到关于这次Spring框架的选配,我们点进去可以进行选择,当然我们也可以不点进去,直接选择default,idea会为我们配置的,所以上一步直接点击next,我们在这里选择java8,如果需要修改名称,我们可以对分组名称即Group修改,Name属性主要是这个Spring 框架的名称,完成即可点击nex

2021-06-21 21:41:12 202

原创 小白在Spring boot+Mybatis的项目中跳转页面

在Spring boot项目的初期开发阶段,大家会有意识到不同于Spring MVC中不能使用正常的跳转了,主要是Spring不支持这种的跳转,所以我们需要另辟蹊径,我们拿一个登录页面来看

2021-06-14 14:10:41 589

原创 128陷阱的底层源码分析

一·测试首先我们测试如下一小段代码public class test3 { public static void main(String[] args) { // TODO Auto-generated method stub Integer a1 = 127; Integer a2 = 127; Integer a3 = 128; Integer a4 = 128; System.out.println(a1==a2); System.out.println(a

2021-06-14 14:03:41 130

原创 Mybatis内嵌的collection嵌套查询机制详解

一:使用环境在Spring boot+Mybatis项目的开发中,当需要用一张表中的多个字段进行子查询的时候,按照往常通过多次的嵌套,会变得很冗杂,此时我们需要使用Myba

2021-06-06 14:21:47 2564

原创 java1.8下的集合框架中ArrayList底层扩容机制分析

java1.8下的集合框架中ArrayList底层扩容机制分析一:初始化阶段1.首先,我们可以知道ArrayList是继承了abstract类,实现了一个List的接口。在开始使用ArrayList的时候,Object类自动的为ArrayList数组初始化创建了一个Object数组的对象,默认为空。private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};2.在API中还会生成一个关于Array的含参构造器

2021-05-28 00:44:51 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除