自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Springboot源码学习笔记

SpringIOC原理(BeanFactoryPostProcessor、BeanPostProcessor、循环依赖问题、refresh流程);SpringAOP原理;Springboot自动装配原理;(@Import注解、JAVA SPI、META-INF/spring.factories)

2022-10-18 13:50:59 508

原创 JVM--内存模型、垃圾回收、常见面试题、JVM调优

2:进入TLAB区:如果TLAB区域足够装下对象则直接进入,如果装不下则根据refill_waste(JVM运行时动态维护的一个变量)会有两种情况:1:请求对象大于refill_waste时将当前TLAB区域剩余的区域用dump object填满然后新开辟一块TLAB区域存放该对象;根可达算法:从根元素(栈里引用的对象、本地方法栈引用的对象、常量池内对象、静态变量引用的对象、.class对象)开始寻找,凡是通过根元素可以搜索到的对象,都不是垃圾。大对象:Eden区分配不下;

2022-03-29 22:39:20 670

原创 分布式架构设计思路

一、遵循的原则阶段1:CAPCAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)可用性(A):保证每个请求不管成功或者失败都有响应分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作例如:CA:如果要保证CA则系统不能进

2021-07-07 19:31:34 390

原创 快速排序算法的基本思路和代码示例

算法思路:快速排序就是将小于基准点的元素放到基准点的左边,将大于基准点的元素放到基准点的右边。经过过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,让所有的数据变成有序的过程图例:我们随机取一个数字作为基准元素,为了方便,取第一个数字为基准元素,在此博客中演示的例子中,基准元素取为6;设置两个指针 i 和 j,它们分别指向数组的第一个元素和数组最后一个元素,即i=0,j=9。

2021-06-30 16:12:31 1170

原创 如何选择合适的排序算法

常用的排序算法有很多,今天我们总结一下如何根据自己的业务场景选择合适的排序算法一:概念介绍空间复杂度:空间复杂度描述了一个算法运行需要占用的临时存储空间的大小,常用O(n)、O(1)表示时间复杂度:时间复杂度描述了该算法的运行时间,常用O(n)、O(nlogn)表示排序算法的稳定性:排序算法是否稳定取决于具有相同关键字记录的数据,在排序前后是否会改变原本的位置,如果不会交换位置,则成为稳定的排序算法二:排序算法的特性总结三:如何选择合适的排序算法1:首先要确定对排序算法..

2021-06-23 15:22:26 2519

原创 MongoDB分页查询性能优化

去年项目组接了一个mongodb数据量上亿的项目,完成整体前后端的工作后,客户反应告警数据页面api响应太慢,要求优化,经过我们组人员1个月的不懈努力,终于完成的客户要求的目标(所有api响应1s以内),写篇wen'zha...

2021-06-02 13:58:36 1809

原创 linux pthread_create线程函数的基本使用

POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。说白了,使用Pthreads方便移值。今天我们就来学习一下Pthreads的简单用法,废...

2018-08-22 10:44:10 8053

原创 linux线程与进程的理解

首先明确一点,linux对进程和线程不做区分,统一由task_struct来管理所有进程和线程。那么如何在linux下区分进程和线程呢? 为什么要引入线程的概念?一个进程包含很多系统资源:进程控制块、虚存空间、文件系统,文件I/O、信号处理函数,创建一个进程的过程就是这些资源被创建的过程。系统调用fork创建一个进程时子进程是一段独立的内存空间,其中的资源是父进程资源的副本,两...

2018-08-21 18:05:03 9149

原创 函数调用过程中函数栈详解

当进程被加载到内存时,会被分成很多段代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写,如果发生写操作则会提示segmentation fault 数据段:保存初始化的全局变量和静态变量,可读可写不可执行 BSS:未初始化的全局变量和静态变量 堆(Heap):动态分配内存,向地址增大的方向增长,可读可写可执行 栈(Stack):存放局部变量,函数参数,当前状...

2018-08-14 16:19:51 28910 24

原创 linux等待队列的应用场景

Linux内部的wait_queue是一个常用的东西,上次只讲实现,这次我们来聊一聊它的应用 1) 为什么要用等待队列?假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffer 时,此时 buffer 已经满了。那请问你要如何去处理这种情...

2018-08-06 11:14:08 1142

原创 linux虚拟内存、内核空间和用户空间、进程上下文和中断上下文

Linux虚拟内存、内核空间和用户空间、进程上下文和中断上下文在linux编程中经常会遇到内核空间和用户空间这个概念,下面谈谈我的理解 一、虚拟内存什么叫虚拟内存?早起计算机中要运行一个程序会把程序全部装进内存然后运行,这样做有三个缺点:1)进程地址空间不隔离,不安全2)内存使用效率低:当内存空间不足时会将部分程序拷贝置硬盘给现程序腾出空间3)程序运行地址是随机分配的,...

2018-07-30 13:31:45 943

原创 C++中vector list dequeue set map

在c++中,如果要存储的数据大小在编译期间就能确定,则使用数组即可,否则就要使用c++的容器类。容器类分为顺序存储结构(vector list deque)和关联存储结构(set map)vector连续的存储结构,连续的特性导致随机访问效率高(例如用[]下表访问元素),但插入和删除效率低(因为插入一个元素就要以块的形式挪动内存),当vector容量满了再插入元素时,系统会重新寻找一块比现...

2018-07-27 20:20:21 398

原创 linux线程的创建和属性pthread_attr_t设置

Posix线程中的线程属性pthread_attr_t主要包括detach属性、policy属性、优先级、继承属性、堆栈地址、scope属性、堆栈大小。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。detach属性:__detachstate,如果设置为PTHREAD_CREATE_DETACHED 则新线程不能用pthread_join()来同步,且...

2018-07-26 11:31:35 7459

原创 Linux进程的调度策略

Linux进程的调度策略分为以下几种: #define SCHED_OTHER 0#define SCHED_FIFO 1#define SCHED_RR 2#define SCHED_BATCH 3#define SCHED_IDLE 5 可以把它们分为两大类:实时进程- SCHED_FIFO和SCHED_RR非实时进程- SCHED_OTHER、...

2018-07-25 16:50:00 2606

原创 linux互斥锁pthread_mutex_t和条件变量pthread_cond_t的妙用

  基于生产者消费者模式的MQ(msg queue)实现了线程间通信,在生产者消费者模型中通常都会用到互斥锁pthread_mutex_t来保护共享内存资源,多个线程访问共享内核空间之前都会尝试获取mutex,如果有其他线程正在使用则当前线程进入锁等待状态。这样的机制难免会带来两个问题: 1:如果两个线程同时获取mutex,则两个线程会进入死锁状态 2:如果多个线程依次获取mutex,那么这些...

2018-07-24 15:42:33 464

原创 linux等待队列 wait_queue的使用

我们先讲如何利用wait_queue,然后再讲wait_queue的内核原理如何利用wait_queue等待队列用于使进程等待某一特定的事件发生而无需频繁的轮询在不需要执行任务的时候,我们就让任务进程休眠,直到条件改变时,我们再唤醒他,执行完毕后继续让它睡眠先来看一个简单的例子:1)首先初始化等待队列头wait_queue_head_t my_queue;init_wai...

2018-07-21 19:12:10 8096

原创 linux中消息队列kfifo和信号量sem_t的用法

使用kfifo和sem_t配合来实现消息队列:由sem来管理目前可以发送和接收的总的消息数,由kfifo来存储消息。具体实现起来就是定义信号量sem_t_send和sem_t_recv,sem_t_send设为max_num,sem_t_recv设为0。消息发送前先判断sem_t_send是否为0,不为0就把sem_t_send减1,,然后将消息加入kfifo队列,同时将sem_t_rec...

2018-07-21 18:38:15 761

原创 带头结点单链表的基本操作(创建、测长、打印、插入、删除、取值、合并、排序、逆置)

单链表分为带头结点和不带头结点两种,带头结点的单链表操作起来比较简单,以下是代码(创建、测长、打印、插入、删除、取值、合并、排序、逆置)#include <stdio.h>#include <malloc.h>#include <stdlib.h>//定义链表typedef struct list{ int data; stru...

2015-06-09 10:06:43 3061

空空如也

空空如也

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

TA关注的人

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