自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (1)
  • 收藏
  • 关注

原创 webpack 原理剖析

一、webpack 启动过程分析###1.从webpack命令行说起(此部分可视为进入构建前处理)通过npm scripts 运行 webpack开发环境:npm run dev生产环境:npm run buildwebpack运行的两种方式1)通过 webpack 命令直接运行webpack entry.js bundles.js2)通过 package 中的配置的 webpack 命令运行这个过程发生了什么?在命令行运行命令后,npm 会让命令行工具进入node_module

2020-09-14 00:07:36 466

原创 基于single-spa+vue的前端微服务项目实践

基于single-spa + vue 的前端微服务拆分及实践项目**一、 前端微服务化的背景和价值:背景:业务模块呈现快速增长趋势,孵化的业务模块也逐渐增多。价值:让产品的前端架构能快速、插件化的支持业务的增加二、设计目标解耦产品前端各业务模块,支持独立开发、发布和部署;设计出提供支持插件化调整业务模块、可多团队共同维护的前端架构;三、系统分析1.微前端架构简介什么是前端微服务?将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用...

2020-06-18 10:04:59 3471 3

原创 《java设计模式》读书笔记

一、设计原则1、单一职责一个类,只有一个引起它变化的原因,应该只有一个职责;类的职责越少,对象之间的依赖关系就越少,耦合度就越弱,受其他对象的牵制和约束就越少,从而保证了系统的可扩展性。2、里氏替换原则所有引用基类的地方必须透明的使用其子类对象,反之则不行。即:在代码中只要父类能出现的地方,子类就能出现,这就要求子类必须具备基类的全部接口,但子类可以有自己的个性。应用:1)在编译期,Java 语言编译器会检查一个程序是否符合里氏替换原则。2)当多个类之间存在继承关系时,通常使用父类或接口来指向子

2021-04-30 11:31:12 362 1

原创 webpack 的 Loader 和 Plugin 简介

Loader作用:webpack本身只能打包Javascript文件,对于其他资源例如 css,图片,或者其他的语法集,比如jsx是没有办法加载的,这就需要使用对应的loader对资源进行转换并将其加载进来。定义:loader 是一个导出为函数的 JavaScript 模块一组链式的 loader 将按照相反的顺序执行。loader 链中的第一个 loader 返回值给下一个 loader。在最后一个 loader,返回 webpack 所预期的 JavaScript。webpack 采用的是 C

2020-09-15 00:02:13 344

原创 (项目)万年历online

一、web框架原理图 如果服务器采用非CGI方式处理浏览器的请求,则直接返回浏览器请求的资源即可。采用CGI方式的话则要执行CGI程序: 二、多线程http服务器的工作方法 1.http/1.0版本采用的是短连接: 我们要搭建的是多线程服务器,并且使用短连接,所以每当建立一个连接之后,就创建一个线程去处理这个请求,并将这个线程设置成分离状态,然后主线程继续处于监听

2017-09-15 01:13:12 614

原创 文件压缩---huffman算法

万年历online项目链接点击这里本篇文章主要包含4个方面: 1.哈夫曼算法实现压缩的原理 2.具体压缩及解压过程思路阐述 3.项目中遇到的问题 4.项目扩展一、原理简述: huffman算法实现文件压缩的主要原理是通过huffman编码来重新表示字符,使得出现频率高的字符编码短,出现少的字符编码长。当用编码表示原文件时,总体的bit位时相对减少的。但当大部分字符出现的频率都差不多

2017-09-10 12:45:02 1115

原创 非递归二叉树

由于栈和递归原理相同,且递归创建二叉树的效率较低,所以我们可以借助栈来实现二叉树的非递归创建以及遍历。#include<iostream>#include<stack>using namespace std;template <class T>struct BinaryTreeNode{ BinaryTreeNode* _left; BinaryTreeNode* _righ

2017-08-22 11:20:13 290

原创 递归实现二叉树

二叉树是一种非线性结构,用途广泛。二叉树的每个结点的度都不大于2,所以一般用二叉链表来实现二叉树。二叉树可以分为根结点,左子树和右子树,左子树、右子树依然这么划分,所以用递归实现二叉树的逻辑是比较简单的,只需不断对子树进行划分即可。#include<iostream>#include<assert.h>#include<queue>using namespace std;template <cl

2017-08-21 20:15:12 525

原创 C++ 智能指针(及循环引用问题)

何所谓智能指针? 所谓的智能指针就是智能/自动化的管理指指针所指向的动态资源的释放。 智能指针的产生是由于C++中没有内存的自动回收机制,每次new出来的空间都需要delete,而个别情况下,总是无法及时的delete,或者异常导致程序提早退出,造成内存泄漏,故而产生智能指针。智能指针的发展可分为三个阶段 (1)auto_ptr c++98 (2)scoped_ptr/s

2017-08-06 00:07:20 4302

原创 多线程、多进程TCP服务器比较

背景小知识 关于进程和线程 1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位; 2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线; 3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见; 4.调度和切换:线程上下文切换比进程上下文切换要快得多。

2017-08-03 22:23:51 1494

原创 C++实现动态顺序表

#include<iostream>#include<assert.h>using namespace std;typedef int DataType;class Seqlist{ friend ostream& operator<<(ostream&_cout, const Seqlist&s);public: Seqlist() :_size(0)

2017-08-03 11:51:52 433

原创 C++ 实现双向链表

#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct ListNode{ ListNode* prev; ListNode* next; DataType data; ListNode(DataType x) :data(x)

2017-08-03 09:25:18 345

原创 select、poll、epoll优缺点总结

之前在我的几篇文章中已经对这三个服务器进行了简单的实现: IO多路复用之select IO多路复用之poll IO多路复用之epollselect、poll、epoll共同优点: (1)占用资源少,因为是单进程处理。(相比于多进程、多线程) (2)性能好,可一次等待多个进程。一、select服务器总结: select优点: ( 1)select()的可移植性更好,在某些Unix系统上

2017-08-01 22:52:19 1600

原创 IO多路复用之epoll

背景: 在Linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。   相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。   相对于select和poll来说,epoll更加灵活,

2017-08-01 21:23:50 737

原创 IO多路复用之poll

poll和select区别: ① poll服务器监视的文件描述符无上限; ② poll将输入、输出参数进行分离。一、poll函数 函数格式如下所示:#include <poll.h>int poll ( struct pollfd * fds, unsigned int nfds, int timeout);不同与select使用三个位图来表示三个fdset的方式,poll使用一个 poll

2017-08-01 19:47:55 589

原创 IO多路复用之select

1、背景知识 我们首先来看看服务器编程的模型,客户端发来的请求服务端会产生一个进程来对其进行服务,每当来一个客户请求就产生一个进程来服务,然而进程不可能无限制的产生,因此为了解决大量客户端访问的问题,引入了IO复用技术。   即:一个进程可以同时对多个客户请求进行服务。   也就是说IO复用的“介质”是进程(准确的说复用的是select和poll,因为进程也是靠调用select和p

2017-08-01 19:08:25 477

原创 C++ 多态模型的剖析

一、多态的概念 所谓的多态性,就是不同的对象收到相同的消息时产生不同的动作,即同一个函数名下定义的不同功能的函数,这些函数执行不同但又有类似的操作,从而可以使用相同的方式来调用这些不同功能的同名函数,即“一个接口,多种方法”。二、多态的分类 1.静态多态(重载函数 模板等): 编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式的类型转换),可推断出要调用那个函数,

2017-07-26 22:08:30 445

原创 C++ 继承的相关问题

一、继承存在的意义: 所谓继承就是从先辈处得到属性和特征。类的继承就是新类从已经有类得到其已有的特性,新类称之为派生类,已有类被称之为基类。 继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。 简单的继承关系例: 体会:在原有的基础上进行扩展、增加功能。二、继承定义的格式: class 派

2017-07-22 01:04:05 407

原创 gdb调试多线程和多进程

一、关于gdb gdb是linux下的代码调试工具,使用前需要在源代码生成时加上-g选项,使用时命令:gdb+文件名,退出时命令:ctrl+d或quit调试过程常用命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。 r或run:运行程序。 s或step:进入函数调用 b

2017-07-15 15:13:39 439

原创 C++ 写时拷贝

首先来了解浅拷贝和深拷贝: 1、浅拷贝,是指原对象与拷贝对象共用一份实体,仅仅是对象名字不同而已(类似引用,即对原对象起别名),其中任何一个对象的改变都会导致其他的对象也跟着改变。2、深拷贝,是指拷贝一块跟原对象大小一样的数据块,即给新对象重新开辟一块空间,并将原对象的内容拷贝下来,这样原对象和现有对象指向各自的数据块,析构时释放各自的数据块。3、写时拷贝(Copy On Write):给类增加一

2017-07-11 00:01:26 418

原创 C++实现String

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<assert.h>using namespace std;class String{ friend ostream&operator<<(ostream&_cout, const String&s); friend istream&operator>>(istre

2017-07-10 17:16:03 355

原创 C++构造拷贝中拷贝的N种调用情况

一、C++对传参和传返回值时构造的优化处理总结: 1.传参和传返回值时,如果引用类型,则不调用拷贝构造函数,直接返回别名; 2.当语句为一个表达式时,编译器会选择优化,将构造函数和拷贝函数合并; 3、调用构造函数和拷贝构造函数的次数等于调用析构函数的次数; 4、只有当一个对象已经存在时,调用的才是赋值运算符重载,若不存在调用的则是构造函数; 二、完成下列题目: Test1中调用了次AA的

2017-07-09 19:43:39 444

原创 C++内存管理

一、malloc/free和new/delete之间关系和差异 (1)操作对象有所不同: malloc和free是C++/C语言的标准库函数,new/delete是C++运算符。 malloc/free无法满足动态开辟对象的空间的要求,因为对象在创建的同时要执行构造函数,对象消亡的时候会自动调用析构函数。 (2) 用法上也有所不同 malloc原型:void*malloc(size_

2017-07-07 23:12:18 305

原创 C++日期计算器的实现

test.h#include<iostream>using namespace std;class Date{ friend void print_date(int year, int month);//打印日历 friend ostream& operator<<(ostream&_cout, const Date& d); friend istream& operat

2017-07-06 14:28:55 2778

原创 C++操作符重载及实现简单的复数类Complex

操作符重载: 重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的操作符符号。 操作符重载也是一个函数,具有返回值和形参表。它的形参数目与操作符的操作数目相同。 函数调用操作符可以接受任意数目的操作数。 使用运算符重载可以提高代码的可读性。 返回类型 operate 操作符(参数列表); 建议: 使用重载操作符,可以令程序更自

2017-07-03 00:02:43 918

原创 网络---TCP协议的握手与挥手

一、三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接; 位码即tcp标志位,有6种标示:SYN(synchronous建立联机)ACK(acknowledgement 确认)PSH(push传送)FIN(finish结束)RST(reset重置)URG(urgent紧急) 各个状态的意义如下: LISTEN - 侦听来自远

2017-06-27 00:12:33 599

原创 网络---TCP协议中的urg和psh的区别

首先,我们来先来了解TCP端格式 其中有六个控制位: 1)URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;(2)ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0;(3)PSH:这个标志位表示Push操作。所谓Push操作就

2017-06-26 23:14:43 1407

原创 C++类和对象

一、类和对象 1.面向对象程序设计: 概念:(ObjectOrientedProgramming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。 对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 2.类的作用域 (1)每个类都定义了自己的作用域,类的成员(成员函数/成员变量)都在类的这个作用域内,成员函数内可任意访问成

2017-06-26 17:05:59 398

原创 网络---路由生产算法调研

一、相关名词 1.路由 路由(名词):数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。 路由(动词):从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。 2.路由节点 ⼀个具有路由能⼒的主机或路由器,它维护⼀张路由表,通过查询路由表来决定向哪个接口发送数据包。 3.接口 路由节点与某个⽹络相连的⽹卡接口。 4.

2017-06-25 16:13:28 415

原创 网络---NAT技术与代理服务器调研

一、关于NAT(网络地址转换) 1、NAT是地址转换协议,将内网地址转换为公网地址。 简单的说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共IP地址紧缺的问题。 2、NAT的工作原理:

2017-06-25 15:40:58 526

原创 网络---ARP协议、脚本

一、ARP协议: 1.什么是ARP?    ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。   2.为什么要有ARP? OSI 模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址

2017-06-24 16:03:08 612

原创 Linux进程间通信---管道篇

一、进程间通信 每个进程各自有不同的用户空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲取,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。 进程间通信的本质是让不用的进程能看到一份公共资源。 进程间通信主要用于:数据传输、资源共享、通知事件、进程控制

2017-06-23 09:19:31 439

原创 c++ 基础知识入门

一、命名空间 命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个集团的声明放在同一个命名空间中。 原来C++标识符的作用域分成三级:代码块({……},如复合语句和函数体)、类和全局。现在,在其中的类和全局之间,标准C++又添加了命名空间这一个作用域级别。 命名空间可以是全局的,也可以位于另一个命名空间之中,但是不能位于类和代码块中。所以,

2017-06-19 21:52:49 351

原创 网络---CRC校验

CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式奇偶校验 所谓通讯过程的校验是指在通讯数据后加上一些附加信息,通过这些附加信息来判断接收到的数据是否和发送出的数据相同。比如说RS232串行通讯可以设置奇偶校验位,所谓奇偶校验就是在发送的每一个字节后都加上一位,使得每个字节中1的个数为奇数个或偶数个。比如我们要发送的字节是0x1a,二进制表示为0001 1010。 采用奇校

2017-06-19 20:30:46 1054

原创 网络---端口

一、关于端口: IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来表示网络中的唯一进程。 TCP/IP 的运输层用一个16位的端口号来标志一个端口,端口号只具有本地意义,它只是为了标志本计算机应用层的各个进程在和运输层交互时的层间接口。在互联网不同计算机中,相同的端口是没有关联的。 16位的端口号可允许有2^16-1

2017-06-19 19:50:14 743

原创 守护进程

一、什么是守护进程?linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务不受用户注销的影响,他们一直运行着。这种进程有一个名字就叫做守护进程(Daemon)。 它独立于控制终端,并且周期性的执行某种任务或等待处理某些发生的事件。 我们有ps axj 命令查看系统

2017-06-16 17:15:33 565

原创 子进程的异步等待方式

等待分为阻塞等待和非阻塞等待,我们非阻塞等待来实现异步。 1.子进程终止时会给父进程发送SIGCHID信号 2.为了验证子进程在退出时确实向父进程发送了SIGCHID信号,我们对SIGCHID信号进行捕捉。 很显然我们是捕捉到SIGCHID信号的。3.wait()和waitpid()的区别 <1>wait 函数:用来等待任何一个子进程退出,由父进程调用。include<sys/ty

2017-06-16 16:44:21 518

原创 C语言实现单链表---面试题详解

一、比较顺序表和链表的优缺点,说说他们分别在什么场景下应用空间上的比较(Space)a. 空间的开辟: 顺序表的实现一般是实现连续开辟一段空间(或根据需求动态连续开辟空间),然后在进行数据的增删查改(静态顺序表),所以顺序表一般是固定空间大小的; 单链表则是一次只开辟一个结点的空间,用来存储当前要保存的数据及指向下一个结点或NULL的指针,所以单链表的空间大小时动态

2017-06-16 12:44:17 905

原创 捕捉信号与sleep模拟

一、捕捉信号1、对信号的三种处理方式:(1)忽略此信号:大多数信号都可使用这种方式进行处理,但有两种信号却决不能被忽略。它们是:SIGKILL和SIGSTOP。这两种信号不能被忽略的,原因是:它们向超级用户提供一种使进程终止或停止的可靠方法。另外,如果忽略某些由硬件异常产生的信号(例如非法存储访问或除以0),则进程的行为是示定义的。 (2)直接执行进程对于该信号的默认动作 :对大多数信号的系统默认

2017-06-14 11:32:42 404

原创 线程安全和可重入函数

一、什么是线程安全? 1.线程安全就是指多线程访问同一代码,不会产生不确定的结果。也是就说线程安全就是多线程访问时,采用加锁机制,当一个线程访问该类的某个数据时,用锁对数据进行保护,其他线程不能访问该数据直到该线程读完,其他数据才可以使用,线程安全不会出现数据不一致或者数据污染。反之,线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得数据是脏数据。 2.有这么四类函称为线程

2017-06-13 23:20:57 362

eclipse(包含birt).rar

eclipse 包含了 birt 的安装包(all in ine)

2021-06-24

空空如也

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

TA关注的人

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