自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis底层数据结构

一、简单动态字符串SDS1、结构struct sdshdr { int len; // 记录数组中已使用的字节数 int free; // 记录数组中未使用的字节数 char buf[]; // 用于保存字符串}2、特点(1)获取字符串长度复杂度O(1)(2)防止缓冲区溢出(3)减少修改字符串长度时所需的内存重分配次数...

2019-09-16 14:08:00 112

原创 【Flutter】用InheritedWidget来实现全局变量

最近在研究使用Flutter来写一个跨平台的App,之前研究过使用Java来编写Android应用,且对于Java语言也比较熟悉,而Flutter使用Dart语言来编写的,因此在熟悉Dart语言和Flutter框架的过程中也遇到不少问题。看了很多网上的资料和官方文档,Dart似乎不支持全局变量,而且Flutter将所有的东西抽象为Widget,并将其分为有状态的StatefulWidget和无...

2019-04-29 15:06:23 4084

原创 【并发】Java线程池

线程池顾名思义就是指管理一组同构工作线程的资源池,线程池与工作队列(Work Queue)密切相关,工作队列中保存了所有等待执行的任务。线程池管理的线程的任务就是从工作队列中获取一个任务、执行任务,然后返回线程池并等待下一个任务。一、线程池的优势1、减少线程的创建与销毁所带来的开销,同时任务不需要等待线程创建的时间而可以直接执行,只要有空闲线程的话2、减少空闲活跃线程所带来的CP...

2019-04-21 23:21:32 158

原创 【Java】VarHandle解析

一、VarHandle简介变量句柄(VarHandle)是对于一个变量的强类型引用,或者是一组参数化定义的变量族,包括了静态字段、非静态字段、数组元素等,VarHandle支持不同访问模型下对于变量的访问,包括简单的read/write访问,volatile read/write访问,以及CAS访问。VarHandle相比于传统的对于变量的并发操作具有巨大的优势,在JDK9引入了VarHa...

2019-04-19 22:05:55 5626

原创 【并发】AQS源码分析

AQS全称是AbstractQueuedSynchronizer,是JDK提供的一个同步器设计框架,很多并发数据结构如ReentrantLock、ReentrantReadWriteLock、Semaphore等都是基于AQS来实现的,下面来分析一下AQS的原理。一、底层数据结构AQS底层维护了一个state(代表共享资源)和一个CLH队列(代表线程等待队列)state:stat...

2019-04-18 12:56:52 137

原创 【面经】腾讯java后端实习面经

周六晚上八点半突然接到了腾讯PCG的面试电话,还处于一脸懵逼的状态,简历投的是WXG,然后莫名其妙被PCG捞起来了,然后记得提前批应该已经在三月份过去了,四月份应该是正式批了吧,但又没有参加笔试,然后就莫名其妙参加电话面试了,面试时间大概一个小时。话不多说,面经奉上。一、自我介绍二、聊项目,说一下印象比较深刻的一些地方三、因为项目是跟数据库相关的,之后就问了很多Mys...

2019-04-14 01:17:12 1713

原创 【并发】进程间通信与线程间通信

一、进程和线程进程:简单来说,一个进程就是一个正在执行的程序实例,包括程序计数器、寄存器、程序上下文等信息。进程是资源分配的最小单位,每个进程拥有自己的地址空间,因此当一个进程崩溃时,其他进程不会受到影响。线程:线程又称为轻量级进程,是CPU调度的最小单位,对于同一个进程所拥有的多个线程是共享同一个地址空间的,因此一个线程崩溃很容易引起整个进程的崩溃。二、进程间通信与同步1、...

2019-03-18 23:38:18 325

原创 【Java】LinkedHashMap及HashSet源码阅读(JDK1.8)

其实LinkedHashMap和HashSet都是基于HashMap来构建的,如果了解HashMap的底层原理的话,这两种数据结构就很好理解了。LinkedHashMap继承自HashMap并实现了Map接口public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map&...

2019-03-15 12:58:10 94

原创 【Java】HashMap源码阅读(JDK1.8)

哈希表底层采用数组+链表(红黑树)的数据结构:static class Node<K,V> implements Map.Entry<K,V> { final int hash; //哈希值 final K key; //节点的键 V value; //节点的值 Node<K,V&...

2019-03-15 12:32:00 87

原创 【面经】三七互娱Java游戏研发实习(一面)

一、王者荣耀服务器实现二、接口和类的区别?1、类只能继承一个类,但可以实现多个接口。2、对于继承性,类继承了父类的方法,子类可以选择是否覆盖父类的方法。3、接口的方法只有声明,没有实现;而类中的方法必须有方法体。三、接口可以实例化吗?为什么?那lambda表达式不就是传入一个接口的实例吗?接口不可以实例化,因为接口可以看成是特殊的抽象类,比抽象类的程度更高,其所...

2019-03-14 22:54:42 1631

原创 【并发】Java锁分类

在Java并发领域,根据锁的状态、特性、粒度、轻重等有不同的分类方法,很多并发书籍或者文章都会或多或少提及一些专有的锁名词,为了理解各种分类的分类方法、原理及作用,在此特意总结一下。一、乐观锁/悲观锁乐观锁:乐观地认为对于同一个数据来说不会被其他线程修改,因此不会加锁。更新数据的时候,借助冲突检查机制来判断更新过程中是否存在来自其他线程的干扰,存在则操作失败,并且可以重试。乐...

2019-03-13 14:43:55 185

原创 【算法】双队列实现栈及双栈实现队列(Java实现)

一、两个队列实现一个栈实现方法:两个队列一个用作工作队列,另一个用作临时队列。插入数据:将该数据插入到工作队列队尾;弹出数据:首先将工作队列的前n-1个元素弹出到临时队列中,并返回最后一个元素,实现栈“后进先出”的功能。最后临时队列变为工作队列,工作队列变为临时队列,任务完成。public class TwoQueue2Stack<T> { private Q...

2019-03-13 11:41:21 635 1

原创 【设计模式】单例模式

单例模式是用来创建只有一个实例的对象的设计模式,通常应用在用来管理共享资源的对象上比如数据库连接池、线程池、事件管理器等。下面是几种单例模式的实现:一、饿汉式(线程安全)public class Singleton1 { private static Singleton1 instance = new Singleton1(); private Singleton1() ...

2019-03-12 13:04:29 104

原创 【Java】jvm类加载机制

一、类的生命周期类从被加载到虚拟机内存当中,到卸载出内存位置,其生命周期包括七个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、运行(Using)、卸载(Unloading),其中验证、准备、解析三个阶段统称为连接(Linking)阶段。1、加载、验证、准备、初始化...

2019-03-10 15:22:36 163

原创 【数据库】数据库基本知识

一、事务概念事务简单来说就是一组原子性的SQL查询,或者一个独立的工作单元,通常由一组SQL语句组成,如果其中任何一条语句因为崩溃或其他原因没有执行,那么所有的语句都不会执行。二、事务特性(ACID)1、原子性(Atomicity)一个事务是数据库系统最小的工作单元,不可再分割,整个事务的所有操作要么全部提交执行成功,要么全部失败回滚,不可能只执行其中的一部分。2、一致性...

2019-03-09 13:41:01 1231

原创 【Java】垃圾回收算法

一、判断对象存活情况1、引用计数算法(非Java所使用的方法)每个对象都维护一个引用计数器,每有一个地方引用这个对象的时候,引用计数器就加1;当引用失效时,引用计数器就减1,当引用计数器的值为0时表示这个对象不可能再被使用了。2、可达性分析算法虚拟机维护一系列称为“GC Roots”的对象作为根节点的树,所有引用了这个“GC Root”的对象都是其子节点,由此可以得到以可引用树,当...

2019-03-02 03:11:28 158

原创 【Java】四种引用关系

引用关系在判断对象是否能够存活的过程中起到了关键的作用,但其实引用并不像字面上理解那么简单,在Java语言中引用分为强引用、软引用、弱引用、虚引用四类,其引用强度依次减弱。强引用(Strong Reference):程序代码中普遍存在的,普通对象创建时默认是强引用关系,只要强引用还存在,垃圾收集器就不会收集这些对象。Object obj = new Object(); //强引用对象...

2019-03-01 19:56:51 1954

原创 【Java】Java对象详解

名词解释:符号引用:符号引用使用一组符号来描述所引用的目标,可以是任何字面量,只要能够无歧义地定位到该引用目标就行了。由于Java源代码编译成字节码的时候,虚拟机不知道所引用的目标的实际地址,所以需要用一个符号来代替引用的对象。比如说Student类引用了People类,但Student类不知道People类的实际地址,因此用”People“这个字面量来表示这个引用的类,当然实际中并不是...

2019-02-27 21:26:45 353

原创 【Java】Java内存区域

Java相对于C++来说的一个显著的区别就是其内存由虚拟机自动管理、动态分配,因此虚拟机将其管理的内存区域分为一下几大块:一、线程隔离数据区1、程序计数器Java源代码经过编译之后生成字节码,在Java程序运行的过程中,必须知道当前运行的是哪一条指令,并且知道下一条指令的位置或者指令内容,程序计数器就是当前线程用来记录所执行的字节码的行号指示器,如果当前所执行的字节码不是跳转指令,...

2019-02-27 14:38:17 478

原创 【智能算法】PSO粒子群优化算法(C++实现)

粒子群优化算法(Particle Swarm Optimization, PSO)是进化计算的一个分支,是一种模拟自然界的生物活动的演化算法。PSO模拟了自然界鸟群捕食的过程,通过群体之间的协作来找到问题的全局最优解。PSO的主要流程如下:这里有一个动态图模拟粒子群优化算法的演化过程:来自WIKIPEDIA具体代码如下:1、定义参数#define PI ...

2018-06-13 11:13:47 11128 5

原创 常用排序算法(c++实现)

排序算法是比较基础也是很重要的一类算法,如何根据实际情况采用高效的排序对于实际应用十分关键虽然很多排序算法都集成到了语言的核心库中,但是理解其基本原理对我们还是很有帮助。先给出一个交换函数,因为排序算法大多涉及两个数交换,所以先写一个交换函数以便更好地复用template<typename E>inline void swap(E A[], int i, int j) { E te...

2018-06-02 16:27:06 361

空空如也

空空如也

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

TA关注的人

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