这篇笔记主要是对C/Cpp一些知识的补充,这篇笔记过后就是抽象机制以及一些库函数的学习了

1 源文件与程序

一个C语言文件到可执行文件,中间经历了什么?预处理(Preprocessing)、编译(Compilation)、汇编(Assemble)、链接(Linking)。这是耳熟能详的几个过程,甚至还能敲出对应的gcc命令,那么实际上到底是啥情况呢?比如现在有个C程序

1
2
3
4
5
#include <stdio.h>
int main(void) {
printf("Hello World!\n");
return 0;
}

敲出gcc的命令:gcc main.c -o main.o -v

Read more »

1 初始化

对象的声明可以通过初始化的过程获得初始值。主要就是见识一下C/Cpp里面几种初始化的形式,免得大惊小怪

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// C语言的初始化还好,怎么着都得有个 =
int a[3] = {1, 2, 3};
int b = 0;
int c = {1}; // scalar initialization

typedef struct {int a[3], b;} MyType;
MyType mm = {{1}, 3};

char* ptr = malloc(10);

// Cpp多了一个花样
int a[3] {1, 2, 3};
int b {0};
typedef struct {int a[3], b;} MyType;
MyType mm {{1}, 3};
auto *m = new MyType;
auto *m1 {new MyType()};
Read more »

数组和指针一般不能分开,尤其是C语言里面,让人又爱又恨的东西..而一谈到这俩玩意就得画图..

1 数组

对数组下定义,抱歉,我不会。但是我有词典,a way of organizing and storing related data in a computer memory。这么一看就清晰多了

元素类型为char的数组可以如下声明

int c[6]; // 可以存6个整数的数组

在声明中[]表示xxx的数组,所有数组下标都是从0开始,计算机中很多东西都是从0开始,为什么?搜索一下吧。数组的大小,就是那个6,必须得是个常量表达式,这么看,数组一旦定义好了大小就定下来了呀

数组名也是标识符,也要符合规则,不能和其他变量重名

数组初始化的时候可以部分初始化,也可以整体初始化;赋值的时候不能整体赋值,只能单个元素得赋值(数组拷贝,那个不算)

Read more »

1 Prepare

You need a server. My server OS is CentOS 7.2. You can also use other versions of Linux. Ok, let’s get started.

1
2
3
4
5
6
7
su
yum install git # config your git
git config --global user.name=UserName
git config --global user.email=xx@yy.zz
mkdir /usr/local/apps
mkdir ~/tmp
cd ~/tmp

2 Install Golang

Read more »

参考:

https://www.cnblogs.com/opsprobe/p/9420502.html

https://blog.csdn.net/lassewang/article/details/9159543

0 RADIUS

RADIUS:(Remote Authentication Dial In User Service)中文名为远程用户拨号认证服务,简称RADIUS,是目前应用最广泛的AAA协议(认证、授权和计费)

202205243456723

图中Device(例如交换机)向远程接入用户提供接入及与RADIUS服务器交互的服务。RADIUS服务器上则存储用户的身份信息、授权信息以及访问记录,对用户进行认证、授权和计费服务

认证过程如下

(1)客户端向接入设备发送一个EAPoL-Start报文,开始802.1x认证接入;

(2)接入设备向客户端发送EAP-Request/Identity报文,要求客户端将用户名送上来;

Read more »

0 start

感觉最近看的不少东西都是用gitbook写的,看起来也确实怪舒服的,举个例子:https://lingcoder.github.io/OnJava8/#/sidebar,既能当博客又能当Wiki,于是我准备自己搭建一个。参考网上的步骤:

  1. 文档编写采用统一标准,都用Markdown格式的,最后可以用gitbook自动生成静态网页;

  2. 分配好各阶段(版本)相关责任人编写的文档,待文档编写完成后统一上传到git;

  3. jenkins负责拉取正式版本(release开头)的文档,用gitbook编译后,同步到云端文档服务器

  4. 云端服务器制作一个入口页面,页面里面可以指引各个版本文档;http服务用nginx,指引到这个页面;

其中第三步我觉得没必要用Jenkins,直接设置一个定时任务就好了。。其实搭建一个从零开始搭建一个完整Gitbook还是比较麻烦的,详情参考下方的参考文档。我既然说了快速,那必然是简单而又傻瓜式的搭建了..Let’s go!

Read more »

1 算数运算符

运算符描述实例
+把两个操作数相加A + B 将得到 30
-从第一个操作数中减去第二个操作数A - B 将得到 -10
*把两个操作数相乘A * B 将得到 200
/分子除以分母B / A 将得到 2
%取模运算符,整除后的余数B % A 将得到 0
++自增运算符,整数值增加 1A++ 将得到 11
自减运算符,整数值减少 1A– 将得到 9

没啥好说的,可能比较有意思的是,++--

Read more »

1 标识符 关键字

标识符命名规则:

  1. 变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)或者美元符号(**$**)组成
  2. 第一个字母不能是数字
  3. 不能使用C/C++关键字来命名变量
  4. 变量名区分大小写
1
int $name1, _name2, Name3;

似乎有的版本不支持$..我试了gcc8.1是可以的

C语言关键字:

Read more »

1 JNI

JNI(Java Native Interface),提供了若干API实现了Java和其他语言(主要是C/C++)的通信。简单来说就是Java想要调用C/C++的接口必须遵循JNI的规范

牵涉到一个很重要的头文件jni.h,这个头文件的位置:\jdk1.8.0_211\include\jni.h,如果是Linux,或许是/usr/lib/jvm/java-8-openjdk-amd64/include/jni.h。这个头文件定义了数据类型,JNIInterface(定义了很多函数指针,就是一些接口)

那么为什么要有JNI这个东西,Java虽说是与平台无关的,但是支撑它的虚拟机不是啊,那玩意还得用native语言来完成,这不就是一个理由了

1.1 hello world

  1. 创建一个JniHello.java, 并声明一个native函数sayHello()
    Read more »