自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

晶凌玄夜的博客

新手上路,请多指教

  • 博客(130)
  • 问答 (1)
  • 收藏
  • 关注

原创 Go语言变量逃逸分析

文章目录什么是逃逸分析为什么要做逃逸分析逃逸分析的场景指针逃逸栈空间不足逃逸闭包引用逃逸动态类型逃逸切片或map赋值什么是逃逸分析在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针。也是就是说逃逸分析是解决指针作用范围的编译优化方法。编程中常见的两种逃逸情景:函数中局部对象指针被返回(不确定被谁访问)对象指针被多个子程序(如线程 协程)共享使用为什么要做逃逸分析开始我们提到go语言中对象内存的分配不是由语言运算符或函数决定,而是通过逃逸分析来决定

2022-03-14 14:56:33 959

原创 Go基础(二)

文章目录循环语句for循环控制语句breakcontinuegoto函数函数返回多个值闭包函数Go函数方法Go 语言变量作用域Go语言数组数组声明和初始化多维数组数组传参Go语言切片定义和初始化Go语言MapGo 语言接口Go 错误处理循环语句for循环一般for循环的三种形式。Go语言中没有while循环。package mainimport "fmt"func main() { //第一种 for i := 0; i <= 10; i++ {

2022-02-18 15:17:12 451

原创 Go基础(一)

文章目录环境安装语言结构及基础语法实列执行Go程序行分隔符标识符Go关键字环境安装参考菜鸟教程:语言结构及基础语法实列Go 语言的基础组成有以下几个部分:包声明引入包函数变量语句 & 表达式注释package mainimport "fmt"func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!")}package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属

2022-02-15 17:33:14 240

原创 PHP7源码-变量类型

文章目录类型定义类型定义PHP7中变量类型的定义在zend_types.h文件中,除了一些常见类型,还有PHP内部使用的类型#define IS_UNDEF 0 /*标记未使用的类型*/#define IS_NULL 1 /*NULL*/#define IS_FALSE 2 /*false*/#define IS_TRUE 3 /*true*/#d

2022-01-19 01:09:25 326

原创 PHP7新特性

文章目录太空船操作符标量类型声明和返回值的类型声明null合并操作符常量数组namespace批量导入throwable接口Closure::call()intdiv函数list的方括号写法太空船操作符太空船操作符用于比较两个表达式。例如,当$a小于、等于或大于$b时,它分别返回-1、0或1。比较原则沿用PHP的常规比较规则进行。<?php//整数echo 1 <=> 1; //0echo 1 <=> 2; //-1echo 2 <=>1;

2022-01-03 19:13:45 1263

原创 PHP7源码-弱类型实现原理zval

文章目录PHP5的zval源码缺点PHP7的zval源码_zval_struct的u1联合体_zval_struct的u2联合体PHP5的zval源码typedef struct _zval_struct zval; //zval_struct结构体struct _zval_struct { zvalue_value value; /* 储存变量的值 */ zend_uint refcount__gc; /* 引用计数,用于GC */ zend_uchar type;

2021-12-26 23:07:36 288 2

原创 PHP数组

文章目录定义数组用方括号语法访问数组单元用方括号的语法新建/修改转换为数组递归和多维数组定义数组可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。$array = array( "foo" => "bar", "bar" => "foo",);// 自 PHP 5.4 起$array = [ "foo" => "bar", "bar" => "foo",];ke

2021-01-14 15:07:00 125

原创 PHP运算符

文章目录运算符优先级算术运算符赋值运算符位运算符比较运算符错误控制运算符执行运算符递增/递减运算符逻辑运算符字符串运算符数组运算符类型运算符运算符优先级运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18。如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-“是左联的,那么 1 - 2 - 3 就等同于

2020-12-23 16:06:09 165

原创 PHP字符串

文章目录详解单引号双引号Heredoc 结构和Nowdoc结构存取和修改字符串中的字符转换成字符串字符串转换为数值详解一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集。注意: string 最大可以达到 2GB。PHP 中的 string 的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。并无如何将字节转换成字符的信息,由程序员来决定。字符串由什么值来组成并无限制;特别的,其值为 0(“NUL bytes”)的字节可以

2020-12-20 22:41:51 328

原创 PHP常量

文章目录规则define() 函数const常量和变量有如下不同规则常量是一个简单值的标识符。该值在脚本中不能改变。一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。注意: 常量在整个脚本中都可以使用。define() 函数设置常量,使用 define() 函数bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )该函数有三个参数:

2020-12-19 19:20:19 195 1

原创 PHP类型比较

注:如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。...

2020-12-19 17:01:31 140 1

原创 PHP数据类型

文章目录String(字符串)Integer(整型)Float(浮点型)Boolean(布尔型)Array(数组)Object(对象)NULL(空值)var_dump() 方法String(字符串)在PHP中,字符串可以用英文双引号""或英文单引号’’,区别在于双引号会展开字符串中的变量,而单引号中的内容是什么则输出什么例:$y = "php";$x = "Hello world! $y";echo $x;echo "\n";$x = 'Hello world! $y';echo $x;

2020-12-17 18:59:09 262

原创 PHP的定界符EOF

PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,以免出现语法错误。如果是一两处还可以容忍,但是要是一个完整的 html文本或者是一个200行的js我想是谁都会崩溃的。这就是PHP为什么要引入一个定界符的原因——至少一大部分原因是这样的。使用概述:在结束标记末尾要有分号,否则编译通不过。EOF 可以用任意其它字符代替,只需保证结束标识与

2020-12-16 15:17:30 274

原创 PHP的echo和print

文章目录echoprintprintfsprintfprint_rechoecho 可以输出一个或多个字符串echo 没有返回值echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。在输出多个字符串时不能加括号。例:<?php$txt1="学习 PHP";$txt2="CSDN";$cars=array("Volvo","BMW","Toyota"); echo "这是一个", "字符串,", "使用了", "多个", "参数。";

2020-12-15 18:50:33 115

原创 PHP变量

文章目录php变量规则PHP 是一门弱类型语言PHP 变量作用域PHP 有四种不同的变量作用域:局部和全局作用域global 关键字Static 作用域php变量规则变量以 $ 符号开始,后面跟着变量的名称变量名必须以字母或者下划线字符开始变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )变量名不能包含空格变量名是区分大小写的($y 和 $Y 是两个不同的变量)例:<?php$txt="Hello world!";$x=5;$y=10.5;?>PHP

2020-12-14 16:35:57 96

原创 Linux多线程死锁及解决方法

先介绍几个概念线程安全:多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现线程不安全的问题。重入:同一个函数被不同的执行流调用,当前一个流程还没有执行完,就有其他的执行流再次进入,我们称之为重入。一个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数被称为可重入函数,否则,是不可重入函数。文章目录死锁概念死锁的四个必要条件避免死锁的几种常用方法死锁概念死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申

2020-09-04 00:22:06 1010

原创 银行家算法的通俗理解

文章目录概念背景及相关概念介绍概念银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。背景及相关概念介绍在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这

2020-09-04 00:18:31 3040

原创 MTU,MSS,MSL,TTL概念区分

文章目录MTUMSS区分MTU和MSSMSLTTLMTUMTU(Maximum Transmission Unit):最大传输单元,用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。Linux下使用ifconfig可以查看MTU的大小。MSSMSS(Maximum Segment Size):最大报文段长度(MSS)是TCP协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)。区分MTU和MSS最大报文段长度

2020-05-27 16:49:50 2980

原创 Ubuntu设置网络(NAT)

网络配置需要说明的是,上面博客的第三步可能有错误重启配置文件:sudo /etc/init.d/networking restart可以使用以下命令ifdown -aifup -a参考博客

2020-05-22 14:48:54 256

原创 Linux下select详解和简单封装

文章目录select函数原型select执行过程(特点)优点和缺点select封装select函数原型 系统提供select函数来实现多路复用输入输出模型select系统调用是用来让我们的程序监视多个文件描述符的状态变化的。程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变。下面是select函数定义以及相关函数定义 /* According to POSIX.1-2001 */ #include <sys/select.h&gt

2020-05-22 09:10:01 609

原创 五种IO模型

文章目录阻塞IO非阻塞IO信号驱动IOIO多路转接(也称作多路复用)异步IO同步和异步,阻塞和非阻塞的区别阻塞IO阻塞IO:在内核将数据准备好之前, 系统调用会一直等待。所有的套接字, 默认都是阻塞方式。阻塞IO是最常见的IO模型。例子:当你去钓鱼的时候,放下鱼钩,然后一直等待鱼漂下沉,期间什么事都不做,当鱼漂下沉知道鱼儿上钩后才拉起鱼竿。 特点在等待的过程中,被阻塞的执行流什么也干不了,对cpu的利用率较低实时性比较好,在IO就绪和拷贝数据之间没有浪费时间。代码编写流程比较简单。

2020-05-21 19:26:48 141

原创 tcp/ip四层模型之数据链路层

文章目录数据链路层的作用数据链路层的主要工作认识以太网以太网帧格式MAC地址认识MTU数据链路层的作用将从物理层接收到的比特流处理成数据帧,然后交给上层网络层进行处理。将从网络层接收到的数据包解封装成数据帧,处理后交给物理层进行编码和发送。数据链路层的主要工作数据成帧:①当网络层封装的数据包到达数据链路层时,数据链路层协议需要给数据包添加上头部和尾部,这个封装之后的结构称为数据帧(Frame);②数据帧就是物理层执行编码转换的数据。错误校验:由于信号在物理层传输的过程中难免会出现的差

2020-05-14 22:03:33 576

原创 tcp/ip四层模型之网络层

文章目录基本概念ip协议报头网段划分私有ip地址和公网ip地址路由基本概念网络层实现数据包的选路和转发。网络层最核心的协议是IP协议(Internet Protocol,因特网协议)。IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳(next hop)路由器,并将数据包交付给该路由器来转发。多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。可见,IP协议使用逐跳(hop by hop)的方式确定通信路径。网

2020-05-12 21:55:37 636

原创 求一个数组的所有组合

题目名称:求和题目描述:输入两个整数 n 和 m,从数列1,2,3…n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来输入描述:每个测试输入包含2个整数,n和m输出描述:按每个组合的字典序排列输出,每行输出一种组合示例1输入5 5输出1 42 35这是牛客网上一道算法题。大致意思就是在1到n的区间范围随机挑选k个数,使得这k个数的和加起来等于m,这道题的核心思想就是求一个数组的所有的组合,可以将1到n的区间看成是1到n的数组,求数组的所有组合中和等于m的组合。.

2020-05-11 23:36:37 3271

原创 http协议详解(新手必看)

1.简介http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。http是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。http是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息...

2020-05-07 01:12:16 3546

原创 什么是URL

1.概念在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址。2.组成URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。也可认为由4部分组成:协议、主机、端口、路径。很多时候端口都是隐藏的。 URL的一般语法格式为:(带方括号[]的为可选项):...

2020-05-07 01:11:25 6643

原创 udp协议详解

1.udp头部

2020-05-06 18:21:20 342

原创 小白都能看懂的TCP协议

1.定义:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。2.tcp头部源/目的端口号:表示数据是从哪个进程来, 到哪个进程去;告知主机该报文段是来自哪里(源端口Source Port)以及传给哪个上层协议或应用程序(目的端口Destination Port)。32位...

2020-05-05 00:30:39 523

原创 在线oj之工具模块

工具模块用于提供一些整个项目需要使用的接口里面用到了boost库,需要自己安装,boost库介绍里面用到了url解码,我们采用了网上一套通用的代码,简单修改下就能使用,ulrencode链接#pragma once#include "oj_log.hpp"#include <boost/algorithm/string.hpp>#include <fstream&g...

2020-04-29 17:58:48 258

原创 在线oj之编译运行模块

编译运行模块主要负责用户代码的编译和运行,在此过程中我们会定义五个文件,他们分别是:源代码、程序、编译错误文件、运行错误文件、标准输出在编译和运行方法中,我们会进行程序替换,并使用重定向分别将编译结果和运行结果写入文件然后返回给前台。最后删除临时文件。我们还运用了json数据格式,需要安装一个文件yum install jsoncpp-devel简单介绍一下json数据格式:具体参考博...

2020-04-29 17:58:34 494 1

原创 在线oj之页面渲染模块

页面渲染模块的作用是将我们从后台获取到的数据渲染到html页面上。为此,我们采用了geogle的开源html模板库ctemplate,具体介绍可以百度。我使用的是码云上大神编译好的(只支持centOS7),其他环境需要自己编译。centos7版本,可以直接用其他环境就需要自己在github上下载源码自己编译#pragma once#include "ctemplate/template...

2020-04-29 17:58:18 276 1

原创 在线oj之试题模块

试题模块用于保存试题信息(编号,题目,保存路径,难度),提供接口用于server端调用。保存题目的数据结构我们采用unordered_map,因为其底层采用hash结构,所以我们在查找题目的时候更快<k, v> 对应 <题目id, 整个题目信息(question类)>先介绍下一个具体的题目包含哪几个部分desc.txt:题目描述header.cpp:给出的头文件...

2020-04-29 17:58:00 276

原创 在线oj之server模块

oj_server.cpp模块是整个在线oj项目与外界沟通的桥梁,负责项目后台与外界的通信。在这个模块中使用了github上一个http开源库(上一篇博客我提到过),模板填充技术以及Json数据格式,里面有些可能看不懂,后面的博客我会详细介绍。Server:httplib中的一个Server类Get:Server中的Get请求方法Post:Server中的Post方法set_content...

2020-04-29 17:57:33 252

原创 在线oj之日志模块

日志模块用于打印日志信息#pragma once#include <string.h>#include <sys/time.h>#include <iostream>#include <cstdio>//当前实现的log服务也是在控制台进行输出//格式//[时间 日志等级 文件:行号] 具体的日志信息class LogTim...

2020-04-29 17:56:58 163

原创 centos8误删/usr/bin/ld文件解决方案

误删/usr/bin/ld文件后会导致gcc或g++在编译时出错/usr/bin/ld: error while loading shared libraries: libbfd-2.27-41.base.el7_7.2.so: cannot open shared object file: No such file or directory我找了很久的解决方法终于找到了,一个命令解决...

2020-04-27 15:44:16 1010

原创 错排算法

题目:年会分奖描述:今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有字条加入完毕,每人从箱中取一个字条;如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?输入描述:输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述:对应每一组...

2020-04-24 11:11:36 857

原创 在线oj项目框架和前期准备工作

整体框架1.目标:实现一个在线判题系统(类似于leetcode)2.前台工作流程:①请求题目列表 ②获取题目详细信息 ③作答 ④提交代码 ⑤获取结果3.后台工作流程:①启动服务 ②监听,等待客户端连接 ③返回题目列表 ④返回题目详细信息 ⑤编译和判题 ⑥返回结果4.服务端模块server模块:主要负责客户端和服务端的通信,提供http服务,串联试题模块和判题模块。试题模块...

2020-04-23 14:00:41 480

原创 vector的模拟实现

vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小。为了增加存储空间,其做法是,分配一个新的数组,然后将全...

2020-04-19 10:56:39 160

原创 fork和vfork详解及区别

1.fork函数:Linux环境下,创建进程的主要方法是调用fork函数。Linux下所有的进程都是由init(PID为1)直接或间接创建。pid_t fork(void); pid_t类型其实就是一个整型返回值:如果执行成功,在父进程中返回子进程(新创建的进程)的PID,子进程将返回0;如果执行失败,则在子进程中返回-1,错误原因存储在errno中。#include <uni...

2020-04-01 23:51:33 962

原创 socket套接字编程之tcp协议封装

1.tcp特点①传输层协议②有连接③可靠传输④面向字节流2.几个常用接口// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器)int bind(int socket, const struct sockaddr *ad...

2020-03-28 23:24:47 485

空空如也

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

TA关注的人

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