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 ...
随机推荐
- xmpp muc 群聊协议 1
翻译来自 :http://wiki.jabbercn.org/index.php?title=XEP-0045&variant=zh-cn#.E6.9C.AF.E8.AF.AD 通用术语 Af ...
- [LintCode] 有效回文串
class Solution { public: /** * @param s A string * @return Whether the string is a valid palindrome ...
- .then()
reference: http://www.html-js.com/article/Study-JavaScript-jQuery-Deferred-and-promise-every-day 1.5 ...
- Hessian接口测试
- delphi----Tstringlist,将有符号的数据变成数组"aaa,bbb,ccc"---->list[0]=aaa,list[1]=bbb
//TStringList 常用方法与属性: var List: TStringList; i: Integer; begin List := TStringList.Create; ...
- Oracle是如何工作的?实例是如何响应用户请求?一条SQL的执行过程~
Oracle 是如何工作的? Select id,name from t order by id ; – SQL 解析(查看语法是否错误,如果没有错误,分析语意,执行此语句的权限) – 执行计划(OR ...
- JS toLowerCase()方法 toUpperCase()方法
toLowerCase()方法: 定义:toLowerCase() 方法用于把字符串转换为小写. 语法:var str = "String"; str .toLowerCase() ...
- MySQL日期时间字段
mysql支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: DATETIME DATETIME 用于表示 年月日 时分秒,是 DATE和 ...
- JDK源代码学习系列05----LinkedList
JDK源代码学习系列05----LinkedList 1.LinkedList简单介绍 LinkedList是基于双向 ...
- python 各种魔法方法
目录 自定义序列 反射