interface类型

Go 语言与鸭子类型的关系 If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. 如果某个东西长得像鸭子, 像鸭子一样游泳, 像鸭子一样嘎嘎叫, 那它就可以被看成是一只鸭子. 在 Go 语言中, 如果类型的方法集完全包含接口的方法集,则可认为该类型实现了该接口. 鸭子类型是一种动态语言的风格, 在这种风格中, 一个对象有效的语义, 不是由继承自特定的类或实现特定的接口, 而是由它"当前方法和属性的集合"决定. Go 作为一种静态语言, 通过接口实现了 鸭子类型, 实际上是 Go 的编译器在其中作了隐匿的转换工作. 值接收者和指针接收者的区别 package main import "fmt" type Person struct { age int } func (p Person) howOld() int { return p.age } func (p *Person) growUp() { p....

March 9, 2020 · 11 min · zakudriver

LinkedList

C++ #include <iostream>using namespace std; typedef int Data; struct Node { Data data; Node *next; Node(Data d = 0, Node *n = NULL) : data(d), next(n){}; }; class LinkedList { public: LinkedList(int len) : len(len), head(NULL){}; bool is_empty(); Data get(int); void insert(int, Data); void remove(int); void modify(int, Data); void print_all(); private: Node *head; int len; void check_index(int); Node *get_by_index(int); }; void LinkedList::check_index(int index) { if (index > len || index < 0) { printf("error: 索引越界....

March 5, 2020 · 3 min · zakudriver

文字超出显示省略号

// 文字超出省略号 .text-overflow { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } // 文字超出两行省略号, block元素 .text-overflow-2 { word-break: break-all; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; }

March 4, 2020 · 1 min · zakudriver

List

#include <iostream>#include <stack>#include <stdlib.h>using namespace std; class List { public: List(int len = 10) : len(len) { used = 0; p = (int *)malloc(sizeof(int) * len); } int len; int used; int *p; bool is_full(); bool is_empty(); void push(int); int get(int); void insert(int, int); void remove(int); void print_all(); private: void check_index(int); }; bool List::is_full() { return len == used; } bool List::is_empty() { return used == 0; } void List::check_index(int index) { if (index > len - 1 || index < 0) { printf("error: 索引越界....

March 3, 2020 · 2 min · zakudriver

多线程

线程: 执行指令序列 保留了并发的优点, 避免了进程切换的代价. 实质: 映射表不变, PC指针变. 价值, 用处 浏览器 一个线程用来从服务器接收数据 一个线程用来显示文本 一个线程用来处理图片(解压缩) 一个线程用来显示图片 接收数据线程等待时可以切换到另一个线程(如显示文本), 更加高效利用CPU, 程序交互更加人性化. 线程切换 多线程执行互不干扰, 所以一个线程执行序列对应一个(或套)栈. 线程切换就是切换TCB. TCB (Thread Control Block) 保存线程的信息(执行序列的栈). 与PCB相似, 只是比PCB储存的信息少而已. 用户级线程 用户态切来切去. CPL为3. TCB在用户程序中. void ThreadCeate(A) { TCB *tcb = malloc(); // 申请内存创建TCB *stack = malloc(); // 创建栈 *stack = A; // 保存栈 tcb.esp = stack } // 线程切换 void Yield() { TCB2.esp = esp; esp = TCB1....

March 1, 2020 · 1 min · zakudriver