自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何编写Java单元测试(TC)?

被测类public class Student { @Autowired private Card card; public boolean judgeNumber(Long uid) throws ServiceException { if (uid.equals(-1)) { throw new RuntimeException(); } if (uid.equals(3)) {

2021-07-16 00:57:36 442 2

原创 数据包是怎样从内网发往公网并且获得公网返回的数据包

一个路由器最少有两张网卡,一张网卡对外即公网网卡,是运营商在出厂的时候赋予的.另一张网卡对内, 即内网网卡路由器的路由表中最少也有两条规则1>第一条规则匹配的 是 默认网关 (后面会有解释) —公网网卡2>第二条规则匹配的 是 局域网                 —内网网卡路由器是怎样分配IP地址呢?每当我们的pc连接wifi的时候,路由器就会给这台pc一个IP地址. 因为路由器上面跑这一个服务, DHCP server 程序. 对应的是,pc上肯定也会跑着 DHCP clien

2020-09-05 17:37:24 2759 1

原创 网络之旅(一)

我们以一张图片来开始我们的网络之旅。当我们要访问一个服务器时,需要知道这个服务器的IP地址。否则是没有办法访问的。但是我们日常访问Web服务器时,也没有输入IP地址呀,怎么也可以访问?我们以在游览器中输入 https://www.csdn.net/ 为例。其实计算机是不认识 https://www.csdn.net/ 的。没有关系,计算机不知道它可以问知道的人。谁知道呢? —DNS...

2019-11-05 23:19:02 274 2

原创 ubuntu -- 下列软件包有未满足的依赖关系:xxx E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

问题描述:网上目前解决办法解决办法一。这篇帖子的解决方案是缺什么下载什么。按照这个方法,执行到某一步,要卸载我4G左右的东西。 吓我一跳,赶紧终止。解决方法二。这篇帖子的思路是aptitude。但是我的建议是慎用。大二的使用也是为了解决这个问题,使用了aptitude, 给我卸载了好多程序。然后系统崩掉了。我的想法: 换源。可以尝试使用不同的源。最初使用的是ubuntu自带的源。然后换成ali源。最后换成清华源之后ok。将不同的源加到 /etc/...

2022-01-20 19:48:22 1096

原创 TCP/IP详解(一)

TCP(Transmission Control Protocol, 传输控制协议)TCP协议: 在IP协议之上,解决网络通讯可依赖问题TCP: 面向连接的, 可靠的, 基于字节流的传输层通信协议.面向连接: 一对一的,点对点的连接. 是指使用TCP的两个应用程序必须在他们可交换数据之前, 通过相互联系 (三次握手)来建立一个TCP连接可靠的: TCP能保证一个报文最终都能到达接收端基于字节流: 表示我们的消息是没有边界的, 无论消息有多大, 都可以进行传输. 其次, 基于字节流是一个有序的,当

2020-12-20 21:50:53 236

原创 容器技术及其核心特性(cgroups & namespace)

什么是容器技术容器技术也被称为容器虚拟化。是虚拟化技术中的一种。虚拟化技术主要包括硬件虚拟化,半虚拟化和操作系统虚拟化。容器虚拟化是操作系统虚拟化的一种,是轻量级的虚拟化技术。虚拟化技术分类容器技术的核心特性CgroupNamespace...

2020-12-06 16:40:35 826

原创 STL源码剖析(三) ---list

gcc 版本4.4.0这次我们看看STL中list是怎样设计的。首先这个list要分为两个部分,list结构和list节点的结构。首先看看list的节点(_List_node) 。list 节点由于 _List_node 是继承 _List_node_base。所以先来看看_List_node_basestruct _List_node : public _List_node_base_List_node_base 中只有两个数据成员: 一个向前的指针,一个向后的指针。从这里可以看出list是

2020-11-17 16:08:15 147

原创 浅谈-计算机加电后的启动过程(二)

在浅谈-计算机加电后的启动过程(一)中,已经谈了从开机后到实模式的过程, 这次我们继续浅谈一下保护模式下发生的事情。这次我们先看看都发生了那些事, 然后在谈为什么会有这些事情。总览上一篇谈到了加载器, 加载器是从实模式过渡到保护模式的。在加载器中,首先先建立全局描述符表。接下来准备进入保护模式。进入保护模式的三要素:打开A20加载GDT将cr0的pe位置为1进入保护模式后,启用分页机制,然后开始加载内核。实模式和保护模式起初是没有实模式这一说法的。只是这种模式有很多缺点,然后为了克

2020-11-09 00:07:47 380

原创 浅谈-计算机加电后的启动过程(一)

加载BIOS当PC的电源打开后, 80x86结构的CPU将自动进入实模式.并且CPU的 cs:ip 寄存器被强制初始化为 0xF0000 : 0xFFF0.先抛出来个问题, 为什么 cs:ip 寄存器会被初始化为0xF0000 : 0xFFF0 ?继续往后看,当主机加电后,第一个运行的软件是BIOS,但是此时由于计算机刚加电,内存里还没有数据,所以BIOS并不是放在内存中的,而是放在ROM(只读存储器).而BIOS由硬件来加载,被加载到 0xF0000~0xFFFFF处.上面提到过,cs:ip被初始

2020-11-05 15:00:16 2203

原创 浅谈虚拟内存(上)

前言:在谈虚拟内存之前,我们先追本溯源,看看在虚拟内存出现之前,存储器抽象是什么样的。并且它是怎样一步一步进行演进的。无存储器抽象没错,是无存储器抽象,在早期的计算机中,没有存储器抽象这个概念。每一条指令都是直接在物理内存(从0到某个上限地址的集合)上进行操作。带来的问题:1: 你运行了两个程序,如果两个程序在同一个地址空间都会写入数据,那么这个数据是第一个程序的还是第二个程序?结果:这就会导致先写数据的程序的数据丢失。出错点:不同的程序相互访问、改写了不属于自己的数据。改进:针对这个问

2020-09-14 20:20:04 218

原创 存储器及其存储器的层级结构

随机访问存储器我解释一下随机访问的意思。随机访问:访问任何一个内存单元的速度和它的位置(地址)无关。随机访问存储器(RAM)分为两类:静态RAM,动态RAM。静态RAM(SRAM)静态RAM比动态RAM更快,同时静态RAM也更贵。因为快,所以经常用来作为高速缓存存储器。只要SRAM处在通电状态下,里面的数据就可以被保存下来。如果没有通电,数据就会丢失。SRAM的每一个存储单元(每一个比特位)是用一个6晶体管电路实现的。所以SRAM的存储密度不高。因为SRAM的电路简单,所以访问速度很快动态R

2020-09-09 22:16:59 644

原创 自己动手写docker -- run -d top, ps -ef 查看不到

前言今天正在写docker的时候,发现了一个bug, run -d top ,ps -ef 查看不到这个进程。为了解决这个问题,找了一圈都没有发现一些可用的信息。并且还有还有人也遇到相同的问题。kernal : 4.15.0 , 如果感兴趣的化,可以复现一下这个问题。核心代码 改动的地方:cmd.SysProcAttr = &syscall.SysProcAttr{Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID | sy

2020-08-29 20:51:50 877

原创 系统调用原理--特权级与中断

特权级CPU可以在不同的特权级别下执行指令,通常有两种特权级别,用户模式(用户态)、内核模式(内核态)。为什么要有特权级的出现?有了多种特权级模式的存在,操作系统就可以让不同的代码运行在不同的模式上,以达到限制他们权利,提高稳定性和安全性的目的。程序运行在用户模式和内核模式下有什么区别呢?普通应用程序运行在用户态的模式下。诸多操作将受到限制,包括访问硬件资源设备、开关中断、改变特权模式等。一般来说,高特权级是可以降低至低特权级,但是低特权级不能提升自己为高特权级。中断系统调用是运行在内核态,

2020-08-17 18:30:05 911

原创 面向对象和基于对象

前言基于对象是从面向对象演变过来的, 面向对象已经诞生了这么长时间,为什么现在基于对象会越来越收欢迎呢?“成也萧何,败也萧何”为了解释这个问题,就不得不提到面向对象的三大特征:封装、继承、多态。这些带来的好处:易维护、质量好、效率高、易扩展、易复用。同时也带来了很大的坏处: 复杂但是,在现代的编程语言发展至今,有一个明显的趋势,就是动态化和脚本化。我们可以发现最新兴起的语言,绝大多数都脚本语言,比如Ruby/Lua/Python,而C++语言的新规范,也更多的倾向动态类型推断和lamda表

2020-08-14 15:13:38 397

原创 再谈DNS

之前有写过DNS服务器的工作方式网络之旅 (一),过了一段时间再学习发现了之前没有学到的知识,所以来记录一下.DNS 的解析流程在上一篇已经写过。这里就不在赘述。DNS可以做内部负载均衡如果DNS给所有人解析的都是同一个网址,那么这台服务器(属于这个网址对应的IP)承受的压力就很大,为了缓解压力,可以部署多台服务器。比如 有5台 A、B、C、D、E服务器。这5台服务器上运行的业务是相同的。然后在域名解析的时候,配置策略(比如轮询)这次返回A 的IP,下次返回B的IP。如果A宕机了,就在剩下的4台服务器

2020-08-06 10:59:49 143

原创 nginx学习笔记----部署一台静态网站

为了展示出结果,我直接从网上找了html 资源。下面是具体操作实例。在nginx安装目录下,创建一个 www 目录,然后将html 文件和 css,js等都放进去。接下来 更改 配置文件 nginx.conf listen 8080; location / { alias www/; index login.html; } 然后重新加载 nginx

2020-07-29 13:35:31 209

原创 nginx学习笔记--nginx配置文件详细说明

前言 :nginx 的配置文件是学习nginx的过程中组重要的一环。       配置文件的路径: 在nginx 的安装目录下 conf/nginx.conf配置文件的组织结构main: 代表整个配置文件http:处理web请求server: 代表一个web服务器location: web服务器要处理的一个指令mail:处理邮件相关的协议基础配置#配置 worker 进程运行用户 nobody 也是一个 linux 用户,一般用于启动程序,没有密码

2020-07-29 13:18:02 194

原创 nginx学习笔记 --初始nginx

一、nginx是什么?      engine x二、nginx能干什么?http服务器能处理http协议反向代理服务器邮件服务器IMAP/POP3/SMTP三、ngxin的优势更快高峰期(数以万计的并发时)nginx可以比其他web服务器更快的响应请求高扩展低耦合设计的模块组成,丰富的第三方模块支持高可靠经过大批网站检验每个worker进程相对独立,出错之后可以快速开启新的worker低内存消耗一般情况下,10000个非活跃的HTTP Keep-Aliv

2020-07-29 13:15:18 240

原创 STL源码剖析(二) ---vector

gcc版本: gcc 2.95.3篇幅原因,这里先看一部分源码vectortemplate <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >class vector : protected _Vector_base<_Tp, _Alloc> {private: typedef _Vector_...

2020-03-24 10:52:53 185

原创 STL源码剖析(一)---空间配置器

声明分析的代码版本:GCC 2.95.3前言尽管在我们使用STL的时候,机会不怎么使用空间配置器,但是空间配置器是STL中最重要的步,我们使用容器的时候,之所以不用管理内存,都是因为有空间配置器。所以在剖析具体容器之前,先剖析空间配置器。其他版本的配置器vc6 使用的分配器:vc6 下 new 调用allocator,allocator 调用 operator new,operator...

2020-03-23 15:50:13 195

原创 boost 智能指针库

内存管理需要注意的点内存泄漏野指针访问越界为了避免这些问题,智能指针采用RAII机制 —资源获取既初始化所有初始化操作移到对象的构造函数中所有的释放操作都放在对象的析构函数里适当的异常处理代码来应付对象构造期间丢出的异常(分配内存的时候)好处:对象创建后,用户能开始正确使用对象,不用担心对象的有效性或者是否还要作进一步的初始化操作。scoped_ptr 不能拷贝,赋值。...

2020-03-18 20:03:11 170

原创 内存管理(二)

std::alloc 运行模式在alloc中维护一个长度为16的数组,每个元素的内容是一根指针。初值为 0(nullptr)这根指针又指向一个链表,这个链表即为待分配的内存。#0 指向内存块为 8 bytes ----当申请的对象的大小为 <= 8 时,从 #0 上分配内存#1 指向内存块为 16 bytes ----当申...

2020-03-16 14:40:28 154

原创 内存管理(一)

当我们new了一个数组,但是我们delete 的时候却没加 [] ,此时会发生内存泄露???这个先说明, 这个不一定会发生内存泄露.#include <iostream>class A{public: A(){};private: int i;};当我们申请一个数组时,如果这个类中没有涉及到动态分配过的内存,或者说这个类的析构函数没有写的必要(如 A 类 )....

2020-03-12 09:02:22 211

原创 解决 ubuntu18.04 下qt无发输入中文

在qt中写注释,却发现不能输入中文,查了一下才发现qt中缺少中文输入环境有一点需要注意,必须给qt,和SDK 都安装上才能成功输入中文首先进入到/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts目录下.对于qt,你只需要将 libfcitxplatforminputcontextplugin.so 复制到 当前用户的目录下...

2020-03-04 21:01:11 563 1

原创 一个.c程序到可执行文件的那点事

首先我们先看一遍.c文件到可执行程序文件的所经过的过程..c->预处理->编译->汇编->链接->a.out我们写一个简单的样例代码,以这个为例子,我们来看看它都经历了什么.test.c#include <stdio.h>#define A 2+3int main(){ printf("%d\n",A+A); //宏替换 ...

2019-12-03 20:46:20 134

原创 网络之旅(三)

上一节是站在服务器和客户端的角度讲收发包的.这次我们站在包的角度上再看一下 一个包的一生一个包被创建的过程有这个表就可以看出 一个完整的包其实就是在数据包前加了三个包头.概述一个包的一生当一个包在 IP 协议处进行最后的包装后,它就开始了自己的旅程.遗憾的是 包 也不知道他的旅程会是怎样的.为什么这么说呢 ?因为一个包只知道目的地 (IP地址告诉它)和下一站该去哪(MAC地址告诉它)...

2019-11-27 19:41:51 200

原创 网络之旅(二)

上次大概的说了一下客户端和Web服务器的交互,这一次记录一下客户端和Web服务器的相互收发数据的具体流程.当游览器获得用户的输入后,就要向Web服务器发送自己所需要的信息.先分析在客户端这边的操作:首先,数据会被写到协议栈中,然后在交由协议栈发送出去.问题来了:协议栈是什么时候将数据发送出去的呢?协议栈是怎样判断你的数据有没有写完?假设:(1)协议栈是已接收到数据时就开始发送...

2019-11-14 14:42:50 174

原创 动态内存--智能指针

为什么有智能指针在写程序的时候,经常会使用堆中的内存,但是有特别容易忘记释放这块内存,这就会造成内存泄露。但在我们日常的小编程中,尽管内存泄露,也不会影响我们的程序。这可是一个隐患,在编写大程序的时候特别容易造成程序崩溃。为了解决这个问题,标准库提供了两种智能指针类型来管理动态对象。功能类似于常规指针,但智能的一点是–当没有指针指向该对象时,会自动释放该对象所占用的堆内存。这就极大的避免程序员因...

2019-10-27 23:02:31 125

原创 字符串hash

自从学了字符串hash之后,感觉万物皆可hash…字符串hash就是将一个字符串转变为一个整数。判断两个数是否相等明显比判断两个字符串相等在时间复杂度上要低很多。hash函数散列函数(英语:Hash function)又称散列算法、哈希函数。hash函数的返回值为hash值,也称散列值。举个例子假如你要在你们班找一个叫 “abcdefghigklmnopqrstuvwxyz”的同学,你总...

2019-10-20 21:18:12 305

原创 Trie--前缀树(字典树)

前缀树前缀树又称字典树,其中的键通常是字符串.键不是直接保存在结点中,而是由结点在树中的位置决定.一个结点的所有子孙都有相同的前缀,也就是这个结点对应的字符串.而一般根节点是对应空字符串.前缀数的特点:1:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。2:从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串。3:每个单词的公共前缀作为一个字符节点保存。例如...

2019-10-09 21:05:13 201

原创 最长上升子序列 和 最长下降子序列

昨天要写一道最长上升子序列的题,想起了自己曾经写过一篇,翻出来看了一下,只有一个感觉 ~~~ 满眼都是水这篇算是上一篇的完善和追加.最长上升子序列 -----最长不下降子序列最长不上升子序列 ---- 最长下降子序列最长上升子序列 和 最长不下降子序列最长上升子序列的核心思想就是 追加 和 替换有一个数组 a[],我们要在 a[] 中找到一个最长上升子序.首先我们需要维护一个数组 ...

2019-09-26 15:15:57 1266 1

原创 makefile入门

什么是makefile ?在一个项目中,会有大量的 .c 文件,.h文件.让我们手动的编译不仅麻烦,而且效率低.makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译.然后使用 make 工具,用来解释makefile 中的规则.现在有 3 个文件,分别是 main.c ,hello.h ,hello.cmain.c#include<...

2019-09-11 18:56:12 116

原创 数值数据的表示 -- 整数

定点数的表示(三要素):    进位计数制 (十进制,八进制…)    定点数的二进制编码 (原码,补码,移码,反码 并且 解决了正负号的问题)    定点整数的表示(无符号整数,带符号整数)整数采用进制表示.计算机表示小数点:         计算机中只能通过约定小数点的位置来表示小数点         1.小数点位置约定在固定位置的数成为定点数.         2.小数点位...

2019-09-08 22:52:19 640

原创 继承和动态内存分配

两种情况一 派生类不使用new二 派生类使用new派生类不使用 new前提 : 基类使用了new,派生类不使用 new结果 : 不需要给派生类定义显式的析构函数,复制构造函数,赋值运算符.原因:析构函数: 派生类的默认析构函数进行的操作: 执行自身的代码后调用基类析构函数. 因为派生类 不使用 new,则派生类的构造函数 不需要执行任何特殊的操作,所以 默认析构函数 ok.复...

2019-09-03 23:10:45 125

原创 c++控制输出

流和缓冲区c++ 程序把输入和输出看做字节流.输入时,程序从输入流中抽取字节,输出时,程序将字节插入到输出流中.缓冲区:缓冲区可以搞笑的处理输入和输出.缓冲区是作用中介的内存块,它是将信息从设备传输到程序,或从程序传输给设备的临时存储工具.缓冲方法: 从磁盘上读取大量信息,将这些信息存储在缓冲区,然后每次从缓冲区里读取一个字节,因为从内存中读取单个字节的速度比从硬盘上读取快的多,所以 缓冲方...

2019-08-29 01:15:56 675

原创 c++ 构造函数

构造函数调用时间: 创建一个对象是 会自动调用 构造函数.         如果 创建 的是一个指针变量是不会调用构造函数, 当 new 一个新空间时,就会自动调用构造函数.构造函数的名字和类名相同,一个类中可以定义多个构造函数.不同的构造函数 之间 是重载关系.如果一个类没有定义构造函数,则系统会自动给该类定义一个构造函数 称为 默认构造函数.而一旦 一个类中 有构造函数,则不会再给这...

2019-08-28 00:04:55 174

原创 STL vector

一个矢量类 vector声明头文件: #includevector + <参数列表> + 名字;例 :vector vec;参数列表里可存放的类型:             容器的数据类型: string 等.            基本数据类型: int,double 等.            结构体 ,对象 等.vector类 重载了 下表运算符— [] ,所以...

2019-08-27 00:37:17 340

原创 堆 及 堆排序

堆定义: 一种特别的树状数据结构.一个堆满足的特性:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于)C的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆(min heap)若母节点的值恒大于等于子节点的值,此堆称为最大堆(max heap)堆的实现堆的实现通过构造二叉堆(binary heap),实为二叉树的一种二叉树:是每个节点最多只有两个分支...

2019-08-26 21:15:01 158

原创 大一暑期留校感想

这是一篇 非技术博客,不谈技术,只谈感想.小组的暑期留校结束了(xiyoulinux 小组).说真的,这次暑期留校 是我所有暑假中 最累的一次,收获 也是最多的一次.现在回过头看看,也还行.一不留神 ,暑期留校就结束了.我们组一共有 4 个人,俩大一的,俩大二的学长指导 我俩.暑期刚开始的时候,感觉 特别累,也有点烦躁, 舍友大部分的回家了,自己也有点想家.但当你 真正的投入到那种学习当...

2019-08-24 23:43:37 479 1

原创 数据库简单使用

在写项目的时候客户端的数据要存入数据库的.然后就写一下数据库在c 语言里的简单使用,和一些常用的sql语句.在 mysql 中的使用create database + 库名 —创建数据库use + 库名 — 使用数据库create table + 表名 (字段名 + 数据类型)show tables; --查看所有表drop table...

2019-08-24 23:09:00 136 1

空空如也

空空如也

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

TA关注的人

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