c++ learning
迟到了三年的学习笔记。。
野指针:造了一个指针,不是NULL或者没有指向正经内存。比如刚造出来又不赋值,并不知道它指向了哪里
内存泄漏:造了一个指针,给他分配了空间,xxxxx,又分配了一块空间,指针目标转移,之前的空间没有被释放,叫做内存泄漏
数据库的四个事务隔离级别:
1 读未提交:A在进行一套事务,干到一半B过来读了一下,读到了A做得操作,但是A其实还没有commit | 写时不同时写
2 读提交: A在进行一套事务,B也是,A对C进行查询,B对C进行操作,Bcommit, A对C进行查询,不一样 | 写时不同时读写
3 可重复读:A在进行一套事务,干到一半B过来读了两下,第一次是空,第二次是有,这并非脏读,解决脏读的办法是对数据加锁,这样人读到的是一个快照型数据,但是这个锁无法锁住不存在的行,即无法防备insert | 写时不同时读写, 读时只允许读
4 序列化:A在进行一套事务,干到一半B过来读了一下,被delay到A事务结束 | 所有事务串行化
CAP定理:对于一个分布式系统,一致性 可用性 分区容错性只能达到2/3
1 一致性 AB分处不同节点,A写入,B和A在同一时间的数据是一样的
2 可用性 A虽然炸了,还有B可以返回正确的结果,集群没坏
3 分区容错性 虽然网炸了,AB不能通信,但是集群还很ok
2/3 : 因为分布式,所以网很容易炸,所以3是必备的,如果需要一致性,写A的时候也要写B,那么写A的时候就要同时给AB加锁,这个时候B就没法写了,就没有了可用性
一个权宜的办法是不要求强一致性,而是最终一致性,即最终AB的数据是得到一致的。
prepare statement:mysql的一种sql语句预处理的手法,可以大致理解为提前编写好sql的框架,在参数的位置留下空缺,之后将这个sql框架拿出来填入参数。
好处在于比较清晰,不至于每次都需要裸写一个sql出来,缺点在于难以实现指定过滤的功能,sql已经写死了,如果要一个新的功能,只能再写一个preStmt。 一个容易感觉到的优点,它比裸sql快。
ORM:对象关系映射,在面向对象思想下,将数据库进行对象实例化(不太能描述这个感觉),之前程序访问数据库是进行写sql语句或者拼sql语句来执行,使用ORM可以将数据库中的元祖具象化成为一个对象。
使用ORM的好处在于其可以解决很多裸sql或者prepare_statement的问题,如http://wiki.jikexueyuan.com/project/hibernate/orm-overview.html所言。
不过似乎使用ORM的人还是少数,比较明显的缺点在于在小范围的使用中,ORM太大了些,而且慢了点。
引用和指针:指针是一个变量,可以指向别的地址,而引用不可变,是一个固定的地址,当它被造出来之后,就绑定上了一个地方。
指针的Free:造一个地址,造一个指针,指针指地址,指针也是变量,他也有地址,但是他的值是他指向的地址,free指针则释放的是指针指向的地址,指针的地址没有办法手动释放,只能等待它的生命周期结束
new/delete & malloc/free:后者是c中有的,前者是c++的,前者依赖后者,new中首先会执行malloc,然后在malloc申请的地址上做一个对象,malloc申请的地址和new一个属于堆,一个属于栈。
函数传值中引用和指针的区别:
1 形参 只是传进去了一个值,函数只接受到了值而非地址,从地址上可以看出来不同 | 我们甚至不知道变量的地址,无法更改
2 指针 通过传入一个保存变量地址的参数传入了变量的地址,函数对这个指针的改动“可以”直接作用到地址上去,而指针本身有地址,我们可以改动指针指向的那块地址。 | 我们知道了变量的地址
3 引用 传入了变量的地址,结果就是函数内变量和外边的那个没有区别,地址是一样的。 | 我们在函数内也能直接看到这个变量了
构造函数: 当构造函数没有参数的时候 是不需要在实例后面加括号的 | 我经历了什么?
share_ptr: 如果两个指针同时指向一个地址,那么delete其中的一个会使另一个变野,更难的是,我们还不知道是否还有“另一个”,delete则非法内存,不delete则内存泄漏
使用share_ptr,内部有一个累加值,每多一个它的副本 x++,delele时会查看x,x为0则释放资源,不为0则仅仅x--,需要注意的是,若果ab同时为c的share_ptr而ab无关,则没有这种联系,需要是a为c的ptr而b为a的复制(通过set赋值)
然而这种情况也不能完全避免指针野化,a以share_ptr指向b而b析构掉了,这种是资源自己释放了,仍然会有问题,不过share_ptr并非为此而生
类:py&go中,类较轻量级,而在c++中,类所应用的方面很广,合理使用类,规划其中的权限等级很重要
友元:一个类的私有变量和方法不开放对外访问,只能通过public方法传出变量和使用public方法绑定方法,子类直接使用父类定义的私有方法或变量时需要在父类中声明友元类为子类名,其他类也可以通过这种方法调用
虚函数:基类中声明,可以写和调用,子类对其重写,可以写和调用,子类不重写,可以调用
纯虚函数:基类中声明,不写不调用,子类重写,可以写和调用,若子类继承基类,则必须重写所有纯虚函数
c++ learning的更多相关文章
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- Deep learning:五十一(CNN的反向求导及练习)
前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文 ...
- Programming Learning - Based on Project
Today when taking a bath I got a good idea that it is an efficient and interesting way to learn a ne ...
- 做中学(Learning by Doing)之背单词-扇贝网推荐
做中学(Learning by Doing)之背单词-扇贝网推荐 看完杨贵福老师(博客,知乎专栏,豆瓣)的「继续背单词,8个月过去了」,我就有写这篇文章的冲动了,杨老师说: 有时候我会感觉非常后悔,如 ...
- 【原】Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令
<Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...
- 【原】Learning Spark (Python版) 学习笔记(四)----Spark Sreaming与MLlib机器学习
本来这篇是准备5.15更的,但是上周一直在忙签证和工作的事,没时间就推迟了,现在终于有时间来写写Learning Spark最后一部分内容了. 第10-11 章主要讲的是Spark Streaming ...
- 【机器学习Machine Learning】资料大全
昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...
随机推荐
- 将list集合,元素随机打乱
for循环+随机数 实现相同位置的元素交换 public <T> void shuffle(List<T> list) { int size = list.size(); Ra ...
- delphi ---break,exit,continue等跳出操作的区别
1.break 强制退出最近的一层循环(注意:只能放在循环里:而且是只能跳出最近的一层循环),用于从for.while.repeat语句中强制退出 2.continue 用于从for.while.re ...
- window.onbeforeunload 埋点 页面停留时间
window.onbeforeunload - Web API 接口 | MDN https://developer.mozilla.org/zh-CN/docs/Web/API/Window/onb ...
- Qt 打印机支持模块
Qt 打印支持 Qt为打印提供广泛的跨平台支持.使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机,并通过网络打印到远程打印机.Qt的打印系统还支持PDF文件生成,为基本的报告生成设施奠定了 ...
- java配置文件properties,yml,一般文件
JAVA编写配置文件的几种方式: JAVA配置文件,一般都放在resource目录下,无论是下面提到的properties.yml还是普通的txt等文件. 在打成jar包之后,只需要jar包程序就可运 ...
- c#与lua交互里,错误处理
如果是c#代码出错了 [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _g_get_down(RealStatePtr ...
- BZOJ2648: SJY摆棋子&&2716: [Violet 3]天使玩偶
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...
- mysql模糊查询实践总结
%代表任意多个字符 _代表一个字符 在 MySQL中,SQL的模式缺省是忽略大小写的 正则模式使用REGEXP和NOT REGEXP操作符. “.”匹配任何单个的字符.一个字符类 “[...]”匹配在 ...
- JPA 对象关系映射之关联关系映射策略
关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 回页首 单向 OneToOne 单向一 ...
- php 获取各类时间归类
//php获取今日开始时间戳和结束时间戳 $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0,0,0 ...