C与C++开源项目学习
来自www.codesheep.cn 作者推荐 CJson 实现在一个C语言的JSON解析器 https://sourceforge.net/projects/cjson TinyHttpd 实现一个C语言简单的HTTP服务器 https://github.com/ezlippi/tinyhttpd MyTinySTL 实现了一个STL库 https://github.com/alinshans/mytinystl OATPP 纯C++的高性能无依赖的WEB框架 https://github.com/oatpp/oatpp Redis https://redis.io nginx 超轻量级静态服务器
CSHARP的编译器
C#、.NET Framework、CLR的关系 .NET框架是一个独立发布的软件包,其包含了CLR、类库以及相关的语言编辑器等工具。C#代码经过编译之后在CLR环境中运行。 C#是一种面向对象编程语言,是为开发.NET框架上的程序而设计的。 (1)C#是由C和C++衍生出来的,所以其可调用由 C/C++ 编写的本机原生函数,同时不损失C/C++原有的强大的功能。 (2)C#所开发的程序源代码并不是编译成能够直接在操作系统上执行的二进制本地代码。它是被编译成为中间代码,然后通过.NET框架的虚拟机(即CLR)来执行。所以如果计算机上没有安装.Net框架,那么程序将不能够被执行。在执行的过程中,.Net框架会将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终翻译的二进制代码将被存储在一个缓冲区中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度会明显加快。 .NET框架有三部分组成 (1)CLR (2)编程工具:涵盖了编码和调试需要的一切:包含:VisualStudio集成开...
CSHARP的Dictionary
参考: https://www.cnblogs.com/InCerry/p/10325290.html 一、前言 Dictionary最大的优点就是它查找元素的时间复杂度接近O(1),实际项目中常被用来做一些数据的本地缓存,提升整体效率。 那么是什么样的设计能使得Dictionary类能实现O(1)的时间复杂度呢? 二、理论知识 1.HASH算法 对于Dictionary的实现原理,其中有两个关键的算法,一个是Hash算法,一个是用于应对Hash碰撞冲突解决算法。 Hash算法是一种数字摘要算法,它能将不定长度的二进制数据集给映射到一个较短的二进制长度数据集,常见的MD5算法就是一种Hash算法,通过MD5算法可对任何数据生成数字摘要。而实现了Hash算法的函数我们叫她Hash函数。Hash函数有以下几点特征。 相同的数据进行Hash运算,得到的结果一定相同。HashFunc(key1) == HashFunc(key1) 不同的数据进行Hash运算,其结果也可能会相同,(Hash会产生碰撞)。key1 != key2 => HashFunc(key1) == HashF...
CSHARP的GC
一、GC概述 早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现。Lisp的程序员认为内存管理太重要了,所以不能由程序员自己来管理。但后来的日子里Lisp却没有成气候,采用内存手动管理的语言占据了上风,以C为代表。出于同样的理由,不同的人却又不同的看法,C程序员认为内存管理太重要了,所以不能由系统来管理,并且讥笑Lisp程序慢如乌龟的运行速度。的确,在那个对每一个Byte都要精心计算的年代GC的速度和对系统资源的大量占用使很多人的无法接受。而后,1984年由Dave Ungar开发的Small talk语言第一次采用了Generational garbage collection的技术(这个技术在下文中会谈到),但是Small talk也没有得到十分广泛的应用。 直到20世纪90年代中期GC才以主角的身份登上了历史的舞台,这不得不归功于Java的进步,今日的GC已非吴下阿蒙。Java采用VM(Virtual Machine)机制,由VM来管理程序的运行当然也包括对GC管理。90年代末期.net出现了,....
CSHARP的内置引用类型
对象类型 object 类型是 System.Object 在 .NET 中的别名。 ==在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 System.Object 继承的。 可以将任何类型的值赋给 object 类型的变量。 #F44336== 可以使用文本 null 将任何 object 变量赋值给其默认值。 将值类型的变量转换为对象的过程称为 装箱 。 将 object 类型的变量转换为值类型的过程称为取消装箱 。 字符串类型 string 类型表示零个或多个 Unicode 字符的序列。 string 是 System.String 在 .NET 中的别名。 string 为引用类型. The C# String type is internally a ‘UTF-16’ byte string. Intern pool:常量池,==调用String.Intern()将返回常量池里的相同的字符串引用! #F44336== var x = new string(new[] { 'f', ...
Centos 部署 Django
1. 下载必要库 yum -y groupinstall "Development tools" 2. 下载最新SQLITE 到SQLite官网的下载页面:https://www.sqlite.org/download.html 这里是最新的版本,我们就安装它吧。 wget https://www.sqlite.org/2017/sqlite-autoconf-3160200.tar.gztar zxvf sqlite-autoconf-3160200.tar.gzcd sqlite-autoconf-3160200./configuremakesudo make install 以默认方式安装后,会把编译好的二进制文件安装到 /usr/local/lib, 把头文件sqlite3.h sqlite3ext.h安装到/usr/local/include。 用这两条命令确认一下已成功安装到这里: ls -l /usr/local/lib/*sqlite*ls -l /usr/local/include/*sqlite* 3.Python 安装 wget htt...
Conda 常用操作
Conda介绍 Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。 下载&安装 conda官网:https://conda.io/miniconda.html linux或mac ox版本: wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.shchmod 777 Miniconda3-latest-Linux-x86_64.sh #给执行权限bash Miniconda3-latest-Linux-x86_64.sh #运行 当命令行前面出现(base)的时候说明现在已经在conda的环境中了。这时候输入conda list 命令就有反应了 添加频道 官方频道 conda config --add channels biocondaconda config --add chann...
DOTS-事件
方式一、使用NativeQueue循环检测 获取JOB可写的多线程NativeQueue对象 NativeQueue<PipePassedEvent>.ParallelWriter eventQueueParallel = eventQueue.AsParallelWriter(); 发出事件 eventQueueParallel.Enqueue(new PipePassedEvent()); 事件机 while (eventQueue.TryDequeue(out PipePassedEvent evnt)) { //Debug.Log("Get EVENT!!"); OnPipePassed?.Invoke(this, EventArgs.Empty); } 4.接收事件 World.DefaultGameObjectInjectionWorld.GetOrCreateSystem<PipeMoveSystem_...
动态规划
DP-Dynamic Programing 试用场景: 大部分用于求最小值,最大值,最优,计数等的问题 一般步骤:递归+记忆化 1.寻找递归式:由大化小 2.先写递归式,记忆重复项以优化算法复杂度。解决子问题重叠求解。 3.优化为非递归: 由小到大,由大到小(记忆)。 面试常见类型: 1.矩阵坐标型 30% 2.序列型:单序列,双序列 50% 单序列:LIS:longest increasing sequence 最长上升序列 双序列:LCS: longest common sequence 最长公共序列 3.Knapsack变种 20% subset sum. 硬币类题 4.区间型 <10% 矩阵相乘,optimised BST.
数据结构-数组,链表结构
一、数组 物理大小和逻辑大小 物理大小:创建时的大小 逻辑大小:可使用的大小 如果逻辑大小>=物理大小,代表数组被填满了。 增加(插入,替换)、删除静态数组策略 增加: 当逻辑大小已经等于物理大小时,再添加元素数组需要扩容。每增加一个元素就扩容,添加N项的话会带来O(n^2)算法消耗,可以在达到这个条件时,直接为数组扩容两倍。 插入:从数组尾部往后移一位,执行到插入点位置为止,制造一个空洞为新元素 删除: 当逻辑大小已经小于或等于物理大小四分之一时,将数组容量砍半。 删除元素,将此元素索引后一位往前移一位。与插入相反。 复杂度分析 第i个位置插入,删除: O(n) 平均情况 增加减少容量: O(n) 平均情况 第i个位置访问,替换:O(1) 二、链表 单链表, 双链表。 末尾删除: 找出倒数第二个结点,将其next指针指为none即可。 表头删除:找出第一个结点,将next指给head 复杂度分析: 访问第i个元素:O(n) 平均情况 在第i个元素替换:O(n) 平均情况 在开始入插入:O(1) all 在结束处删除:O(1) all 在第i个位置插入,删除:...







