首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
C basic_string原理
2024-11-02
C++ string实现原理
C++程序员编码过程中经常会使用string(wstring)类,你是否思考过它的内部实现细节.比如这个类的迭代器是如何实现的?对象占多少字节的内存空间?内部有没有虚函数?内存是如何分配的?构造和析构的成本有多大?笔者综合这两天阅读的源代码及个人理解简要介绍之,错误的地方望读者指出. 首先看看string和wstring类的定义: typedef basic_string<char, char_traits<char>, allocator<char> > string
hash_map原理及C++实现
一.数据结构:hash_map原理 hash_map基于hash table(哈希表).哈希表最大的长处,就是把数据的存储和查找消耗的时间大大减少,差点儿能够看成是常数时间:而代价不过消耗比較多的内存.然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的.另外,编码比較easy也是它的特点之中的一个. 其基本原理是:使用一个下标范围比較大的数组来存储元素.能够设计一个函数(哈希函数,也叫做散列函数).使得每个元素的keyword都与一个函数值(即数组下标.hash值)相相应,于是
【C++】从设计原理来看string类
1.一些C++基础知识 模板类string的设计属于底层,其中运用到了很多C++的编程技巧,比如模板.迭代器.友元.函数和运算符重载.内联等等,为了便于后续理解string类,这里先对涉及到的概念做个简单的介绍.C++基础比较扎实的童鞋可以直接跳到第三节. 1.1 typedef 1.1.1 四种常见用法 定义一种类型的别名,不只是简单的宏替换.可用作同时声明指针型的多个对象 typedef char* PCHAR; PCHAR pa, pb; // 同时声明两个char类型的指针pa和pb c
奇异值分解(SVD)原理与在降维中的应用
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是很多机器学习算法的基石.本文就对SVD的原理做一个总结,并讨论在在PCA降维算法中是如何运用运用SVD的. 1. 回顾特征值和特征向量 我们首先回顾下特征值和特征向量的定义如下:$$Ax=\lambda x$$ 其中A是一个$n \times n$的矩阵,$x$是一个$n$维向量,则我们说$\lam
node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该文件,会报错 4.运行test2.js 二.模块简单使用 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Node环境中,一个.js文件就称之为一个模块(module). 模块化的开发的好处:提高代码的可维护性,避免修
线性判别分析LDA原理总结
在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结.LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理. 在学习LDA之前,有必要将其自然语言处理领域的LDA区别开来,在自然语言处理领域, LDA是隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),
[原] KVM 虚拟化原理探究(1)— overview
KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层有一些清晰直观的认识,当然我没有通读KVM的源码,文中的内容一部分来自于书籍和资料,一部分来自于实践,还有一些来自于自己的理解,肯定会有一些理解的偏差,欢迎讨论并指正.本系列文章敬代表我个人观点和实践,不代表公司层面. KVM虚拟化简介 KVM 全称 kernel-based virtual mac
H5单页面手势滑屏切换原理
H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 假设有5个页面,每个页面占屏幕100%宽,则创建一个DIV容器viewport,将其宽度(width) 设置为500%,然后将5个页面装入容器中,并让这5个页面平分整个容器,最后将容器的默认位置设置为0,overflow设置为hidden,这样屏幕就默认显示第一个页面. <div id="v
.NET Core中间件的注册和管道的构建(1)---- 注册和构建原理
.NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理.路由等.所以搞明白中间件是如何注册并最终构建成管道的很重要.园子里很多先驱早已经开始了这方面的研究学习,也写了很多文章,不过我看了后有些地方还不是特别明白.毕竟每个人都是不同的,有些内容作者觉得是常识不需要多写的地方对我来说可能就是个盲区.幸好.NET Core整个项目都是开源的,找到源码看了下解
python自动化测试(2)-自动化基本技术原理
python自动化测试(2) 自动化基本技术原理 1 概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领可不是容易的事情,必须要有扎实的计算机理论基础,才能看到深层次的本质东西. 2 应用软件逻辑结构 数据库应用系统 可能是最典型的网络应用程序了,关于它的软件架构如下: 一般在逻辑上分为4层: 用户界面层 UI 为终端用户提供交互的人机界面 业务逻辑层 BLL 将数据库抽象出来的对象进行拼接成具体
CRC、反码求和校验 原理分析
3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算是完整了...写博客也算是又一次废了... 一边赶项目,一边看TCP/IP相关的书,本科学的网络知识一直都是一知半解,现在终于有机会深入研究一下了. TCP/IP主要就是各种协议,各种接口.校验这个概念,一直都不陌生.之前在客户端用的最多的校验是MD5.CRC校验,在逻辑层网络协议,客户端文件等用的
菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中需要用户实现的部分只有三个,那就是struts.xml,Action,Template(JSP),如下图: 2.3.31中的org.apache.struts2.dispatcher.ActionContextCleanUp已经被标记为@Deprecated Since Struts 2.1.3,2
Objective-C中block的底层原理
先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的局部变量,mutArray指针 保存到栈上,那么当执行完captureObject方法后,出去了作用域mutArray变量就会被系统自动释放. 所以当执行captureBlk([[NSObject alloc] init]); 的时候,mutArray为nil,每次打印的为0. 当然上面说的是错的.
主成分分析(PCA)原理总结
主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就是PCA,下面我们就对PCA的原理做一个总结. 1. PCA的思想 PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据.具体的,假如我们的数据集是n维的,共有m个数据$(x^{(1)},x^{(2)},...,x^{(m)})$.我们希望将这m个数据的维度从n维降到n'维
谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂.在处理实际的聚类问题时,个人认为谱聚类是应该首先考虑的几种算法之一.下面我们就对谱聚类的算法原理做一个总结. 1. 谱聚类概述 谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用.它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来.距离较远的两个点之间的边权重值较
vue双向数据绑定原理探究(附demo)
昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与UI层的同步,数据再两者之间的任一者发生变化时都会同步更新到另一者. 双向绑定的一些方法 目前,前端实现数据双向数据绑定的方法大致有以下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定.所有绑定起来的JavaScript对象以及DOM元
[原] KVM 虚拟化原理探究 —— 目录
KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CPU 虚拟化 KVM 虚拟化原理探究(4)- 内存虚拟化 KVM 虚拟化原理探究(5)- 网络IO虚拟化 KVM 虚拟化原理探究(6)- 块设备IO虚拟化
[原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样非常重要的.同网络IO虚拟化类似,块设备IO也有全虚拟化和virtio的虚拟化方式(virtio-blk).现代块设备的工作模式都是基于DMA的方式,所以全虚拟化的方式和网络设备的方式接近,同样的virtio-blk的虚拟化方式和virtio-net的设计方式也是一样,只是在virtio backe
[原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输入计算输出这个步骤.传统的IO包括了网络设备IO,块设备IO,字符设备IO等等,在KVM虚拟化原理探究里面,我们最主要介绍网络设备IO和块设备IO,其实他们的原理都很像,但是在虚拟化层又分化开了,这也是为什么网络设备IO虚拟化和块设备IO虚拟化要分开讲的原因.这一章介绍一下网络设备IO虚拟化,下一章
[原] KVM 虚拟化原理探究(4)— 内存虚拟化
KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Guest最终使用的还是宿主机的内存,所以内存虚拟化其实就是关于如何做Guest到宿主机物理内存之间的各种地址转换,如何转换会让转换效率更高呢,KVM经历了三代的内存虚拟化技术,大大加快了内存的访问速率. 传统的地址转换 在保护模式下,普通的应用进程使用的都是自己的虚拟地址空间,一个64位的机器上的每一
[原] KVM 虚拟化原理探究(3)— CPU 虚拟化
KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要像以前想象的那样,需要用软件来模拟硬件指令集了.虚拟机的指令集直接运行在宿主机物理CPU上,当虚拟机中的指令设计到IO操作或者一些特殊指令的时候,控制权转让给了宿主机(这里其实是转让给了vm monitor,下面检查VMM),也就是一个demo进程,他在宿主机上的表现形式也就是一个用户级进程. 用一
热门专题
jq val()赋值失败
01背包求方案数hdu
unity 2d 适配
Spring Boot实现阿里云SMS短信发送功能
一品楼 ypl 南京
动态需要改Nginx修改Nginx.config
knockoutjs 定时
sharepoint 换网络后很慢
charles抓包ios模拟器
查看进程mongdb内存
docker consul集群
flv.js 重新加载
SevenZip解压rar
es 删除和关闭索引的区别
catatlina.out文件太大
Lab CVI xml转string
LPC17xx片上EEPROM编程
python 读取 tecplot类型的数据
webstorm导入git项目
python 方法裏的參數,加等於和不加等於