
笔记
文章平均质量分 87
高厉害
此人真的真的非常懒,什么都没有写。
展开
-
【TS】ts 中一些零碎特性记录
使用 spread opt in tuple 时,会出现类似 union 的分配避免 distributioninterface any value 会跳过可分配性检查原创 2023-01-03 18:31:44 · 860 阅读 · 2 评论 -
【JavaScript】MDN 阅读笔记
MDN 阅读笔记从大一到现在,一直在重度使用 JavaScript 相关的技术栈,却一直也没写过系统的笔记。主要是太熟悉,也因为 JavaScript 确实是一门不需要学习就能直接上手开发的语言。最近要准备面试,想系统地看看 JS 的语法、特性,觉得是时候记录一些东西了。这些笔记会忽略一些基础内容,仅记录遇到的问题,以及我认为值得记录的东西。迭代器协议https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Iterators_an原创 2022-05-01 04:23:09 · 1344 阅读 · 0 评论 -
【CS143 Compiler】1. 环境配置、踩坑
CS143 环境配置斯坦福 CS143 Compiler 课程。课程主页在 https://learning.edx.org/course/course-v1:StanfordOnline+SOE.YCSCS1+2T2020/home。它提供了一个预配置的虚拟机,是基于 Ubuntu 古老版本的 Bodhi,这个虚拟机必须跑在 x86 platform 下,我的 M1 Pro mbp 尝试了两个下午后放弃了。CS143 的远古 VM今天装 CS143 提供的虚拟机,由于这是 x86 下创建的,我原创 2022-03-02 15:19:55 · 1587 阅读 · 2 评论 -
【Python】4. Python 并行
并行基于协程的并行基本原理概述协程是一种在线程中被调度的函数,也称作微线程。它的调度与进程、线程不同,完全在用户空间中进行,即协程的调度器行为与操作系统无关。协程可以在等待异步 I/O 时立刻保存当前执行栈帧的上下文,并从调度器处返回,调度器会转而调度和执行其他协程。当 OS 通知调度器异步 I/O 结束后,调度器会带着异步 I/O 的结果调度该协程,并从内存中恢复上下文,从刚才退出协程的位置进入协程继续执行。由于协程只会在开发者指定的位置被调度,所以几乎可以不考虑对资源的原子性访问的问题。原创 2021-09-20 17:47:30 · 469 阅读 · 0 评论 -
【Python】2. Python数据类型
Python 数据类型运算符算数运算+ - * / // % **// 整数除法,与 C 中的对整数的除法相同,结果向下取整** 幂运算位运算<< >> & | ^ ~比较运算< > <= >= == != && ||默认的相等性比较 == != 依据的是对象的内存引用。原创 2021-09-14 17:52:01 · 662 阅读 · 0 评论 -
【Python】1. Python 解释器
Python 解释器参考资料:python std lib -> https://docs.python.org/3/library/index.htmlpython tutorial -> https://docs.python.org/3/tutorial/index.html命令行参数-c command-c 参数允许我们向解释器传递一个字符串作为 python 脚本, 例如:python -c 'import sysprint(sys.argv) # ['-c']pr原创 2021-09-14 17:51:01 · 198 阅读 · 0 评论 -
【现代图形学基础 Games101】3. Viewing Transformation
Viewing Transformation视图变换包含三部分 —— MVP(Model-View-Projection),模型、视图和投影。模型变换就是前两节阐述的直接总用于点集的变换,但如果想看到图像,我们还需要定义一个摄像机,这一部分也包含变换,被称为视图变换,我们下面就来叙述它。View/Camera定义一个摄像机Position e⃗\vec{e}eLook-at/gaze direction g^\hat{g}g^Up direction t^\hat{t}t^前两个参数原创 2021-07-24 21:42:46 · 393 阅读 · 0 评论 -
【现代图形学基础 Games101】2. 3D Transformation
3D Transformation类比 2D 变换:[x′y′z′1]=[abctxdeftyghitz0001][xyz1]\begin{bmatrix}x^{'} \\y^{'} \\z^{'} \\1\end{bmatrix} =\Large{\begin{bmatrix}\textcolor{orange}{a} & \textcolor{orange}{b} & \textcolor{orange}{c} & \textcolor{#0aa}{t_x}原创 2021-07-23 11:43:23 · 193 阅读 · 2 评论 -
【现代图形学基础 Games101】1. 2D Transformation
TransformationCannot read property 'type' of undefined1. Scale将一个平面点集进行平面缩放,记在 x, y 方向缩放倍数为 sx sys_x \ s_ysx sy。Scale Matrix:[x′y′]=[sx00sy][xy]\begin{bmatrix}x^{'} \\y^{'}\end{bmatrix} ={\Large\begin{bmatrix}s_x & 0 \\0 &am原创 2021-07-22 14:27:31 · 288 阅读 · 2 评论 -
【Java Web】Web 服务器简单原理,如何理解 Tomcat、Servlet,并实现一个玩具 Web 框架
Web 服务器原理Tomcat我们经常将 tomcat 称为 服务器,然而这种说法让我迷惑了很久。我认为 tomcat 所作的工作比较接近 Web 框架 这个概念。只不过,在 Java ee 的生态中,Servlet 才应该被称为 框架,而 tomcat,我们可以认为它是 框架的实现。要理解这些东西的含义和 Java Web 服务器(如 tomcat)原理,我们应该首先来谈一下 Servlet。ServletServlet 本质是一个接口,Java 并没有对它做任何实现,仅提供了 Servlet原创 2021-03-16 20:21:10 · 1416 阅读 · 6 评论 -
使用 express 构建简单 GraphQL 接口
使用 express 构建简单 GraphQL 接口GQL**GQL(Graph Query Language)**是一种查询语言。用来设计出较 Restful api 更易于扩展和升级的接口,可以理解为 Restful api 的替代品。GQL 服务可以开放在 Restful api 下,不过其逻辑并不依赖任何平台。在后端,可以使用 GQL 直接描述数据模型,或使用 GraphQL.js 提供的其他接口来描述数据模型。在前端,使用 GQL 直接描述我们需要的数据结构,然后就可以拿到不多不少、结构原创 2021-01-25 19:12:49 · 1260 阅读 · 4 评论 -
【ostep】04 虚拟化 CPU - 进程调度策略
进程调度策略我们称系统中运行的进程为工作负载(workload),我们对工作负载的假设越具一般性,基于该假设设计的调度策略的表现就越优化。下面的讨论均假设,工作负载仅占用 CPU,而不发出任何 I/O 操作。调度指标调度指标用来衡量不同调度策略的优劣周转时间(turnaround time)就是一个任务从交给操作系统到运行结束所用时间。工作周转时间 = 工作完成时间 - 工作到达时间该指标主要看的是平均周转时间:一段时间内多个任务周转时间的均值。平均周转时间 = 周转时间之和 / 工作原创 2021-01-08 20:07:04 · 831 阅读 · 0 评论 -
【ostep】03 虚拟化 CPU - 受限直接执行机制
受限直接执行我们已经学习了进程这个抽象概念,下面要接触到具体的机制了,之前说过,机制是某个功能的实现细节,而策略则类似于对机制的调度。要学习的第一个机制被称为受限直接执行(Limited Direct Execution)。作为一个优秀的操作系统,应该小心地提供那些会导致危险的指令(例如对硬盘的 IO 操作,称特权指令),这些操作被操作系统封装为系统调用(system call)。但是这里还有一个问题,系统调用终究也是一长串指令序列,看起来它与用户的程序并无不同。毕竟 CPU 执行指令时也不会考虑这原创 2021-01-06 20:06:07 · 406 阅读 · 0 评论 -
【ostep】02 虚拟化 CPU - 进程
进程 (process)进程的抽象进程是一种最基本的抽象。进程的非正式定义非常简单:进程就 是运行中的程序。程序本身是没有生命周期的,它只是存在磁盘上面的一些指令(也可能 是一些静态数据)。是操作系统让这些字节运行起来,让程序发挥作用。操作系统决定何时令 CPU 运行何地的指令,通过不断地切换内存中不同程序的指令,类抽象出同时执行多个进程的错觉。可以很自然地联想到组原中的 IO 中断方式,他通过一种类似回调的方式,令 CPU 中断当前运行的程序,关中断,并将断点地址压栈,开中断,跳转至中断向量原创 2021-01-06 20:05:18 · 216 阅读 · 0 评论 -
【ostep】01 操作系统 intro
操作系统操作系统是什么操作系统就是运行在硬件之上的软件,夹在硬件和上层应用程序之间。为硬件统筹和管理资源,同时为应用程序提供抽象。要做到这一点,操作系统主要利用一种通用的技术,我们称之为虚拟化(virtualization)。 也就是说,操作系统将物理(physical)资源(如处理器、内存或磁盘)转换为更通用、更 强大且更易于使用的虚拟形式。因此,我们有时将操作系统称为虚拟机(virtual machine)。很久之前,操作系统有另一个名字 —— “主控程序”,如果没有这个"主控程序",软件(原创 2021-01-06 20:04:12 · 323 阅读 · 0 评论 -
【Core Java】06 Java 接口和内部类
接口和内部类接口接口我们常说,“接口是多个类的公有规范”,这句话本没错,但我们容易误解或忽略"规范"这两个字,这会令初学者远离接口的本质。如果不理解接口,也就很难理解"规范",从而再次很难理解接口,所以我们应该使用更加浅显的话来描述接口 —— “接口是对类的需求描述”。接口是需求描述,对类的需求描述。编写接口的目的是,为了完成一些通用的功能,需要向未知类索取一些方法,这些方法就是对类的需求描述,然后我们对这些行为进行抽象,定义这些抽象行为的规范。相反,实现接口是为了让我们的类更加通用,与他人的原创 2021-01-06 19:59:55 · 687 阅读 · 0 评论 -
【Core Java】05 Java 类的设计及特性
类的设计及特性类的设计隐藏数据为了类的封装性,在设计类时,应该避免直接对外开发数据域。为了保证开发者不依赖于我们的底层细节,应该隐藏数据域(因为不能保证数据形式不会变化),并提供稳定的接口。必要时,会提供访问器和更改器,对数据进行访问保护。public long getAge() { return this.age;}public void setAge(int age) { // 校验 age 是否和发 if(/* condition */){ th原创 2021-01-06 19:52:49 · 146 阅读 · 2 评论 -
【Core Java】04 Java 反射
继承和多态概念继承继承extends:Java 中的继承均为公有继承子类和超类:即子类和父类(也称基类)Java 的继承不用考虑诸如虚函数(虚表、虚指针)等底层细节,不需要额外的显式声明就可以实现动态多态。也就是说,Java 的方法均为虚函数(并不严谨),如果不希望让一个方法是虚拟的,可以使用final关键字修饰。或者,对于static、private方法,不涉及动态多态。虚表、虚指针是 C/C++ 对多态的实现方案,Java 有自己的实现方案 --> 方法表。不过从思路上讲,基原创 2021-01-06 19:57:54 · 118 阅读 · 0 评论 -
【Core Java】03 Java 继承和多态
继承和多态概念继承继承extends:Java 中的继承均为公有继承子类和超类:即子类和父类(也称基类)Java 的继承不用考虑诸如虚函数(虚表、虚指针)等底层细节,不需要额外的显式声明就可以实现动态多态。也就是说,Java 的方法均为虚函数(并不严谨),如果不希望让一个方法是虚拟的,可以使用final关键字修饰。或者,对于static、private方法,不涉及动态多态。虚表、虚指针是 C/C++ 对多态的实现方案,Java 有自己的实现方案 --> 方法表。不过从思路上讲,基原创 2021-01-06 19:53:41 · 167 阅读 · 0 评论 -
【Core Java】02 Java 面向对象基础
封装类的定义class Type{ public String _var; // 成员属性 public Type(...){ // 构造方法 // ... } public void method)(...){ // 成员方法 // ... }}成员变量初始化:class Type { private int field = 10;}或者可以使用某个方法的返回值:class Type { priva原创 2021-01-06 19:51:48 · 137 阅读 · 0 评论 -
【Core Java】01 Java 基础
ContentJava 基础介绍JVMJRE 和 JDK程序运行特别注意Java 数据类型Java 类型检查jshellIDEA 常用快捷键Java 数据基本介绍Java中的数组Java中的内存分配Java 基础介绍JVMJava Virtual Machine Java 虚拟机是 Java 程序的运行环境,用来实现跨平台。JRE 和 JDKJRE(Java Runtime Environment)JRE 是 Java 程序的运行环境,包含 JVM 和核心类库。用来运行程序。JDK原创 2020-07-02 16:52:54 · 684 阅读 · 0 评论 -
所有笔记搬运到这里,并持续更新。。。
→ https://gaolihai.top/note/该页面基于 Docute 实现。原创 2020-08-11 12:50:50 · 248 阅读 · 0 评论 -
【Git 笔记】Git 入门笔记
ContentGit常用命令开始使用 GitGit 的发展分布式版本控制系统Git 下载设置个人信息创建仓库(版本库)添加文件创建文件提交`commit`跨平台的问题版本管理回滚版本打印日志版本回退恢复到指定版本工作区和暂存区撤销修改放弃工作区的修改时间节点放弃暂存区的修改推荐使用`restore`删除文件方法一方法二远程仓库推送到 GitHubSSH 秘钥使用 SSH 协议连接到 GitHub创建 SSH 秘钥在 GitHub 关联公钥在本地关联私钥(选)其他从远程库克隆分支管理创建与合并分支合并冲突留下原创 2020-07-23 18:14:54 · 514 阅读 · 0 评论 -
【PHP 系列笔记】02 PHP 基础
PHP 基础PHP 代码结构PHP 标签嵌入在 HTML 中:// html<?php // ... ?>// html作为一个单文件时允许标签不闭合:<?php// ... 另外还允许简写(需要在php.ini中添加short_open_tag = On) :<?// ...?>此外还允许使用script标签:<script language="php"> // ...</script原创 2021-01-06 20:02:10 · 325 阅读 · 0 评论 -
【PHP 系列笔记】01 PHP 环境配置
PHP 环境配置安装 Apache 服务端下载 Apache :在 Apache 官网下载 Apache 服务端 -> http://httpd.apache.org/download.cgi修改配置 /conf/httpd.conf:修改ServerRoot为 Apache 服务端的根目录修改DocumentRoot为网站文件的根目录修改Directory为网站文件的根目录通过 ./httpd.exe -t 可以测试配置文件是否合法安装 Apache :进入 Apache原创 2020-10-24 14:57:31 · 287 阅读 · 0 评论 -
【正则】正则表达式笔记(JavaScript 语言描述)
Content正则表达式(JavaScript 描述)正则规则最基本的边界/位置符(修饰整句)字符集合(匹配内容)预定义类(匹配内容)量词符(修饰前边紧跟的字符)模式符(优先级)逻辑符(逻辑)创建使用正则表达式(JavaScript 描述)正则规则最基本的/123/代表想要匹配一个含有 “123” 这个子串的字符串。边界/位置符(修饰整句)提示字符所处位置符号解释^指定开头的边界&指定结尾的边界例如:/^123/; // 匹配以 123 开头的原创 2020-07-05 17:06:59 · 445 阅读 · 0 评论 -
【C++】函数对象适配器及其底层原理
函数对象适配器bind1st bind2nd函数对象适配器用于扩展函数对象的功能,提供额外传入参数的方法。例如,我现在有一个一元谓词:class Pred { public: bool operator()(int a) { // ... }};现在调用某算法,该算法会使用这个一元谓词。algorithm(..., ..., Pred());但与此同时,我们希望这个谓词可以额外实现一个功能,而这个功能依赖一个临时传入的参数。于是改了谓词的实现:b原创 2020-06-13 21:45:37 · 378 阅读 · 0 评论 -
【C++ 系列笔记】07 C++ STL - 算法
STL函数对象(仿函数)函数对象是重载函数调用操作符的类实例。函数对象根据参数数量可被称为 N 元仿函数,N 为函数对象调用所需参数个数。重载 () 符号:class Type { public: void operator()(/* args */);};调用:Type objFun();objFun();// 匿名对象Type()();函数对象可以实现闭包:class Counter { private: long count; pub原创 2021-01-06 19:47:08 · 169 阅读 · 1 评论 -
【C++ 系列笔记】06 C++ STL - 常用容器
ContentSTL介绍简介容器算法迭代器常用容器string 容器vector 容器deque 容器stack 容器queue 容器list 容器set/multiset 容器set 容器multiset 容器map/multimap 容器容器总结迭代器类型底层实现性能STL介绍简介(Standard Template Library)标准模板库广义上分为三类:容器(container)算法(algorithm)迭代器(iterator)六大组件:容器一种类模板,有各种数据结原创 2020-06-13 13:59:38 · 420 阅读 · 0 评论 -
【C++ 系列笔记】05 C++ 类型转换、异常处理、I/O 流
Content补充知识C++ 类型转换静态转换`static_cast<>()`动态转换`dynamic_cast<>()`常量转换`const_cast<>()`重新解释转换`reinterpret_cast<>()`C++ 异常处理基本语法异常基本处理C++ 标准异常库C++ I/O 流基本介绍标准输入流标准输出流文件 I/O 流补充知识C++ 类型转换静态转换static_cast<>()允许转换指针、引用及普通变量基础类型d原创 2020-06-11 00:13:58 · 791 阅读 · 0 评论 -
【C++ 系列笔记】04 C++ 泛型编程
Content泛型编程函数模板函数模板模板实现机制模板具体化类模板类模板的类外实现类模板的分文件编写类模板实例做函数参数类模板与友元模板中的继承泛型编程模板是泛型的实现,泛型是模板的思想。泛型的本质是类型的参数化。函数模板函数模板基本语法template<class T>void function(T param1, T param2){ // ...}template<typename T>void function(T param1, T pa原创 2020-06-11 00:06:22 · 363 阅读 · 0 评论 -
【C++ 系列笔记】03 C++ 面向对象进阶
C++ 面向对象进阶继承 - 基础class Base;class Type :public Base{ public: Type(a, b, c):Base(a, b){ // ... }};继承方式( 派生类均不可访问基类私有成员 )public(父类访问权限不变)最常用的方式private(父类访问权限全变成私有)当不希望本类对象访问基类任何成员时,可以考虑使用 private 继承。protected(父类访问权限全变成保护)使用 p原创 2020-06-06 18:43:25 · 390 阅读 · 0 评论 -
【C++ 系列笔记】02 C++ 面向对象基础
ContentC++ 面向对象基础面向对象基础构造函数和析构函数匿名对象拷贝构造函数深拷贝和浅拷贝初始化列表类对象作为成员(组合)explicit 关键字C++ 的动态内存分配(动态创建对象)常量对象调用方法类和对象的内存结构内存结构this 指针友元运算符重载C++ 面向对象基础面向对象基础class Type { private: /* data */ public: Type(/* args */); ~Type(); protected:};Ty原创 2020-06-06 14:58:00 · 197 阅读 · 0 评论 -
【C++ 系列笔记】01 C++ 与 C
ContentC++ 与 CHello world!命名空间(作用域)C → C++ 异同引用C++11 的右值引用内联函数函数的默认参数函数的占位参数函数重载C++ 与 CHello world!#include <iostream>using namespace std;int main() { cout << "Hello world!" << endl; system("pause"); return EXIT_SUCCESS;原创 2020-06-04 18:51:32 · 192 阅读 · 0 评论