自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DW___的博客

菜鸟程序猿

  • 博客(63)
  • 收藏
  • 关注

原创 【JVM】GC算法、回收器分析

GC即Garbage Collection是指Java中的垃圾回收。虚拟机或者docker将内存划分为不同的物理区。JVM内存主要由新生代、老年代、永久带构成。

2021-06-19 18:21:44 146

原创 【JVM】jvm参数分析

-Xms:初始堆。默认是物理内存的1/64(<1gb) 。默认(MinHeapFreeRatio参数可以调整)空余堆小于40%事,JVM就会zeng

2021-06-10 20:49:36 1515

原创 【JVM】jvm内存区域分析

jvm(java virtual machine)其实就是Java虚拟机的缩写Java程序是交给jvm执行的,我们在谈Java内存区域划分实际上就是指JVM内存区域划分。Java

2021-06-06 16:21:36 159 1

原创 LeetCode -- 两整数之和

int getSum(int a, int b) { int sum, carry; sum = a ^ b; //异或这里可看做是相加但是不显现进位,比如5 ^ 3 /*0 1 0 1 0 0 1 1 ------------ ...

2019-06-03 21:28:08 225

原创 LeetCode -- 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。class Solution {public: int rob(vector<int&g...

2019-05-29 19:09:25 181

原创 LeetCode --- 爱生气的书店老板

今天,书店老板有一家店打算试营业customers.length分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第i分钟生气,那么grumpy[i] = 1,否则grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧...

2019-05-29 17:42:31 244

原创 创建树、先序遍历和中序遍历创建树、后序遍历和中序遍历创建树

BtNode * CreateTree1(){ BtNode *s = NULL; ElemType item; cin>>item; if(item != '#') { s = Buynode(); s->data = item; s->leftchild = CreateTree1(); s->rightchild = CreateT...

2019-05-16 19:15:02 443

原创 二叉树的先序遍历、中序遍历、后序遍历、层次遍历

本篇博客介绍二叉树的先序遍历、中序遍历、后序遍历以及层次遍历先序遍历:根节点---左子树---右子树中序遍历:左子树---根节点---右子树后序遍历:左子树---右子树---根节点层次遍历:每一层按照从左到右依次遍历先序遍历结果:1 2 45 7 8 3 6中序遍历结果:4 2 7 5 8 1 3 6后序遍历结果:4 7 8 5 2 6 3 1层次遍历结果:1...

2019-05-15 16:17:10 855

原创 LeetCode -- 奇偶链表

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。思路:规定head为奇链表的头结点,o为奇链表的尾节点;p为偶链表的头结点,e为偶链表的尾节点ListNode* od...

2019-05-11 18:11:57 111

原创 【面试】求链表的环入口点

环入口点:我们设A是链表的起点,B是环的入口点,C是环内快慢指针的相遇点。两个快慢指针定义为slow和fast.slow走的路程:A->B->C;fast走的路程:A->B->C->B->C;2*(x+y) = x+y+z+y ===> x=z;即A到B的路程等于C->B的路程;//环的入口点List* FinLoop...

2019-05-11 17:47:50 117

原创 LeetCode -- 对链表进行插入排序

对链表进行插入排序。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。ListNode* insertionSortList(ListNode* head) { if(head == NULL...

2019-05-11 10:53:33 155

转载 ptmalloc

内存管理可以分为三个层次,自底向上分别是:操作系统内核的内存管理 glibc层使用系统调用维护的内存管理算法 应用程序从glibc动态分配内存后,根据应用程序本身的程序特性进行优化, 比如使用引用计数std::shared_ptr,apache的内存池方式等等。 当然应用程序也可以直接使用系统调用从内核分配内存,自己根据程序特性来维护内存,但是会大大增加开发成本。 ...

2019-05-10 15:03:19 246

原创 LeetCode~重排链表

思想:1、两个指针(快慢指针)找到中间位置,将链表分为两部分。 2、将后半部分逆序 3、将后半部分插入到前半部分空位处void reorderList(ListNode* head) { if(head==NULL || head->next==NULL) { return; ...

2019-05-10 13:58:22 177

原创 LRU

LRU全称Least Recently Used,也就是最近最少最少使用的意思,是一种内存管理算法,最早利用与Linux操作系统中。LRU算法基于一种假设:长期不被使用的数据,在未来使用的几率也不大。因此数据内存达到一定的阈值时,我们要移除最近最少被使用的数据。如果现在有一个用户系统(使用哈希表存储用户信息),但是由于用户太多导致服务器宕机了,我们可以使用LRU算法,LRU算法中存在一种数...

2019-05-10 13:53:15 429

原创 条件变量

概述:条件变量是用来等待线程而不是上锁的,条件变量通常和互斥锁一起使用。条件变量之所以和互斥锁一起使用,主要是因为互斥锁的一个明显的特点就是它只有两种状态:锁定和非锁定,而条件变量可以通过允许线程阻塞和等待另一个线程发送信号来弥补互斥锁的不足,所以互斥锁和条件变量通常一起使用。当条件满足的时候,线程通常解锁并等待该条件发生变化,一旦另一个线程修改了环境变量,就会通知相应的环境变量唤醒一个或...

2019-05-09 08:58:08 148

原创 Linux~惊群现象

惊群效应也叫做雷鸣群体效应。惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终只有一个进程(线程)获得这个时间的“控制权”,对这个事件处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。为了更好的理解何为惊群,举一个很简单的例子,当你往一群鸽子中间扔一粒谷...

2019-05-06 23:08:33 217

原创 进程、线程、协程

进程是什么呢?直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。进程拥有代码和打开的文件资源、数据资源、独立的内存空间。线程又是什么呢?线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。线程拥有自己的栈空间。对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。...

2019-05-05 21:13:44 131

原创 sockpair创建双向通信的管道

Linux下的sockpair: sockpair创建了一对无名的套接字文件描述符,描述符存储了一个二元数组,例如sv[2],这对套接字可以双工通信。即每一端可以写没一端也可以可以读。这个在同一个进程中也是可以进行通信的,向sv[0]中写入,就可以从sv[1]中读取(只能从sv[1]中读取);也可以在sv[1]中写入,然后从sv[0]中读取;但是,若没有在0端写入,而从1端读取,则1...

2019-05-02 23:36:01 447

原创 内存泄漏

1.什么事内存泄漏指因为疏忽或者错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,而对该段内存失去了控制,因而对内存造成了浪费。2.对于C/C++这样没有Garbage Collection(垃圾回收机制)的语言来讲,有两种类型的泄漏堆内存泄漏:对内存指的是程序执行中依据需要分配通过malloc,reall...

2019-04-29 21:55:27 107

原创 malloc底层实现

本文大致讲解一下linux下malloc的底层实现原理。首先malloc肯定是从堆中分配内存,而堆又在用户空间中占据什么位置?通过下面这张图可以看出来:很明显是32位系统,寻址空间是4G,linux系统下0-3G是用户模式,3-4G是内核模式。而在用户模式下又分为代码段、数据段、.bss段、堆、栈。各个segment所含内容在图中有具体说明。其中bss段:存放未初始化的全局变量和局...

2019-04-21 16:20:00 586

原创 LeetCode 二叉树的层次遍历

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7],运用队来实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * T...

2019-04-11 23:09:02 102

原创 LeetCode 不同的二叉搜索树

给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?当输入n为0时,是个空树,空树也是个二叉搜索树当n为2时:vec[2] = vec[0]*vec[2] +vec[1]*vec[1] +vec[2]*vec[0];当n为3时:vec[3] = vec[0]*vec[3] ...

2019-04-11 14:50:35 70

原创 LeetCode k个一组翻转链表

给出一个链表,每k个节点一组进行翻转,并返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当k= 2 时,应当返回:2->1->4->3->5当k= 3 时,应当返回:3->2-&gt...

2019-04-09 17:37:38 128

原创 GET和POST它俩到底是神马区别!

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻...

2019-04-05 11:16:18 245

原创 朴素算法与KMP算法

朴素算法#include <iostream>using namespace std;int BF(string s1, string s2, int pos){ int i=pos; int j=0; while(i<s1.length() && j<s2.length()) { if(s1[i] == s2[j]) {...

2019-04-02 21:35:44 318

原创 大数计算问题

大数相乘给定两个数据“1234”与“3456”#include <iostream>#include <string>#include <vector>#include <stdlib.h>#include <assert.h>using namespace std;struct bigcheng2{ strin...

2019-03-25 11:07:11 328

原创 LeetCode~实现pow函数

double myPow(double x, int n) { if(x==0) return 1.0; if(n==1) return x; unsigned int t; if(n > 0) { t = (unsigned int)n; } else ...

2019-03-18 18:26:19 436

原创 LeetCode5 ~ 查找最长的回文子串

给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"判断回文,要考虑是奇数还是偶数string longestPalindrome(string s) { int n = s.size...

2019-03-16 23:31:46 80

原创 I/O复用

使用I/O复用的场景:(1)当客户处理多个文件描述符时(一般是交互式输入和网络套接口),必须是I/O复用(2)当一个客户端同时处理多个套接口时,而这种情况是可能的,但很少出现(3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用(4)如果一个服务器既要处理TCP,又要处理UDP,这时要用I/O复用(5)如果一个服务器处理多个服务或多个协议,...

2019-03-15 16:02:59 161

原创 【C++】继承和多态[2]

继承:      单继承      多继承             菱形继承               存在的问题:间接基类的数据会出现多份,会导致访问出错。解决方法:虚表指针             虚继承               虚基类构造优先级高               非虚基类布局优先于虚基类#include&lt;iostream&gt;c...

2019-01-21 15:27:17 79

原创 【c++】工厂模式

工厂模式的两个最重要功能:(1)定义创建对象的接口,封装了对象的创建(2)使得具体化类的工作延迟到子类中1.简单工厂模式#include&lt;iostream&gt;class Product{public: Product(std::string name):mname(name) {} virtual void operation() = 0; virtua...

2019-01-20 20:19:32 209

原创 【C++】继承和多态[1]

C++的三大特性:继承、多态、封装这篇博客讨论下继承和多态继承继承的本质是代码复用。继承了什么: 除构造函数和析构函数以外的所有成员继承了作用域继承写法:类标识 类名:继承方式  基类名继承和派生的关系: 派生类的内存布局:派生类对象的构造和析构:构造:1、系统调用基类的构造2、系统调用派生类的构造析构:1、系统调用派生类...

2019-01-16 22:48:31 182

原创 【C++】内存池

       C++中系统没有自动回收管理内存的方式,必须要用new和delete来申请和释放内存。但是如果频繁使用new和delete会有效率问题的存在和内存碎片的产生。       内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等的内存块留做备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配的效率得到提升。...

2019-01-13 11:13:45 460

原创 【C++】类和对象2

赋值运算符的重载函数(若系统默认给出的赋值运算符的重载函数为浅拷贝函数)实现过程:1.判断是否为自赋值   2.释放旧资源     3.申请新资源    4.赋值const:1.防止修改实参   2.接收隐式生成的临时对象#include &lt;iostream&gt;class Test{public: Test(int a, int b) { std::cout...

2018-12-05 22:45:28 77

原创 【C++】类和对象1四个默认的函数的小总结

面向对象oop的基本思想 C++三大特征:封装、继承、多态public:任意位置访问protected:本类、子类中访问private:本类中访问 struct和class的一些小区别:默认的继承访问权限:struct是public,class是private初始化的方式不同 this(thiscall)类中普通的成员方法中有默认的参数普通成...

2018-11-26 22:52:48 122

原创 C与C++的区别_const_引用

引用_const1、 引用就是一个内存单元的别名 (底层以指针的方式来支持引用,在引用使用的地方,系统自带解引用过程)引用一定要初始化引用引用的变量一定要能取地址引用不可改变的只能访问引用变量所引用的内存块的内容 int &amp;b = a;   b引用a,b指向a的内存块,即她俩地址相同#include &lt;iostream&gt;using names...

2018-11-24 20:06:21 164

原创 函数堆栈调用

函数堆栈调用对以下代码进行分析:#include &lt;stdio.h&gt;int sum(int a,int b){ int tmp = 0; tmp = a + b; return tmp;}int main(){ int a = 10; int b = 20; sum(a,b); return 0;}我...

2018-11-20 11:04:41 135

原创 父子进程那些事儿

探讨父子进程的数据(全局数据,栈区数据(栈区数据),堆区数据,)、文件描述符是否共享。全局数据:测试代码如下:编译链接结果:因此全局变量数据父子进程不共享 栈区数据(局部变量):代码测试:测试结果如下:因此父子进程不共享局部变量堆区数据:测试代码:测试结果如下:因此父子进程不共享堆区数据文件描述符代码测试:...

2018-11-14 14:21:07 188

原创 编译 链接 运行原理

一、在80386之前是实模式,80386之后是保护模式所谓的32位、62位是指 ALU的宽度,即一次性能处理最大数据长度(比特为单位)在Windows操作系统下4G虚拟内存空间是,用户空间:内核空间是1:1在Linux操作系统下4G虚拟内存空间是,用户空间:内核空间是3:1Linux4G虚拟地址空间分配大致如下图                             ...

2018-11-12 21:36:36 299

原创 Linux操作系统上的基本操作(二)

命令模式下的命令:光标的移动:shift+6:移动到当前行的首列shift+4:移动到当前行的尾列shift+g:当前文件的最后一行gg:当前文件的第一行n+shift+g:移动到n行shift+h:移动到当前屏幕的首行shift+l:移动到当前屏幕的尾行shitf+m:移动到当前屏幕的中间行 n+dd:删除n行dd :删除当前行d+shift+...

2018-10-16 18:56:40 156

空空如也

空空如也

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

TA关注的人

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