Merge branch 'master' of gitee.com:Eyestorm/notes

This commit is contained in:
estomm
2021-08-31 18:46:26 +08:00
51 changed files with 877 additions and 202 deletions

View File

@@ -27,7 +27,7 @@ mingw
## 1 C++程序构成
### 构成
### 函数构成
* 返回类型
* 函数名
* 形参列表

View File

@@ -20,6 +20,7 @@
- 联合体`union`
> **关于size_t的说明**size_t是标准C库中定义的在64位系统中为long long unsigned int非64位系统中为long unsigned int。使用size_t可能会提高代码的可移植性、有效性或者可读性或许同时提高这三者。因为其是基于平台变化的最大支持的无符号整型。
## 2 字面值常量
@@ -143,4 +144,4 @@ int f{3};//花括号列表初始化
* 左值lvalue指向内存位置的表达式被称为左值lvalue表达式。左值可以出现在赋值号的左边或右边。
* 右值rvalue术语右值rvalue指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式也就是说右值可以出现在赋值号的右边但不能出现在赋值号的左边。
* 变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:
* 变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。

View File

@@ -63,7 +63,7 @@ int **p2 = &p1
```
int arr[10];//含有10个整型的数组
int *arr[20];//含有20个整形指针的数组。指针数组
int (*ptr)[10];指向含有个整数的数组的指针。数组的指针(常量的指针和指针类型的常量类似)
int (*ptr)[10];指向含有10个整数的数组的指针。数组的指针(常量的指针和指针类型的常量类似)
string arr[10];//含有10个string对象的数组C++11允许数组为对象类型。
```

View File

@@ -1,6 +1,13 @@
#include <iostream>
using namespace std;
class B{
public:
int a = 1;
B():a(2){
// a=3;
}
};
int main()
{
// unsigned int a =1;
@@ -21,11 +28,34 @@ int main()
// cout<<*i<<endl;
// cout<<*j<<endl;
extern int fff;
fff=11;
cout << fff << endl;
// extern int fff;
// fff=11;
// cout << fff << endl;
// fff = 11;
// cout << fff << endl;
// int a = 10;
// long long b = 10;
// cout<<sizeof(a)<<"\t"<<sizeof(b)<<endl;
// B *b =new B();
// cout<<b->a<<endl;
// int m = 10;
// int *a[3]={&m,&m,&m};
// int b[]={1,2,3};
// int (*ptr)[3]=&b;
// cout<<(*a)[7]<<endl;
// cout<<(*ptr)[2]<<endl;
const char* m = "123";
const void* n = "123";
char a[] = "123";
char b[3] = "13";
cout<<sizeof(m)<<"\t"<<sizeof(n)<<endl;
cout<<sizeof(a)<<"\t"<<sizeof(b)<<endl;
return 0;
}

View File

@@ -0,0 +1,14 @@
#include <iostream>
using namespace std;
int main(){
int i=0;
while(i<10){
i++;
if(i>100){
break;
}
}
}

View File

@@ -202,8 +202,23 @@ public
* 没有基类。
* 使用花括号括起来的成员初始值列表。并用它初始化聚合类的数据成员。
```C++
struct Person
{
std::string name;
int height;
};
int main()
{
Person person={"xiaohong",10};
std::cout << person.name<<" "<<person.height << std::endl;
system("pause");
return 0;
}
```
### 字面值常量类
* 数据成员都是字面值类型的聚合类。是字面值常量类。
* 数据成员必须都是字面值类型。

View File

@@ -29,7 +29,7 @@
### 申请内存
* new无法围棋分配的对象命名,而是返回一个指向该对象的指针。
* new无法为其分配的对象命名,而是返回一个指向该对象的指针。
```
int * p = new int;
```

View File

@@ -96,6 +96,7 @@ resize(n,t) | 调整容器的大小为n个元素。任何添加的新元素初
### 特殊构造方法
* 是静态的连续数组,只有默认初始化。
* 元素类型和容量。是类型的一部分。
```
array<Type, Size> a;
array<int,5> arr= {1, 2, 3, 4, 5};

View File

@@ -12,7 +12,7 @@
## 0 简介
### 概念
* 适配器 (adaptor) 是标准库的一个通用概念。容器、类和函数都有适配器。 本质上, 一个适配器是一种机制, 能使某种事物的行为看起来像另外一种事物一样。。一个容器适配器接受一种己有的容器类型, 使其行为看起来像一利1不同的类型。
* 适配器 (adaptor) 是标准库的一个通用概念。容器、类和函数都有适配器。 本质上, 一个适配器是一种机制, 能使某种事物的行为看起来像另外一种事物一样。。一个容器适配器接受一种己有的容器类型, 使其行为看起来像一利1不同的类型。
* 添加额外操作,实现某种特殊的数据结构。
### 容器适配器的操作

View File

@@ -21,6 +21,11 @@ int main(){
// vector<int> vec;
// 构造边的对象
vector<int> a{1,2,3};
queue<int> b;
cout<<b.front()<<endl;
struct Edge
{
int start;

View File

@@ -100,7 +100,7 @@ int main(){
![](image/2021-03-06-14-50-48.png)
```
```C++
/*
* 读取数据的三种方法
* 直接使用输入输出流iostream

View File

@@ -13,9 +13,35 @@ void unique_sort(vector<int> &words){
}
int main(){
vector<int> n{4,2,5,2,5,6,7};
// 所以这万一是怎么记住上一个的状态的呢?
// 查阅资料,发现这个函数是根据函数大小顺序生成下一个
// 例如5,6,7的下一个是5,7,6
// 但是7,6,5就没有下一个了因为它已经是最大的排列了。
// vector<int> n{4,2,5,2,5,6,7};
vector<int> n {7,6,5};
for(auto a :n){
cout<<a<<" ";
}
cout<<endl;
next_permutation(n.begin(),n.end());
for(auto a :n){
cout<<a<<" ";
}
cout<<endl;
next_permutation(n.begin(),n.end());
for(auto a :n){
cout<<a<<" ";
}
cout<<endl;
next_permutation(n.begin(),n.end());
// next_permutation(n.begin(),n.end());
// next_permutation(n.begin(),n.end());
for(auto a :n){
cout<<a<<" ";
}
cout<<endl;
// for(int m :n){
// cout<<m<<" ";
@@ -27,12 +53,12 @@ int main(){
// cout<<m<<" ";
// }
// cout<<endl;
for_each(n.begin(),n.end(),[](int &a){
a=1;
return;
});
for_each(n.begin(),n.end(),[](int&a){
cout<<a<<endl;
});
return 0;
// for_each(n.begin(),n.end(),[](int &a){
// a=1;
// return;
// });
// for_each(n.begin(),n.end(),[](int&a){
// cout<<a<<endl;
// });
// return 0;
}

View File

@@ -5,6 +5,22 @@
> 参考顺序容器部分
* 访问元素
* 也可以使用**迭代器**访问元素。
* **at**会进行安全检查抛出异常。
* **[]下标运算符**不会进行检查。
* **back(),front()**
* 添加元素
* 总共有6+3=9种插入方法。insert有额外的两种范围插入方法。
* 在尾部添加元素**push_back(),emplace_back()**
* 在头部添加元素**push_front(),emplace_front()**
* 在中间添加元素insert(),emplace()
* insert方法提供了范围插入的方法。中间插入一个元素。在给定的一个迭代器之前插入一个值。中间插入多个元素。在给定的迭代器之前插入范围迭代器内的元素。
* 删除元素
* **back、front、push_back、push_front、pop_back、pop_front、emplace_front、emplace_back**。是一组首尾相关的插入操作。
* **insert、emplace、at、erase**。是一组随机的操作。
* 重构容器
* 并非该表容器内存的大小。而是改变容器范围的大小。
### 1.2 STL泛型算法
* string 对象也可以看作一个顺序容器,它支持随机访问迭代器,也有 begin 和 end 等成员函数。STL 中的许多算法也适用于 string 对象。下面是用 STL 算法操作 string 对象的程序示例。
@@ -30,6 +46,11 @@ int main()
## 2.1 字符串创建
* string 类有多个构造函数,用法示例如下:
* 拷贝初始化
* 序列初始化
* 子串初始化
> 这三种初始化的恶魔是在assign、find、append、replace、insert函数中也在使用。就如同顺序容器中的初始化方法在顺序容器的其他的操作中也是通用的。
```C++
string s1(); // si = ""
string s2("Hello"); // s2 = "Hello"

View File

@@ -4,23 +4,23 @@
#include<vector>
using namespace std;
int main(){
// istringstream s("145,5343,42,44");
// int a;
// s>>a;
// cout<<a<<endl;
void test_seq(){
cout<<"test_seq"<<endl;
string s = "1234";
s.push_back('5');
cout<<s<<endl;
s.insert(s.begin()+2,'0');
cout<<s<<endl;
cout<<s.size()<<endl;
cout<<sizeof(s)<<endl;
cout<<s.capacity()<<endl;
s.pop_back();
for(auto beg = s.begin(); beg!=s.end(); beg++){
cout<<*beg<<endl;
}
}
// string str="12345678";
// cout<<str.erase(3,1)<<endl;
// cout<<str<<endl;
// char* helo;
// s.getline(helo,10,',');
// size_t m;
// string s="123avicfee";
// int a = stoi(s,&m,10);
// cout<<a<<endl;
// cout<<m<<endl;
void test_find(){
string strs =" adb dai fei af";
@@ -29,8 +29,8 @@ int main(){
size_t end_pos = strs.find(pattern,start_pos);
vector<string> vec;
string temp;
while (end_pos != string::npos)
{ cout<<start_pos<<"--"<<end_pos<<endl;
while (end_pos != string::npos){
cout<<start_pos<<"--"<<end_pos<<endl;
if(start_pos!=end_pos){
temp = strs.substr(start_pos,end_pos-start_pos);
vec.push_back(temp);
@@ -43,5 +43,35 @@ int main(){
for(auto a : vec){
cout<<"name:"<<a<<":end"<<endl;
}
}
void test_substr(){
istringstream s("145,5343,42,44");
int a;
s>>a;
cout<<a<<endl;
string str="12345678";
cout<<str.erase(3,1)<<endl;
cout<<str<<endl;
char* helo;
s.getline(helo,10,',');
size_t m;
// string s="123avicfee";
// int a = stoi(s,&m,10);
cout<<a<<endl;
cout<<m<<endl;
}
void test_contruct(){
string a("12345",2,2);
cout<<a<<endl;
}
int main(){
// test_contruct();
// test_seq();
test_find();
// test_substr();
return 0;
}

View File

@@ -13,10 +13,10 @@ void doSomething(promise<string>& p){
cout<<"read char x for exception"<<endl;
char c = cin.get();
if(c=='x'){
throw runtime_error(string("char")+c+"fault");
throw runtime_error(string("char ")+c+" fault");
}
else{
string s = string("char")+c+"correct";
string s = string("char ")+c+" correct";
p.set_value(move(s));//移动赋值函数。防止退出局部变量后销毁。
}
}

View File

@@ -13,7 +13,7 @@
默认构造(无参)   T()
拷贝构造       T(const T& )
移动构造       T()
移动构造       T(T&&)
拷贝赋值       T& operator=(T& )
移动赋值       T& operator=(T&& )

View File

@@ -2,7 +2,7 @@
## 1 继承
### 定义基类
```
```c++
class Quote{
public:
Quote() = default;
@@ -21,7 +21,7 @@ protected:
};
```
### 定义派生类
```
```c++
class Bulk_quote:public Quote{
public:
Bulk_quote()=default;
@@ -93,7 +93,7 @@ protected:
### 编译时名字查找
* 引用或指针的静态类型决定了该对象有哪些成员是可见的。一个基类的引用和指针只能访问基类的成员。即动态对象是其派生类。
* 引用或指针的静态类型决定了该对象有哪些成员是可见的。一个基类的引用和指针只能访问基类的成员。即使动态对象是其派生类。
### 名字冲突与继承
* 派生了重用定义在直接基类或间接基类中的名字,会屏蔽定义在外层作用域基类中的名字

View File

@@ -66,7 +66,7 @@ int main(){
```
### 实现条件
运行时多态的条件:
* 必须是j继承关系
* 必须是继承关系
* 基类中必须包含虚函数,并且派生类中一定要对基类中的虚函数进行重写。
* 通过基类对象的指针或者引用调用虚函数。
@@ -96,7 +96,7 @@ public:
### 虚函数的原理
* 除了构造函数的非静态函数都可以是虚函数。
* 关键字virtual能出现在类内部的声明语句之前。不能出现在类外部的函数定义。
* 关键字virtual能出现在类内部的声明语句之前。不能出现在类外部的函数定义。
* 如果把一个函数声明成虚函数,则该函数在派生类中也是隐式的虚函数。(即派生类的派生类,也需要重写次函数)
* 派生类可以不用重写虚函数。
* 派生类可以在它重写的虚函数前使用**virtual关键字**

View File

@@ -21,8 +21,8 @@ int main()
int s1[]={1,2,3,4,5,6,7,8};
int s2[3]={4,5,6};
int* s3 = new int(999);
test1(s3);
test2(s3);
test3(s3);
test1(s1);
test2(s1);
test3(s1);
return 0;
}

View File

@@ -0,0 +1,99 @@
class Solution {
public:
double findone(vector<int>&nums){
int n = nums.size();
if(n==1)return nums[0];
if(n%2==1){
return nums[(n-1)/2];
}
else{
// cout<< nums[(n-1)/2]<<endl;
return (nums[(n-1)/2]+nums[(n-1)/2+1])/2;
}
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n1 = nums1.size(),n2=nums2.size();
int i=0,j=0,n=n1+n2;
while(i+j<n/2){
if(nums1[i]<nums2[j] && i<n1 || j>=n2){
i++;
}
else if(j<n2){
j++;
}
}
}
double findMedianSortedArrays2(vector<int>& nums1, vector<int>& nums2) {
// 一种新的二分查找。每次排除掉两个数组的1/4。直接扫描两遍也行这个数据规模爆搜吧。
int n1 = nums1.size(),n2=nums2.size();
int l1=0,m1=0,r1=n1-1;
int l2=0,m2=0,r2=n2-1;
m1 = (l1+r1)/2;
m2 = (l2+r2)/2;
int n = n1+n2;
int *m,*l,*r;
// 特殊情况的讨论
if(n1==0){
return findone(nums2);
}
if(n2==0){
return findone(nums1);
}
if(n1==1){
nums2.push_back(nums1[0]);
sort(nums2.begin(),nums2.end());
return findone(nums2);
}
if(n2==1){
nums1.push_back(nums2[0]);
sort(nums1.begin(),nums1.end());
// for(auto a : nums1){
// cout<<a<<" ";
// }
return findone(nums1);
}
// 保证左边的元素小于等于右
while(true){
// 终止搜索的条件。l1和l2不需要相邻。都完成二分搜索后只剩下两个数。
if(r1-l1<=1 && r2-l2<=1){
cout<<l1<<" "<<r1<<" "<<l2<<" "<<r2<<endl;
vector<int> temp{nums1[l1],nums1[r1],nums2[l2],nums2[r2]};
sort(temp.begin(),temp.end());
int left = l1+l2;
int right = n-r1-r2-2;
int index = ((right-left)+3)/2;
if(n%2==1){
return temp[index];
}
else{
return (temp[index]+temp[index+1])/2.0;
}
}
// 继续搜索排除掉1/4的方法.暂不考虑相等
// 选择做二分的数组
if(nums1[m1]<nums2[m2] && m1+m2<n/2 && r1-l1>1 || nums1[m1]>nums2[m2] && m1+m2>n/2 && r1-l1>1){
m = &m1;
l=&l1;
r=&r1;
}else if(r2-l2>1){
m = &m2;
l = &l2;
r = &r2;
}
if(m1+m2<n/2){
*l = *m;
*m = (*l+*r)/2;
}
else{
*r = *m;
*m = (*l+*r)/2;
}
}
return 1;
}
};

View File

@@ -19,6 +19,24 @@ int compress(vector<char>& chars) {
j++;
lc=chars[i];
ln=1;
// 重载运算符。返回流本身,用于链式法则。如果需要访问私有变量
// 需要声明为友元。一般不需要声明为友元。
ostream & operator<<(ostream &os, const vector<int> temp)
{
for(auto a : temp){
os<<a<<" ";
}
os<<endl;
return os;
}
int main(){
vector<int> arr{-1, 3, -3, 4,5};
cout<<arr<<endl;
vector<int> temp(arr.size()+1,0);
for(int i=0;i<arr.size();i++){
if(arr[i]<arr.size()+1 && arr[i]>0){
temp[arr[i]]=1;
}
}
vec[j]=lc;
@@ -37,6 +55,7 @@ int compress(vector<char>& chars) {
return res.size();
}
<<<<<<< HEAD:a.cpp
int main(){
vector<char> chars={'a','a','b'};
for(auto a:chars){
@@ -49,4 +68,13 @@ int main(){
}
cout<<endl;
return 0;
}
}
=======
return 0;
}
// 测试一下友元
>>>>>>> fb01b190883e115ab7560e5401aa57540e889977:code_segment/operator_reload.cpp

View File

@@ -1,4 +1,4 @@
# 任务
## 任务
### 毕设
@@ -7,8 +7,10 @@
### 工作
> [C++学习路线](https://www.zhihu.com/collection/589776737)
>
> 由于go与java不能兼容。go在某种程度上更加简洁高效在新的业务中大有取代java的趋势。所以接下来的准备添加go的内容。
- 制作简历(明天)√
- [x] 简历说明
- 知识复习——语言
- C++primer四周
- [x] 基础语法 √
@@ -17,16 +19,16 @@
- [x] 设计模式有道云笔记源网址gitee设计模式库
- [ ] effective 系列
- [ ] 系列视频(知乎上收藏的内容)
- [ ] 狂神java、linux系列
- [ ] 狂神linux系列
- [ ] C++ coding系列
- [ ] 看大佬写C++。(chermo)
- [x] 面试问题专项解决
- Java四周
- [ ] 语法
- [ ] 标准库-网络编程
- [ ] 标准库-并行编程(多线程)
- [ ] 标准库-IO编程
- [ ] javaEE 和 java web
- ~~Java四周~~
- [ ] ~~语法~~
- [ ] ~~标准库-网络编程~~
- [ ] ~~标准库-并行编程(多线程)~~
- [ ] ~~标准库-IO编程~~
- [ ] ~~javaEE 和 java web~~
- 数据结构(一周)
- [ ] 《大话数据结构》
- [ ] 《数据结构与算法分析》
@@ -57,12 +59,12 @@
- [x] 文件管理
- [x] 系统调用
- 知识复习——框架
- Spring系列四周
- [ ] spring
- [ ] spring MVC
- [ ] spring boot
- [ ] redis
- [ ] mybatis
- ~~Spring系列四周~~
- [ ] ~~spring~~
- [ ] ~~spring MVC~~
- [ ] ~~spring boot~~
- [ ] ~~redis~~
- [ ] ~~mybatis~~
- 编程实战
- linux系统编程四周
- [ ] 网络编程socket网络编程

View File

@@ -13,10 +13,10 @@
* [ ] 联邦学习针对恶意软件数据集的实验。(一周)
* [ ] 差分隐私应用的实验(一周)
* 完成恶意软件检测展示系统(四周)
* [ ] 技术选型
* [ ] 实现Python/linux下RPC通信模块
* [ ] 实现算法训练模块(算法核心)-----联邦学习算法框架
* [ ] 实现算法检测模块(算法核心)-----恶意软件检测结果
* [x] 技术选型
* [x] 实现Python/linux下RPC通信模块
* [ ] 实现前端算法训练模块(算法核心)-----联邦学习算法框架
* [ ] 实现前端算法检测模块(算法核心)-----恶意软件检测结果
* [ ] 实现前端控制模块(通过页面展示成果)
----------------------------------------------
@@ -30,31 +30,6 @@
* [ ] 完成大论文(四周)
* [ ] 基于联邦学习的恶意软件检测。
### 就业
* [ ] 语言
* [ ] C++
* [ ] GO
* [ ] 数据结构
* [ ] 算法
* [ ] 基础
* [ ] 操作系统
* [ ] 数据库
* [ ] 计算机网络
* [ ] 拓展
* [ ] C++/GO框架
* [ ] 微服务框架
* [ ] docker/k8s/kite
* [ ] 编程
* [ ] 网络编程/web开发
* [ ] 系统编程
* [ ] 算法编程(力扣刷题)
* [ ] 基础知识复习
* [ ] 算法刷题
* [ ] 参加招聘会。能在实习结束前拿到三个offer。
### ~~实习~~
@@ -104,3 +79,10 @@
2. 实现了fedbase/fedavg/fedprox等方法。并进行了一些保证基本效果的实验。
4. 第四周8.2
1. 实现了fedmeta/fedamp/fedscaffold等方法。
5. 第五周8.9
1. 添加了基于贡献度的聚合方案和基于向量调整的客户端聚合方案。
2. 添加了非独立同分布的wasserstein距离衡量方法
3. 对所有的算法进行了统计分析。在三个数据集、五种非独立同分布状态、九个算法上进行测试。
6. 第六周8.16
1. grpc模块开发完成。实现了一个微服务。并进行测试
2. Python的协程并发和线程并发。并进行测试

View File

@@ -0,0 +1,37 @@
## 任务
### 知识复习——语言
* [x] C++
* [x] 基础知识
* [x] 标准库
* [x] 面向对象
* [x] 设计模式
### 知识复习——基础
* [ ] 操作系统
* [ ] 数据库
* [ ] 计算机网络
### 并发总结
> 包括各种语言C++、Java、Python、Go、JS等、各种操作系统Linux、Windows的并发方式的总结。
* [ ] 并行编程(并发和多线程)
* [ ] 网络编程
* [ ] web开发
* [ ] 操作系统的IO和并发方式。
### 刷题
* [x] 每天五个中等题(做好总结)
* [ ] 每天五个中等题(做好总结)
## 收获
* 稍微反思一下之前的行为。感觉。总是在拖延!也不是拖延,每天都无法完成这一天的任务。每周无法完成一周的任务。导致积累到下一周。只能拖到明天,最后,越来越慌。计划更像是一个安慰自己的幌子,从来没有得到真正实施。
* 终于在自己的努力下,进行了一天的防空。跟豪哥聊了很久。算是对未来有了一个清楚地认知。自己真的有时间去吗。秋招确实应该话一些时间来准备了。现在又处在了那种状态,知道该如何去做,知道该怎样努力。然后剩下的只有全力以赴了。我确实没有时间做别的事情了。对于自己,睡醒了学习,学累了休息。这就是我现在要做的唯一的事情。其他的东西,都不用考虑。
* 我发现我的生活因为熬夜,和不眠不休的工作已经变得越来越无聊了。这不是我想要的生活。不仅仅是因为太过忙碌和焦虑。而是自己已经忘记了生活该有的样子。我发现我最努力的那段时光,也从未如此焦虑过,也从未如此迷茫过。脑子昏昏沉沉,本来就已经无法思考,却固执的想要运转下去。有很多事情可以做的更好,我为什么时间如此至少。已经过去四五天了,我仍旧没有投出自己的建立,别问我。我也不知道自己的理由是什么。
* 我没有准备好!?我没办法准备好!我所有的计划都无法按时完成。我放弃了周末,放弃了每天的娱乐。倒头就睡,早少却还是没有办法认真工作。我觉得早上的效率很高,可以去记忆,去思考。可现在不知道为什么,一天到晚。眼睛疲劳的要死,大脑一片空白,这种症状已经持续了一整天了。我没办法改变。在当前的任务面前,我是如此的无能为力。
* 我什么都记不起来。我在干什么,我要干什么,我干了什么。我效率底下,从来没有按时完成过自己的事情。显然我已经无法忍受自己的菜鸡状态。无休止的事情要做。永远也做不完,即使焦虑。我一天,根本做不了什么。最多八个小时的正常工作时间。从今天开始,十小时工作制启动。我要按照规定的时间,完成自己应该做的事情。不能再等了。
* fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff。开始吧。

View File

@@ -0,0 +1,28 @@
### 简历准备(上午)
* [x] 简历修改。项目内容和实习经历
* [x] 项目介绍、主要职责、主要成果。各用一句话完成。
* [x] 实习经历丰富。主要内容,技术难点,最后成果。
* [ ] 项目和实习详细介绍。把每一部分说的更详细一点,细节搞懂,基础知识搞懂。
* [x] ~~准备一份用于算法岗位的简历。~~)
* [x] ~~添加tensorflow框架修改的毕业设计。提高性能~~发现这个算法真的就是糊弄人。
* [x] ~~添加本次联邦学习与恶意软件检测的毕业设计。~~
### 投递(上午)
* [ ] 完成一期的简历投递工作
### 成为一个幽默的人(下午)
* [x] 回忆起生活的样子。
### 完成算法和数据结构的笔记复习(晚上)
* [ ] 数据结构(上次用了两周。。。)
* [ ] 线性数据结构
* [ ] 树结构
* [ ] 图结构
> 我为什么要安排给自己做不完的任务。因为,我没时间了。要不要考虑依稀啊,让自己的任务合理一点。

View File

@@ -0,0 +1,4 @@
## 任务
* [ ] 算法(总结的内容,挨个回顾一下。上次用了两周,这次用一晚上???)
* [ ] 枚举
* [ ]

View File

@@ -0,0 +1,10 @@
## 任务
> 把GO语言的内容和开发过的项目复习一下。
* [ ] GO
* [ ] 基础知识。
* [ ] go语言的优势。
* [ ] 并发编程(协程,相关内容的了解)。
* [ ] 网络编程
* [ ] web开发

View File

@@ -0,0 +1,31 @@
## 周日下午
> 无论怎么说,知乎上的交流教程,如果有时间闲下来看看也挺好。其实自己都知道什么东西对自己有用,每次都收藏下来,却懒得再次打开。
### 方法论
1. 拆字。针对不同的点进行发散。广度发散。我昨天打篮球了。“我”还有谁。“昨天”以前也打?“篮球”我也喜欢啊。
2. 上堆下切。从不同的角度分析一个话题。深度发散。读书。读什么书、其他的爱好呢,去哪读书。
3. 感受评价。感性的恢复,这也行,太厉害。
4. 联想。发散到一些无关紧要的事情上去。
### 话题
* 生活相关
* 吃喝(自己做饭,烤肉,韩餐,火锅,聚十三,局气,高兴火锅,海底捞,凉粉,木屋烧烤,日式烧烤,比格披萨)
* 玩乐(北京有哪些好玩的地方,动物园海洋馆啥的。香山红叶只听过,但还没见过。去过奥体中心,鸟巢水立方,国家森林公园,同学的几个学,北海公园,南锣鼓巷,天安门故宫等)
* 唱歌(虽然我很菜,但是挺喜欢听得,一年一度的草莓音乐季啥的,好想去听一场演唱会。说唱就算了,那不是我喜欢的风格。我比较喜欢有旋律的那种,甚至可以没有歌声。)
* 旅行(旅行的艺术,想出去玩啊,去青岛啊,工作。沿着海边走走散散步就很开心,也没觉得很潮湿。)
* 电影(最近有啥好看的电影吗,可以推荐一下,待会去看个电影也行。青蛇传?我老早想去看,但一直没有机会。)
* 电玩(啥也别说了,我想抓只公仔回来,,,啧啧啧。)
* 综艺、动漫、剧(奇葩说,脱口秀大会,时光代理人,不问过去,无论将来。因为历史我们无法改变,而将来一定会因为我们发生变化。想看那个孙红雷张艺兴演的扫黑风暴)
* 新闻(吴亦凡、阿里女员工、阿富汗撤军,天天想着怎么统一台湾,到时候为国家贡献点炮灰。疫情形势不容乐观,学校又加强防疫了。)
* 兴趣爱好(喜欢做什么,打篮球运动?看看综艺电影?跟好哥们一起逛街?)
* 工作相关
* 实习字节跳动朝九晚九mentor女工作强度太大了。压力山大
* 工作(刚开始准备,感觉时间已经不够了。待会车上睡一觉吧。别赶上晚高峰。投投互联网公司,过几天投投国企。)
* 毕设下周中期答辩我还有三篇文档一个PPT没做每天每天的焦虑不过我觉得我这个方向做的很有趣。我想新最好的方法就是分布式。
* 过去未来
* 高中初中在哪(有没有认识的人,发生过啥有意思的事情,现在联系的还多吗)
* 在博兴的见闻。滨州的见闻,指不定有啥好玩的。滨州上次上中央新闻。假造纸币。一次发现外星人。
* 未来就一直这样努力下去,在北京买房?

View File

@@ -0,0 +1,239 @@
# 九月份计划
## 简历投递
-------------------------------------------------
互联网企业
### 字节
* 岗位
* 后端开发工程师-支付业务(财经业务,直通终面的机会。好好准备一下)
* 隐私计算平台开发工程师-Data
* 技术
* 第一岗位要求
* 1、2022届获得本科及以上学历计算机相关专业
* 2、有扎实的数据结构和算法功底能熟练实现递归等常见算法/数据结构;
* 3、熟悉C/C++/Java/Python/Golang中的至少一门语言对面向对象有基础了解
* 4、了解数据库、操作系统、计算机网络等核心课程的知识。
* 第二岗位要求:
* 1、2022届获得本科及以上学历计算机相关专业
* 2、熟悉Linux开发环境良好的系统编程、数据结构、算法基础、系统设计能力
* 3、精通服务端基础技术Go/C++/Java/Python了解MySQL/Redis/MQ的原理
* 4、熟悉Linux开发环境良好的系统编程、数据结构、算法基础、系统设计能力
* 5、乐于挑战没有明显答案的问题快速理解业务场景从具体问题中抽象出通用的解决方案
* 6、有实际的大规模分布式系统相关工作经历优先
* 7、对机器学习系统Tensorflow/Caffe/MXNet和算法CNN/RNN/LSTM/VAE有理解、认识或经验者优先
* 8、对隐私计算联邦学习、多方安全计算、机密计算有了解优先。
* 流程
* [ ] 简历投递与直通终面协商。https://jobs.bytedance.com/campus/position/application
### 阿里
* 岗位
* 蚂蚁集团-CTO线-蚂蚁(未来数字科技)
* 技术
* 或许,你来自计算机专业,机械专业,甚至可能是生物专业;
* 但是,你酷爱着计算机以及互联网技术,热衷于解决挑战性的问题;
* 或许你痴迷于数据结构和算法热衷于ACM常常为看到“accept”而兴奋的手足舞蹈
* 或许你熟悉Unix/Linux/Win32环境下编程并有相关开发经验熟练使用调试工具并熟悉某种脚本语言
* 或许你熟悉网络编程和多线程编程对TCP/IPHTTP等网络协议有很深的理解
* 或许你享受底层技术在kernel的源代码中纵横驰骋
* 或许你不熟悉CC++,但是你不畏挑战,喜欢钻研,能够用你亮眼的成果证明自己超强的学习能力;
* 或许,你参加过大学生数学建模竞赛,“挑战杯”,机器人足球比赛等;
* 或许,你在学校的时候作为骨干参与学生网站的建设和开发;
* 但是,这些都是我们想要的。
* 流程
* [x] 直通终面但愿是吧看到已经投了。就坐等吧。https://talent.alibaba.com/personal/campus-application
### 腾讯
### 百度
* 岗位:
* 北京-C++/PHP/GO研发工程师
* 技术:
* -热爱互联网,对互联网产品和技术有浓厚的兴趣,热衷于追求技术极致与创新
* -深刻理解计算机数据结构和算法设计熟悉C/C++或PHP或GO编程语言
* -了解Windows、Unix、Linux等主流操作系统原理熟练运用系统层支持应用开发
* -优秀的分析问题和解决问题的能力,勇于解决难题
* -强烈的上进心和求知欲,较强的学习能力和沟通能力,具备良好的团队合作精神
* 具有以下条件者优先:
* -计算机领域相关的编程大赛获奖、专业期刊发表文章或者有发明专利等
* -有一定项目经验,熟悉软件工程开发流程
* -具备专业领域的计算机知识和技能:搜索引擎、数据挖掘/机器学习、多媒体、地理信息系统、云计算、分布式系统等
* 流程
* [x] 建立投递https://talent.baidu.com/external/baidu/campus.html#/individualCenter
### 360
* 岗位:
* 后端开发工程师Golang。毕竟对golang很感兴趣。但感觉C++希望更大。改一下
* 技术
* 计算机相关专业,本科及以上学历;
* 熟悉 Golang 基础知识,能够使用 Golang 实现功能模块发开;了解 HTTP、TCP/IP 等网络通信基础知识;
* 扎实的编程能力,熟悉常用算法和数据结构,掌握常用的设计模式;
* 了解常见的分布式存储计算框架;
* 有强烈的上进心和自我驱动,学习适应能力强,乐观自信,能挑战自我不断追求卓越;
* 有Docker、k8s容器技术使用经验者优先。
* 流程
* [x] 官网投递https://app.mokahr.com/campus_apply/360campus/26419#/candidateHome/applications
### 美团
* 岗位:
* 官网:后端开发工程师——到店事业群平台技术部
* 脉脉C++/JAva高级开发工程师数字营销方向。高级Go研发工程师。高级C++工程师。
* 技术
1. 掌握一种以上的开发语言包括但不限于Java、C、C++、Python、Golang等了解MySQL等基本使用熟练使用SQL语句会常用的shell命令
2. 具有扎实的数据结构、操作系统、数据库、算法、网络等计算机基础知识;
3. 面向对象编程、多线程、网络编程、异步IO、分布式、缓存、消息队列等技术原理和细节。
4. mysql、redis、linux操作系统开发环境。脚本语言。
5. 善于交流,有良好的团队合作精神和协调沟通能力,有一定推动能力。具备以下者优先:
1. 有参与各级计算机竞赛并获奖经历;
2. 有原创的技术博客或者开源项目或者参与过知名的开源项目;
3. 有在知名公司核心部门的实习经历且实习时间不少于6个月。
* 流程
* [x] 官网投递https://campus.meituan.com/apply-record
### 网易
* 岗位:
* C++开发工程师:网易有道
* 雷火游戏开发感觉能进也不错hhh
* 技术
* 就是喜欢C、C++这个程序语言,还就爱拿它做项目开发;
* 对网络编程有研究基本的gdb调试能力内存泄漏越界读写等常见问题对你来说都不是问题
* 作为一个优秀的程序员有良好的服务器端编程能力和编程习惯相关模块设计、文档编写都是小case
* 十八般武艺样样精通,掌握多线程并发编程技术,掌握各种数据结构和算法;
* 熟悉windows/linux编程环境如果有MySQL开发经验那就再 好 不 过 啦!!!
* 流程
* [x] 官网投递https://campus.163.com/app/personal/apply
### 搜狐
### 新浪
### 携程
---------------------------------------------------------
电商
### 京东
### 虾皮
### 唯品会
### 拼多多
--------------------------------------------------------
手机厂商
### 华为
* 岗位
* 云计算工程师cloud BU 和消费者BG
* 软件开发工程师(领域)操作系统开发工程师(第一意向部门)消费者BG软件部(第二意向部门)中央软件院
* 技术
* 1、计算机、软件相关专业本科及以上学历
* 2、熟悉以下一种编程语言C/C++/Java/C#/Python/Go/PHP等编程语言
* 3、熟悉或掌握以下一方面知识者优先
* 虚拟化、计算、网络、存储、安全、监控运维、操作系统、数据库、系统自动化、分布式架构、开源等;
* 有IT应用软件、互联网软件、IOS/安卓等相关产品开发经验。
* 第二个方向
* 1、计算机、软件、通信等相关专业本科及以上学历
* 2、热爱编程基础扎实熟悉掌握但不限于JAVA/C++/C/Python/JS/HTML/GO等编程语言中的一种或数种有良好的编程习惯
* 3、具备独立工作能力和解决问题的能力、善于沟通乐于合作热衷新技术善于总结分享喜欢动手实践
* 4、对数据结构、算法有一定了解
* 5、优选条件
* 1熟悉TCP/IP协议及互联网常见应用和协议的原理
* 2有IT应用软件、互联网软件、IOS/安卓等相关产品开发经验,不满足于课堂所学,在校期间积极参加校内外软件编程大赛或积极参于编程开源社区组织;
* 3熟悉JS/AS/AJAX/HTML5/CSS等前端开发技术。
* 流程
* [ ] 简历投递https://career.huawei.com/reccampportal/portal5/campus-recruitment-detail.html?jobId=176044
### 小米
* 岗位
* 软件开发工程师(C/C++/Java)-互联互通方向(感觉这个偏向物联网,小米的物联网智能家居做的还是挺好的。)
* 软件开发GOlang方向。说实话小米的这个投递很迷。都不知道为啥蹦出个360的岗位。好几个投了但是没有记录
* 要求
* 1、参与互联互通系统的开发落地,涉及多个平台AndroidLinuxWindows等
* 2、负责Android/Linux中通信协议的演进、升级、优化和增强涵盖系统架构分析/兼容性/性能/功耗/稳定性优化;
* 3、研究和跟进TCP/IP/WiFi(802、11)/蓝牙/IOT领域业界技术演进/新技术和新标准。
* 1、熟悉C/C++/JAVA语言熟练掌握其中一种
* 2、熟悉Linux Socket编程对TCP/UDP/IP等有深入了解
* 3、对数据结构算法比较了解。
* 进度
* [x] 建立投递。官网烂的一批。https://app.mokahr.com/campus_apply/xiaomi/286#/job/dc8d7233-d059-4df9-938d-c0a01be881f7
* [ ] 要做测评(邮箱里有测评的链接。)
### vivo
* 岗位:
* C++工程师机器学习算法的工程架构方向这个方向非常合适。因为自己看过tensorflow源码。而且进行修改和构建过tensorflow。
* 技术:
* 本科及以上学历,计算机、软件、通信等相关专业;
* 良好的在线工程、分布式开发能力,了解常见推荐系统的架构,了解常见推理预估系统;
* 熟练掌握C/C++会使用Python、Java、Go等编程语言或者你可以在一个月内熟练掌握一门语言
* 熟悉Linux平台下的多线程编程
* 优选条件:
* 有具备一定影响力的开源项目者优先
* 熟悉TensorFlow深度学习框架设计原理、阅读过相关源码者优先
* 熟悉GPU编程熟悉MPI编程技术者优先对代码有追求
* 追求极致者优先。
* 流程
* [x] 官网投递https://hr.vivo.com/wt/vivo/web/index/vivoWebApplyRecord!listApplyPosition?needStatusFlows=true&operational=02f4dd86cdc9dba12c3242481c337db74d520ab50f4e1149fd03ebb813893b3b542924cc9c031162eed4735afbb152fd4db61589e305f0e699a2cde327d0445b39d54974eb3498113599ede2aca688dd6a050916bdbdad37e285cdeebdc1145f149f19f731c78765
* [x] 网络测评
--------------------------------------------------------
国企研究所
### 中国银行
### 工商银行
### 农业银行
### 建设银行
### 移动公司、联通公司、电信公司
### 山东电网、国家电网、青岛电网
http://qingdao.offcn.com/html/gqzp/
http://qingdao.offcn.com/html/2021/08/79827.html
### 中电14所
------
外企
### 微软
## 收获
1. 第一周8.9
1. 对工程进行重构通过继承和模块化支持工程扩展。移植到Project当中。并进一步去掉冗余的代码
2. 对独立同分布问题进行探讨,数据集扩充、非独立同分布划分方式增加、衡量非独立同分布的方法
3. 实验设置验证各个算法的优势以及各个算法在不同参数epoch等影响下的表现
2. 第二周

View File

@@ -1,94 +1,71 @@
# 八月份计划
## 任务——秋招准备
> 对三月份的计划补充与复习。
> 需要将当时没有完成的一些任务完成。例如linux开发等一系列内容。
> 微服务相关的一系列内容。这一次准备应该是更全面更充分的一次。
## 简历投递
### 知识复习——语言
> 由于java和go的重复性。go作为新兴语言的优势。所以掌握go语言。
* [ ] C++
* [ ] 基础知识
* [ ] 标准库
* [ ] 面向对象
* [ ] 设计模式
* [ ] 并行编程
* [ ] GO
* [ ] 基础知识。
* [ ] go语言的优势。
* [ ] 协程并发编程等,相关内容的了解。
* [ ] 数据结构
* [ ] 算法
### 知识复习——基础
* [ ] 操作系统
* [ ] 数据库
* [ ] 计算机网络
### 知识复习——框架
* [ ] C++/GO框架
* [ ] 微服务框架
* [ ] docker/k8s/kite
### 编程实战
* [ ] C++/Go网络编程(总结自己的网络编程经验。自己的grpc和kite/thrift框架的应用经验。关于异步通信的一些实现和总结。)
* [ ] web开发总结自己的web开发经验
* [ ] Linux系统编程
### 力扣刷题
* [ ] 算法编程(力扣刷题)
### 简历准备
* [ ] 对简历上的项目进行介绍
## 计划
其实现在的情况很尴尬。留给自己准备秋招的时间只有十天了。然而,还必须拿出五天来,写中期报告、实习报告、毕设论文、小论文这一系列的东西。感觉加起来得两周才能搞定。从下周一开始?做到周六,然后就告一段落了。要重新熟悉自己看过的论文、写过的报告、计划、收获与想法、代码等。对过去做过的事情总结。对未来要做的事情进行总结。
我的性格很简单。什们事情都要做到完美。如果不能全力以赴做到完美,还有什么意义。完美主义者,必然要在无聊的细节上浪费大量的时间。
> 写着玩玩。
-------------------------------------------------
互联网企业
### 字节
### 阿里
### 腾讯
### 百度
### 360
### 美团
### 网易
### 搜狐
### 新浪
### 携程
---------------------------------------------------------
电商
### 京东
### 虾皮
### 唯品会
### 拼多多
--------------------------------------------------------
手机厂商
### 华为
### oppo vivo
###
### 米哈游
--------------------------------------------------------
国企研究所
### 中国银行
### 工商银行
### 农业银行
### 建设银行
### 移动公司、联通公司、电信公司
### 山东电网、国家电网、青岛电网
http://qingdao.offcn.com/html/gqzp/
http://qingdao.offcn.com/html/2021/08/79827.html
### 中电14所
* 周一
* [x] 毕设实验做完
* 周二
* [ ] 中期报告与答辩PPT做完
* 周三
* [x] 系统架构完成
* 周四
* [ ] 恶意软件数据的特征提取完成
* 周五
* [ ] 就业投递简历做完
* 周末
* [ ] 秋招准备,并启动每日秋招计划
## 收获
1. 第一周8.9
1. 对工程进行重构通过继承和模块化支持工程扩展。移植到Project当中。并进一步去掉冗余的代码
2. 对独立同分布问题进行探讨,数据集扩充、非独立同分布划分方式增加、衡量非独立同分布的方法
3. 实验设置验证各个算法的优势以及各个算法在不同参数epoch等影响下的表现
2. 第二周
1. 第一周8.19
1. 完成知识复习
2. 完成为期一周的编程实战
3. 完成持续的力扣刷题

View File

@@ -1,21 +1,3 @@
## 本周计划
> 写着玩玩。
* 周一
* [ ] 毕设实验做完
* 周二
* [ ] 中期报告与答辩PPT做完
* 周三
* [ ] 系统架构完成
* 周四
* [ ] 恶意软件数据的特征提取完成
* 周五
* [ ] 就业投递简历做完
* 周末
* [ ] 秋招准备,并启动每日秋招计划
## 收获

View File

@@ -11,4 +11,12 @@ l 存在的问题、尚未完成的工作及后期工作的设想和安排。
截止时间为2021年8月30日
分组,学生才能打印中期检查表
报告时间15分钟左右其中学生汇报不超过10分钟专家提问不超过5分钟。
报告时间15分钟左右其中学生汇报不超过10分钟专家提问不超过5分钟。
1. 面向恶意软件的联邦元学习算法
2. 融合差分隐私的隐私保护技术
3. 基于微服务的可扩展联邦学习系统

View File

@@ -105,6 +105,7 @@
5. 行为型类模式使用继承描述算法和控制流;
6. 行为型对象模式描述一组对象怎样写作完成单个对象无法完成的任务;
> 设计模式依赖于特定的语言和场景。这23中大部分都是基于java语言产生的设计模式。向在Python中迭代器模式可以通过简单的__next()__函数实现原型模式可以定义__prototype__直接实现。所以实现方法在不同的语言中差别较大。装饰器模式可以通过定义@derector类实现类装饰器动态添加功能。
## 2 设计模式之间的关系
![](image/2021-04-10-11-06-53.png)

View File

@@ -10,6 +10,8 @@
- 如果一个类拥有多于一个的职责,则这些职责就耦合到在了一起,那么就会有多于一个原因来导致这个类的变化。对于某一职责的更改可能会损害类满足其他耦合职责的能力。这样职责的耦合会导致设计的脆弱,以至于当职责发生更改时产生无法预期的破坏。
- **低耦合高内聚**
### 是什么
> 一个类应该有且只有一个变化的原因。

View File

@@ -87,7 +87,7 @@ public class Singleton {
}
```
#### Ⅱ 饿汉式-线程安全
### Ⅱ 饿汉式-线程安全
* 线程不安全问题主要是由于 uniqueInstance 被实例化多次,采取直接实例化 uniqueInstance 的方式就不会产生线程不安全问题。
@@ -97,7 +97,7 @@ public class Singleton {
private static Singleton uniqueInstance = new Singleton();
```
#### Ⅲ 懒汉式-线程安全
### Ⅲ 懒汉式-线程安全
* 只需要对 getUniqueInstance() 方法加锁,那么在一个时间点只能有一个线程能够进入该方法,从而避免了实例化多次 uniqueInstance。

View File

@@ -1,3 +1,4 @@
## 工厂方法
**别名**
- 虚构造器 Virtual Constructor

View File

@@ -1,3 +1,4 @@
## 生成器
**意图**
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

View File

@@ -1,4 +1,4 @@
## 原型模式
**别名**
- Clone

View File

@@ -1,3 +1,4 @@
## 适配器模式
**别名**
- 包装器Wrapper
@@ -60,9 +61,7 @@ Adapter
目的是将接口部分和实现部分分离,从而对它们可以较为容易也相对独立的加以改变。而
Adapter 则意味着改变一个已有对象的接口。
- Decorator 模式增强了其他对象的功能而同时又不改变它的接口。因此 Decorator
对应用程序的透明性比 Adapter 要好。结果是 Decorator 支持递归组合,而 Adapter
无法实现这一点。
- Decorator 模式增强了其他对象的功能而同时又不改变它的接口。因此 Decorator对应用程序的透明性比 Adapter 要好。结果是 Decorator 支持递归组合而Adapter无法实现这一点。
- Proxy 模式在不改变它的接口的条件下,为另一个对象定义了一个代理。

View File

@@ -1,3 +1,4 @@
## 桥接
**别名**
- Handle

View File

@@ -1,3 +1,5 @@
## 组合模式
**意图**
将对象组合成树形结构以表示 “部分-整体” 的层次结构。

View File

@@ -1,3 +1,4 @@
## 装饰器模式
**别名**
- 包装器Wrapper

View File

@@ -1,3 +1,4 @@
## 享元模式
**意图**
运用共享技术有效地支持大量细粒度的对象。

View File

@@ -1,3 +1,4 @@
## 责任链模式
**意图**
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

View File

@@ -1,4 +1,4 @@
## 访问者模式
**意图**
表示一个作用于某对象结构中的各元素的操作。

View File

@@ -1,3 +1,4 @@
## 命令模式
**别名**
- Action

View File

@@ -1,3 +1,4 @@
## 备忘录模式
**别名**
- Token

View File

View File

@@ -0,0 +1,74 @@
### 创建型
单例模式:某个类只能有一个实例,提供一个全局的访问点。
简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。
工厂方法:定义一个创建对象的接口,让子类决定实例化那个类。
抽象工厂:创建相关或依赖对象的家族,而无需明确指定具体类。
生成器模式:封装一个复杂对象的构建过程,并可以按步骤构造。
原型模式:通过复制现有的实例来创建新的实例。
### 结构型
> 这几个都很相似,实现方法基本一致。但是功能略微有区别,应用场景不太一样。
适配器模式:将一个类的方法接口转换成客户希望的另外一个接口。
* 为了适应某些接口。依赖当前对象,生成新的接口。
桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。
* 与策略模式完全一致。接口与实现分离。
组合模式:将对象组合成树形结构以表示“”部分-整体“”的层次结构。
* 树节点的典型表示。但每个节点可以有自己不同的属性,可以是不同的子类。
装饰模式:动态的给对象添加新的功能。
* 动态添加功能。原来的接口不变。Python中的derector。想在工程中使用这个功能的。但是通过桥接模式、适配器模式两层结构也解决了问题。在服务提供端提供了抽象的算法接口。然后依赖一个实例化的类适配grpc的接口。在服务访问端使用代理模式提供相同的接口访问远程对象。grpc本身应道反射机制。桥接模式本质上与策略模式一致。
代理模式:为其他对象提供一个代理以便控制这个对象的访问。
* 远程接口。
~~亨元(蝇量)模式:通过共享技术来有效的支持大量细粒度的对象。~~
外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。
### 行为型
~~模板模式:定义一个算法结构,而将一些步骤延迟到子类实现。~~
~~解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。~~
策略模式:定义一系列算法,把他们封装起来,并且使它们可以相互替换。
* 一个算法有多种实现方式。例如排序。可以通过快排、归并排序等不同的策略实现。
状态模式:允许一个对象在其对象内部状态改变时改变它的行为。
* 典型的有限状态机机制。在每种状态的时候,有不同的状态转移方法。可以参考力扣上状态机的题。重新理解一下。
观察者模式:对象间的一对多的依赖关系。
* 典型的事件响应机制。在一个对象上,注册多个观察者(订阅者)。当发生事件的时候,通知观察者执行相关的操作。
备忘录模式:在不破坏封装的前提下,保持对象的内部状态。
中介者模式:用一个中介对象来封装一系列的对象交互。
* 多对多模式网状依赖关系结构。使得多个对象依赖同一个对象,完成操作。
命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。
* 典型的回调机制。但是是一个回调对象。传递给另一个对象,另一个对象执行过程中,在某些特定时机调用该回调对象。
访问者模式:在不改变数据结构的前提下,增加作用于一组对象元素的新功能。
责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。
* 典型的request、response处理过程。多种不同的request分步解析处理。分发给不同的人。
迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
* 编程可迭代对象。不同的语言实现方法,都差不多。

19
项目经历/说明.md Normal file
View File

@@ -0,0 +1,19 @@
## 项目经历
> 主要对自己参与的项目进行详细的文字图片介绍
* 项目内容
* 负责内容
* 关键技术及难点
* 最终的成果
## 开发经验
> 主要关于项目开发中某一方面的知识经验总结
* 网络编程(各种语言的实现方法。异步并发,并发通信方式。)
* web开发自己所开发过的web网站。主要用到的框架和技术。
* 并行编程(各种语言实现并发编程的手段和方式,例如协程、多线程、多进程等)