GuoXin Li's Blog

GuoXin Li's Blog

Rendering pipline
阶段 应用程序阶段 几何阶段 光栅化阶段 应用程序阶段 通过软件的方式来实现的阶段(其他阶段全部或者部分建立在硬件基础之上) 可以并行在 CPU 上执行,超标量体系结构,同一阶段同一时间做不同的几件事情。 包含碰撞检测、加速算法、输入检测、动画、力反馈、纹理动画、变换仿真、几何变形等。(视锥体裁剪等加速算法) 主要任务为:将需要在屏幕上显示出来的几何体(图元)输入到绘制管线的下一阶段。 几何阶段 模型视点变换 顶点着色 投影 裁剪 屏幕映射 光栅化阶段 即给每个像素进行正确的配色,以便正确的绘制整幅图像。 三角形设定(Triangle Setup) 三角形遍历 (Triangle ...
Java Reflect
反射|注解|泛型反射反射:解决运行期间对某个未知实例,进行调用其方法。反射是一种专门为静态语言(编译时变量的数据类型即可确定的语言,要求使用变量之前必须声明数据类型。如c++、Java、C#等)提供的技术,用于在程序运行时动态的改变程序的状态和行为。运行时,对于任意一个类或对象,都能够调用它的任意字段和方法。 Java 类的成员包括:属性字段、构造函数、方法。 反射API与Java的以上成员相关: 获取 Class 对象的三种方式: 1234567// 1.通过字符串获取Class对象,这个字符串必须带上完整路径名Class s1 = Class.forName("com.test.r...
Android Learning
Android LearningAndroid系统架构 Linux 内核层 为Android设备多种硬件提供底层的驱动及电源等管理。 系统运行库 通过C/C++库为Android系统提供主要的特性支持。如 OpenGL ES库和 Webkit浏览器内核。 应用框架层 提供构建应用程序时可能用到各种API。 应用层 安装使用的软件。 项目目录资源res下 drawable :存放图片 mipmap:存放应用图标 values:存放字符串、样式、颜色配置 layout:存放布局文件 build.gradle最外层的为项目配置: 1234567891011// Top-leve...
Thread, Process and Parallel computing
Thread 程序指令能被单独操作的最小序列单位 拥有自己的寄存器,PC(program counter,程序计数器),SP(stack pointer 栈计数器) Process 进程被执行的实例 一个进程有多个线程 大部分为单线程 Parallel computing 在一个或多个CPU执行 多线程(内存共享 多进程(内存独立 多线程 1234567891011121314151617#include <iostream>#include <thread>using namespace std;int a = 1;void run(){...
C++ Smart pointer
C++ 智能指针 C++指针支持使用 和 运算符动态分配和释放newdelete对象。 这些运算符为来自称为“自由存储”的池中的对象分配内存。 运算符 new 调用特殊函数 operator new,运算符 delete 调用特殊函数 operator delete。 C++ 智能指针思路类似于在语言(如 C#)中创建对象的过程:创建对象后让系统负责在正确的时间将其删除。 不同之处在于,单独的垃圾回收器不在后台运行;按照标准 C++ 范围规则对内存进行管理,以使运行时环境更快速更有效。 实际的C++开发过程中存在程序崩溃、程序运行所需内存越来越多的问题等,主要原因有: 内存资源已经释...
Cmake common syntax
以一个 OpenGL 程序为例: 1234567//文件目录./├── CMakeLists.txt├── build├── lib│   └── glad.c└── main.cpp CMakeLists.txt文件: 1234567891011121314151617181920212223242526272829303132333435363738# cmake的版本号cmake_minimum_required(VERSION 3.17)# project 的名字project(OpenglDemo)# C++ versionset(CMAKE_CXX_STANDARD 14)#...
LeetCode TIPS
LeetCode OWNTIPS Type C++ Java array T dirs[n] T[] dirs = new T[n] dynamic array vector\ ArrayList\ list list\ LinkedList\ OrderedSet \ OrderedMap set\, map\ TreeSet\, TreeMap\ HashSet \ HashMap unordered_set\, unordered_map\ HashSet\, HashMap\ heap priority_queue\ PriorityQueue...
golang specific notes
安装基础及概念安装: GO 安装官网:https://golang.org/dl/ GO 的三个环境变量重要概念: GOROOT:GO语言安装目录 GOPATH:若干自定义的工作空间,也就是传统的工作区 (Workspace) GOBIN:GO 程序生成的可执行文件路径 HelloWorld go run helloworld.go 命令 编译模式: 在源码目录下进行 go install 会自动生成 bin 文件夹,里面会有编译的 hello 可执行程序 go 编译程序时,会自动在 GOROOT/src 文件夹下 或者在 GOPATH/src文件夹下程序包里自动寻找 main ...
ListNode-Data Structure
ListNode递归反转反转一个链表(用递归的方式): 1234567ListNode reverse(ListNode head){ if(head.next == null) return head; ListNode last = reverse(head.next); head.next.next = head; head.next = null; return last;} 关键的重点在于:ListNode last = reverse(head.next),此句在于将 head 之后的链表进行反转,反转之后,head 仍然指向 head 之后的第...
SLAM Learning
本文内容参考自 「高翔-SLAM14讲」 Slam: Simultaneous localization and mapping 同时定位🌧️地图构建,概念为希望机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的地图特征(如墙角,柱子)定位自身的位置和姿态,再根据自身位置增量式的构建地图,从而同时定位和地图构建的目的。 SLAM发展上世纪80年代SLAM概念的提出,从早期的声呐,到后来的2D/3D激光雷达,再到单目、双目、RGBD、ToF等各种相机,以及与惯性测量单元IMU等传感器的融合;SLAM的算法也从开始的基于滤波器的方法(EKF、PF等)向基于优化的方法转变,技术框架...
A Little bit of Summary Of Deep Learning
深度学习技术与理论一、简答题(50 分)。 1、Sigmoid, Tanh, Relu 这三个激活函数有什么缺点和不足?有哪些最新改进的激活函数?(10 分) 激活函数 公式 缺点 优点 sigmoid $\sigma(x) = 1/(1+e^{-x})$ 1. 由于其软饱和性,会有梯度消失弥散问题,导致训练出现问题2. 不是关于原点对称3. 计算 exp 较为耗时 1. 函数输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层2. 求导容易 Tanh $tanh(x) = 2\sigma(2x)-1$ 梯度弥散没有解决 1. 解决了原点对称的问...
git frequently used actions
git 记要 git add , git checkoutgit add 后修改文件,可以再使用 git checkout 使得 work dir 返回到 stage 区的刚刚 git add 的状态 保存 git commit -m ’xxx’ , git commit —amend将 stage 区文件提交到 history 区,进入history 后的修改将永远不会丢失。 反悔之小悔 git resetgit reset a.txt 可以将已经使用 git add 命令将其添加到 stage 区的 a.txt 还原到 work dir。 从 work dir 区提交到 histo...
OS-Learning: Linux Homebrew
OS-Learning: Linux Homebrew准备工作程序编译过程 gcc helloworld.c -E -o helloworld.i 预处理:加入头文件,替换宏。 gcc helloworld.c -s -c helloworld.s 编译:包含预处理,将 C 程序转换成汇编程序 gcc helloworld.c -c helloworld.o 汇编:将汇编程序转换成可链接的二进制程序 gcc helloworld.c -o helloworld 链接:包含了以上的所有操作,直接将可链接的二进制程序和其他别的库链接在一起,形成可执行的程序文件。 PC OS 引导流程 P...
CUDA coding
CUDA 编程现代 CPU 架构和性能优化CPU的概念: 执行指令,处理数据的器件——完成基本的逻辑和算术指令 增加了复杂的接口 内存接口 外部设备接口 包含大量静晶体管 桌面应用 轻量级进程,少量线程 分之和交互操作 大量存储器访问 用于数值运算的指令很少 CPU结构图 取指 译码 执行 访问 写回 流水线 利用指令级的并行 极大的减小时钟周期 但是增加了延迟和芯片面积 分支预测猜测下一条指令 基于过去的分支记录 如:基于全局记录的两层预测 现代预测器准确度大于 90% 提升性能以及能量效率 但是会导致面积增加和延迟 提升 IPC (instructions c...
Sliding Window
滑动窗口需要注意的主要步骤 移动 right 时扩大窗口,需要更新哪些数据 什么条件下,窗口应该暂停扩大,开始缩小窗口 移动 left 时缩小窗口,需要更新哪些数据 需要的结果是在哪个地方进行更新,是在扩大窗口时,还是缩小窗口时进行更新。 窗口右端不断向前,直到包含所有的所需元素 (注意,刚刚直到包含所有元素就是窗口开始缩小的条件)。 然后窗口左端开始向前(即进行了窗口的缩小),直到开始不包含所有元素(比如ABC,就少了 A,窗口中只包含了BC) 然后窗口右边再次向右前进,重复上述过程。 最后返回最小的窗口即可(在这里,可以得出,在缩小窗口之前通常需要进行预备份上一次的最...
avatar
Jax