自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

changke的博客

不积跬步,难至千里;不积小流,难成江海。

  • 博客(119)
  • 资源 (5)
  • 收藏
  • 关注

原创 Java多线程和网络编程入门学习

多线程Java中多线程的实现有两种方式,一种是继承extends Thread类,另一种是实现Runnable接口而Thread类实现了Runnable接口,他们之间存在多态性,在Java中只有单继承,而允许实现多个接口。所以常用作的创建线程的方法是实现Runnable接口。下面是两种方法的实现举例:继承Thread类创建线程public class ThreadTest { p...

2020-04-08 17:45:21 451

原创 Linux系统新定时器句柄timerfd的使用

主要数据结构struct timespec { time_t tv_sec; /* Seconds */ long tv_nsec; /* 纳秒级别 */};struct itimerspec { struct timespec it_interval; /* 间隔时间*/ struct timespec it...

2020-02-04 00:12:05 481

原创 c++ 函数对象的使用

函数对象就是像使用函数一样适用对象。比如:一个比较大小的类#include <iostream>using namespace std ;class A{ public ...

2020-01-30 00:03:25 735

原创 一个文本管控客户端的实现

【管控客户端第2版】 项目概况背景项目来源:2019 深度软件开发大赛项目名称:文件管控客户端运行环境deepin Linux x86_64 系统,理论上也兼容其他 x86_64 Linux 系统条件与限制区分服务端与客户端,一般运行在不同的机器上正式的运行环境是N(N>=2)台计算机节点,通过有线或者无线互联,且运行服务端机器有客户...

2020-01-19 19:26:30 351

原创 epoll+fanotify实现监控目录以及子目录

只说下坑点:调用fanotify_mark的时候,传文件的绝对路径,这时候使其忽略AT_FDCWD标志设置。一些功能描述在之前的博客中已经总结!源代码,欢迎Star或Fork...

2020-01-17 01:04:53 848

原创 文件监控机制fanotify学习总结

fanotify是Linux平台上新出现的一种文件监控技术,常被用作杀毒软件或者病毒程序恶意访问控制。之前有听过或使用过inotify的,都知道inotify是相比于fanotify更早的文件操作事件监控技术,fanotify是新出来的,实现的功能不比inotify多,但是他提供的对于监控文件的事件比较重要的功能权限检查和访问控制而inotify没有提供,所以这一点优势是其能存在的原因。fani...

2020-01-16 13:09:12 2405 2

原创 javaWeb学习

MVC一种将业务逻辑、数据、界面分离的方法组织代码的框架,在改进界面及用户交互的同时,不用重写业务逻辑,MVC将传统输入与输出和处理进行了分离。MVC设计模式的优点:为了实现显示和数据的分离在M和V上加了一层C,用户在V上只能通过C来实现对M的操作,一旦M有更新,M就会通知V视图更新。用户通过对事件的操作,可以触发视图的各种事件,通过控制器,以达到更新模型或数据的目的。为什么要使用框架开发?...

2020-01-07 14:21:30 317

原创 字符串是否由子串拼接

#include <iostream>#include <string>using namespace std ;int main() { string ss ; cin >> ss ; string tmp ="" ; int len = ss.size() ; int flag = 0 ; for(in...

2019-12-30 18:59:22 378

原创 字符串匹配

牛牛有两个字符串A和B,其中A串是一个01串,B串中除了可能有0和1,还可能有'?',B中的'?'可以确定为0或者1。 寻找一个字符串T是否在字符串S中出现的过程,称为字符串匹配。牛牛现在考虑所有可能的字符串B,有多少种可以在字符串A中完成匹配。 例如:A = "00010001", B = "??" 字符串B可能的字符串是"00","01","10","11",只有"11"没有出现在字符串A...

2019-12-22 16:05:32 378

原创 加速页表过程管理

虚拟内存的思想:每个进程都拥有自己的虚拟地址空间,这个空间被分割成多个块,每个块被称为一个页或者页面,每一页有连续的地址范围。这些也被映射到物理内存,但并不是所有的页面都在内存中,才能运行程序的,当程序引用到一部分在物理内存中地址空间时,有硬件执行必要的映射,当程序引用到一部分不在物理内存中的地址空间的时候,由操作系统负责将缺失的部分装入到内存并重新执行失败的指令。加速分页过程在任何分页系统中...

2019-12-21 12:08:58 331

原创 贪吃的小Q

#include <iostream>using namespace std ;//贪吃的小qint main() { int m, n ; int mid, now ; int temp ; int ok = 0 ; cin >> n >> m ; int l=1, r=m ; while(l !=...

2019-12-20 22:06:56 134

原创 c++11实现红黑树

红黑树实现过程难度主要集中在删除节点上,考虑的情况比较多!下面是删除节点的再次总结!上次的总结了一部分,现在我将它补充完整!删除节点的后继节点是父亲节点的左子树:总共四种情况当删除节点的后继节点是父亲的右子树:下面是实现的运行的运行截图:插入的多组测试用例并打印层次遍历的红黑树插入后结果:删除节点测试:源代码欢迎star和fork哦~~~...

2019-12-15 20:42:03 376

原创 红黑树(插入和删除原理)

二叉查找树(BST)是一种父亲节点的值大于左孩子的值,而小于右孩子的值,查找效率是O(logn),但是在插入方面,可能在某些情况下使整个树退化成链表。所以为了进一步实现优化,有了红黑树的数据结构。红黑树的特点:(1)在父亲节点和子节点的关系上,和BST树是一致的。(2)每个节点都有颜色标示(3)根节点是黑色(4)叶子节点为NULL,也必须是黑色(5)如果一个节点是红色,则两个孩子节点是...

2019-12-08 14:54:13 426

原创 阿拉伯转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000...

2019-12-06 23:03:08 444

原创 寻找第k个最大数

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。使用分治法解决,和快速排...

2019-12-05 16:57:18 490

原创 创建型模式和结构型模式总结

创建型模式:主要实现单实例模式,简单工厂模式,工厂方法模式结构型模式:主要实现适配器模式,桥接模式创建型模式:对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了软件的结构更加清晰,外界模块中的对象只需要知道他们共同的接口,而不清楚具体对象的实现细节,使整个系统的设计更加符合单一职责原则。创建型模式在创建了什么,由谁创建,何时创建等方面都为软件设计者提供了尽可能答得...

2019-12-04 17:15:29 857

原创 内存分配算法

首次适配算法,存储管理器沿着段链表进行搜索,找到第一个足够大的空闲块,将一部分分配给进程使用,另一部分作为空闲块,等待下一次分配。首次适配尽可能减少搜索链表节点。对首次适配进行很小的修改就能得到下次适配算法,他的工作方式和首次适配算法相同,不同点是每次找到空闲区的时候都记录当时的位置。以便下次从头开始搜索。最佳适配算法,最佳适配搜索会遍历整个链表,找到满足要求的最小空闲块,最佳适配分配的找到的...

2019-11-26 20:09:51 806

原创 买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...

2019-11-25 22:25:22 131

原创 编译原理LL(1)语法分析器实现

废话不多说了,开源代码!要是觉得好的话点个star,作为辛苦费哈!LL(1)语法分析气的实现要实现LL1文法,根据个人经验总结,需要以下步骤:我没有实现间接左递归的消除,所以处理不了间接左递归文法。下面我们来说一下实现过程。输入相关文法,使用正则表达式将文法中的空串做了清除。对文法消除直接左递归,使用以下方法:要是检测到一条文法中出现以下情况:P->Pa|b则这条...

2019-11-23 16:11:05 10234 3

原创 RCU机制学习

RCU是一组Linux内核API,实现了一种同步机制,允许多个读者与写者并发操作而不需要任何锁,这种同步机制可以用于保护通过指针访问的数据。RCU读者只需要很低的额外成本,在典型的服务器内核配置下甚至是0成本。如果可能有多个写者,写者之间需要其他同步机制,除了使用RCU API直接访问指针数据,更多的使用方式是封装API使其用于链表访问。RCU适用于读取数据量大而且可以接收读取到旧数据的场景。...

2019-10-25 17:56:50 936

转载 谈乱序执行和内存屏障

本文转载自:https://blog.csdn.net/dd864140130/article/details/56494925 10多年前的程序员对处理器乱序执行和内存屏障应该是很熟悉的,但随着计算机技术突飞猛进的发展,我们离底层原理越来越远,这并不是一件坏事,但在有些情况下了解一些底层原理有助于我们更好的工作,比如现代...

2019-10-24 20:00:41 415

原创 指令寻址方式(8086/8088CPU)

数据操作数是数据有关的操作数,即指令中操作的对象是数据、数据操作数根据其存放的位置又可以分为:立即数操作数,即指令重要操作的数据包含在指令中。寄存器操作数,指令中要操作的数据存放在指定寄存器中。存储器操作数:指令要操作的数据存储在指定的存储单元中。IO操作数:即指令要操作的数据来自或者送到IO端口。地址操作数:地址操作数是程序转移地址相关的操作数。即指令中操作的对象不是数据,而是要转...

2019-10-21 13:09:22 1834

原创 VFS剖析

VFS:为各种文件系统提供了一个通用的接口,它使得上层进程在进行与文件系统相关的操作时可以使用同一组系统调用,但是系统调用在内核中可以根据不同的文件系统执行不同的操作。在一个Linux操作系统中,存在多种的文件系统,例如ext2,ext3,ext4等,每种文件系统都有自己的组织方式,和操作方法,对于用户来说,不可能所有的文件系统都了解,所以在Linux中在应用程序和各种文件系统之间添加了一层称为虚...

2019-10-13 21:33:10 1153

原创 微机原理学习--笔记微处理器的内部结构

8086/8088内部结构从功能上可以分为总线接口单元BIU和内部执行单元EU。总线接口单元负责完成CPU和存储器以及IO接口之间的数据传送。总线接口单元内有4个16位段寄存器,即代码寄存器CS,数据段寄存器DS,堆栈段寄存器SS和附加数据段寄存器ES,一个16位的指令寄存器IP,一个20位的地址加法器。一个6字节指令队列缓冲区,一个EU通信的内部寄存器和总线控制电路等。段寄存器...

2019-10-09 19:39:38 879

原创 LevelDb源码之跳跃列表学习及C++11实现

跳跃列表是一种数据结构。他允许快速查询一个有序连续元素的数据链表。平均查找和插入的事件复杂度为O(log(n)),优于普通链表O(n)。快速查询是通过维护一个多层次的链表,并且每一层链表中的元素是前一层链表元素的子集。具体描述:在levelDb中跳跃列表每个节点的数据结构如下所示: template <typename Key, class Comparator> st...

2019-10-07 13:30:07 437

原创 键值数据库的设计实现总结(SDS)

写这个数据库也已经有段时间了,在我心中此项目的第一个版本算是完成了,所以做一下小结,更多的功能以后再继续迭代即可!1. 引言1.1 编写目的学习搭建rpc框架,自己阅读了部分redis实现源码,想实现一个加深印象,将学习的网络方面的知识学以致用。等等…1.2 项目概述客户端和服务器协议:Google Protocol bufferRPC部分实现的功能:序列化和反序列化,发送远程命令...

2019-10-05 21:56:57 2552

原创 虚拟内存原理

虚拟内存:为了更加高效并且少出错,现代操作系统提供了一种对主存的抽象概念,叫做虚拟内存。虚拟内存是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互,他为每个进程提供了一个大的,一致和私有的地址空间,虚拟内存提供三个能力:他将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在主存和磁盘之间来回传送数据,通过这种方式高效使用了主存他为每个进程提供了一致的...

2019-10-05 13:13:11 7217

原创 c++进程池实现回射服务器

进程池相对于线程池就没那么麻烦,没有条件变量,没有互斥锁,这些东西!比较简单!参考网上资料,实现一个回射服务器,尽管看着人家实现思路写的,还是出现很多问题,太菜了!确实太菜了!process.h#pragma once#include <iostream>#include <assert.h>#include <string.h>#include &...

2019-09-30 00:31:21 309

原创 操作系统学习之windows发展史

windows1.0是微软第一次对个人电脑操作系统进行用户图形界面的尝试,是基于MS-DOS的操作系统。1987年微软发行Windows 2.0,比起上一版本较受欢迎。主要原因是微软发行“运行时期版本”的Excel 和 Word for Windows,即是程序可于MS-DOS运行,然后自动引导Windows,退出程序时同时关闭Windows。Windows 3.x家族是微软于199...

2019-09-19 09:26:53 211418

原创 操作系统-计算机存储管理

计算机操作系统的主要目标抽象:内存管理方式的抽象保护:限制不同进程对内核的访问共享:各个进程共享相同的内核空间(程序中的内核段)虚拟化:操作系统为每个进程虚拟出更多的空间(虚拟内存)下面是CPU和操作系统配合下,一次内存数据访问过程:内存分配策略连续内存分配:首次适配:只要遇到空闲块,适合当前所需内存的大小,便将这一块内存分出去。最优适配:找最合适的内存空间分配。最差内存分配...

2019-09-11 22:07:55 1047

原创 微机原理学习(2)

CPU读取数据的过程:CPU如何区分读到的内存是指令还是数据?计算机区分指令和数据有以下两种方式:通过不同的时间段来区分指令和数据,在取指阶段取出的是指令,在执行指令阶段取出的就是数据。通过地址为来源区分,由PC(指令计数器)提供存储单元地址的取出的是指令,由指令地址部分提供的存储单元地址的取出的是操作数。位:表示一个二进制数码0或者1,是计算机存储处理信息的最基本单位。字节:一...

2019-09-09 19:44:44 363

原创 读《码农翻身》-我是一个线程

操作系统老师布置了一个作业让读《我是一个线程》,并写出读后感!觉得真的挺有意思! 我是一个线程, 我一出生就被编了个号: 0x3704,  然后被领到一个昏暗的屋子里,  这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说: 我们线程的宿命就是处理包裹。 把包裹处理完以后还得马...

2019-09-07 12:15:45 420

原创 计算机存储器系统

存储器是操作系统管理的重要资源之一,存储器中为CPU存放指令和数据,存储器是一个线性的字节数组,CPU能够在一个常数时间内访问每个存储器位置。存储区是一个具有不同层次,成本,访问时间的存储设备的层次结构,CPU寄存器保存着最常用的数据,<靠近CPU内部的小的,速度较快的高速缓存存储器,作为一部分存储相对较慢的主存储器中的数据和指令的缓冲区>。以上说法可能有点抽象,这么说吧,因为现在C...

2019-09-07 11:58:18 1467

原创 微机原理学习笔记(1)

冯诺依曼体系结构以二进制形式表示指令和数据。程序和数据事先存放在存储器中,计算机在工作时能够快速的从存储器中取出指令加以执行。由运算器、控制器、存储器、输入设备,输出设备五大部件组成计算机硬件系统微机体系结构的特点之一就是采用总线结构,通过总线将微处理器、存储器(RAM和ROM)、IO接口电路等连接起来。而输入输出设备则通过IO接口实现和微机之间的信息交换。总线计算机各功能部...

2019-09-04 19:23:18 1827 1

原创 基于muduo网络库思想设计的web服务器框架

项目放了好长时间,才完成文档说明,这是设计说明以及源代码,欢迎进入我的github,star,fork或者提出指导意见!

2019-08-29 23:53:30 943

原创 RPC的学习总结

这两天看RPC确实有点迷,一些东西看了忘,忘了看!加上还有一些乱七八糟的事,感觉这两天需要整理一下思路,然后根据原理,来实现一个自己的RPC框架。RPC是什么?RPC即远程过程调用,允许一台计算机调用另一台计算机上程序得到结果,而代码中不需要作额外的编程,就像本地调用一样。下面是具体的原理图:本地client接收到调用后,通过client_stub将数据封装成能够进行网络传输的消息...

2019-08-20 11:24:46 2947

原创 Google Protolcol Buffer学习

格式说明及编译test.protosyntax = "proto2";package tutorial;message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOM...

2019-08-20 00:08:40 437

原创 二叉树的子结构

* 树的子结构 * * 题目: * 输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 * 二叉树的定义如下: * * 问题: * 1. 树中的指针操作 * 2. 边界条件的检查先在A中找出所有与B的根节点相同的节点,然后遍历B树和这些节点,判断只要找到一个子树完全相同,就输出结果即可!#include <iostre...

2019-08-18 17:03:48 184

原创 逆置链表

/* * 题目: * 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 * 链表结点定义如下 * * 问题: * 1. 单向链表的遍历 * * 思路: * 1. 取出第一个结点和第二个结点,将第一个结点的后继结点设置为 null * 2. 取出链表中两个相邻的结点 A、B * tmp =...

2019-08-18 15:20:02 615

原创 DNS服务器原理学习

在使用浏览器时,要访问一些网站的话,就是输入相应网站提供给公众的域名进行访问,但是学过网络编程的也知道,这背后隐藏从域名->IP的转化过程,这就是我们今天要说的内容。主要说说折背后的工作原理吧!DNS(域名系统)是互联网的中心部分,提供网站名称到实际IP的转化服务,所以也称域名系统为域名解析服务器。解析总共六步:迭代查询本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到...

2019-08-07 21:10:33 553

影院管理系统GUI界面

基于javafx GUI设计,mysql进行数据持久化的C/S版影院管理系统。

2019-06-12

电力管理.exe

电力管理系统c++实现

2019-05-30

Linux c++ 实现哈夫曼文件压缩与解压+迷宫

使用哈夫曼编码实现文件压缩与解压,产生随机迷宫,并实现最短通路(程序是在ubuntu18.10下跑的)

2019-01-10

Linux c++实现哈夫曼编码实现文件压缩器与解压器

程序在Linux下能实现对任意文本文件的压缩与解压,包括中文字符,英文字符等,最终压缩占空间大小比是 压缩文件:源文件约为1:2。

2019-01-07

Linux下c++实现随机迷宫和最优通路的查找

用bfs 算法实现最有通路的查找,dfs产生随机迷宫。并将走最短路线的动态图呈现出来。

2019-01-07

空空如也

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

TA关注的人

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