大家好,我是辣条。
目录
一、C/C++入门阶段
学习视频推荐:C++入门基础【B站 小甲鱼】
二、C/C++开发进阶
学习视频推荐:C++进阶【慕课网 免费课】
三、C++开发高级
视频教程:程序设计【中国大学MOOC 】
四、 *** 作系统
教程链接:6.828 : *** 作系统工程
五、数据库
视频教程:MySQL数据库从入门到实战课【CSDN 课程】
六、计算机网络
教程链接:计算机网络试题【牛客网】
最近在某乎上看到这个问题,他的问题如下:
985末流计算机大一,一直跟着学校走,上学期学c语言,下学期学面向对象,感觉学完之后只会写点简单的数学题或者简单的管理系统什么的。甚至都不知道什么是配置环境。但是身边的同学很多都可以写页面丰富的 游戏 或者网站了,甚至还有做项目的。是我太菜了吗?想自学还没有方向,什么web前端、github我都不知道是什么,前端后端什么的也不清楚,请问怎么样才能自学提升自己的编程能力?
好家伙,看到这个问题竟不知道怎么回答,我也不是科班的, 怎么提升我也不知道,怎么给你整理一些学习内容给你,多看多练多做。
刚入门的时候我们主要是学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方法,这对以后的程序员之路非常重要!
所以学习语言更为重要:
面向对象编程思想;类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、 *** 作符重载; C++编译器对象管理模型分析;类对象的动态管理(new/delete);友元函数和友元类;运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);类的继承、多继承及其二义性、虚继承;多态(概念、意义、原理剖析、多态案例);虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);函数模板、类模板,模板的继承。
C++类型转换;C++输入输出流(标准I/O 文件I/O 字符流I/O);C++异常处理(异常机制、异常类型、异常变量、异常层次结构、标准异常库);利用一些IDE开发工具:诸如Windows平台VC系列:VC++6.0(比较古老) ;Visual Studio2013, Visual Studio2015,Visual Studio2017,Visual Studio2019;Mac平台的XCode系列,还有CodeBlock,另附一些高级编辑器Notepad++, EditPlus,UE等一些开发工具的常用设置和一些常见快捷键的使用。
这个阶段推荐以下两本书:
《Essential C++》 这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。
《C++ Primer》 本书对C++基本概念、技术、以及现代C++编程风格进行了全面而且权威的阐述,是C++初学者的最佳指南;本书可以帮助你编写实用的程序,而无需首先精通每个语言细节。对于中高级程序员,本书也是不可或缺的参考书。
在第二阶段学习的时候,就是比较重要的了,C++开发的进阶之路,更是一个让自己找份薪水比较体面的工作的筹码。
C++进阶之STL:
STL = Standard Template Library,即标准模板库。这是提高开发效率的极品工具。通过学习此阶段,应掌握泛型编程技巧,理解容器类在C++语言中的应用模式,以及熟练掌握全部STL类的使用方法。
C++进阶之设计模式:
决定一个项目成败最重要的因素是项目总体的设计,通过本阶段的学习,可掌握面向对象编程中重要的一环,是编码前建模的技巧所在。单例模式;工厂模式;代理模式;迭代模式等,这些都是你要掌握的哦。
C++进阶之数据结构基础:
这是所有编程语言中最应该学习的部分,程序组成的基础之一。顺序存储、链式存储、循环链表;
双向链表、栈(顺序和链式)、队列(顺序和链式);
栈的应用、树基本概念及遍历、二叉树;
排序算法、并归算法、选择、插入、快速、希尔。
这个阶段推荐以下几本书:
《Effective C++》和《More effective C++》 作者是Scott Meyers。你应该熟读它们,并清楚地理解每个项目。该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。
《Exceptional C++(C++编程剖析)》和《More exceptional C++》 这两本书中都包含了40个C++编程问题,这些问题会让你磨练自己的技能,最终成为优秀的C++程序员。这些问题是Herb Sutter精心挑选,与ISO/ANSI C++官方标准相一致,帮助程序员在设计、架构和编码过程中保持良好的风格,从而使编写的C++软件更健壮、更高效。
《Inside the C++ object model(深度 探索 C++对象模型)》 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承,帮助你理解程序的底层实现,以便写出更高效的代码。
《The design and evolution of C++(C++语言的设计与演化)》 本书作者也是C++语言的设计者Bjarne Stroustrup,作者在书中综合性地介绍了C++的发展 历史 ,C++中各种重要机制的本质意义和设计背景,这些机制的基本用途和使用方法,讨论了C++所适合的应用领域及其未来的发展前景,既没有忽略关键性的详情,又没有过多地陷入技术细节。
这个阶段几乎伴随了职场后续的整个生涯,只有更精没有最精,C++高手之路,任重道远!
这个阶段需要掌握的一些C++技能:
C++进阶之QT开发:
掌握QT类库构架,图形界面开发模型;掌握QT开发技巧,消息机制,图形处理;掌握QT网络编程,UDP,TCP使用方式;掌握QT文件处理方式,序列化;掌握QT在windows,linux,ios,android不同平台下的移植技术
C++进阶之Windows/Linux网络服务器:
掌握Unix/Linux平台开发方式;熟练使用系统调用;熟练Unix/Linux内存管理,进程,线程调度;掌握MFC界面开发,网络编程;熟悉网络服务器开发方式,熟练编写TCP,UCP网络服务程序;掌握同步/异步IO模型在网络编程中的使用方式。
C++进阶之数据库开发:
掌握SQL语言的实用技巧。Oracle,MySQL数据库的使用方式。
如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,这个时候C++基本就没有太多能难到你的东西了!
国外有很多优秀的 *** 作系统公开课,比如mit6.828、哈弗OS/161。这类课程都会给你提供一个mini os壳程序,相当于一个核心组件,剩下的你可以自由发挥。比如你可以设计线程管理、文件系统等等。相比只是看 *** 作系统的书籍,这种学习方法的效率简直高100倍!
国内说数据库就是mysql,这点要相信我!
首先概览下mysql的知识体系:
基础:
调优:
核心原理:
架构与运维:
推荐两本书:
1.《MySQL必知必会》 这本书讲的非常全,从基本概念,到查询到插入新建表,用户的管理,都有具体的例子,非常适合没有任何基础的同学来学习Mysql,总之这本书学习的方法就是:1、十分钟了解下数据库的基本概念 2、找到练手的数据库 3、对照着上面的内容去敲。本书里也有大量的内容是讲sql的,可以结合w3c的sql教程一起,有取舍地看。
2.《数据库系统概念》这本书是dba必看的。
看完这些并且实践+思考之后,可以算入门了。
接下来对于希望深入学习的童鞋:
我推荐几本书(很多大神都这么推荐),《高性能MySQL(第3版)》、 《MySQL技术内幕(第4版)》,《MySQL技术内幕 InnoDB存储引擎》,《深入理解MySQL》还有Mysql的官网。读完这些东西,再加些丰富的经验,理论上来讲就具备DBA的水平了。
网络知识工作后非常非常重要!
我分三个阶段来介绍:
1. 入门
第一本书 建议看谢希仁的《计算机网络基础》
2.进阶
然后第二本要看 《TCP/IP详解1:协议》,这个阶段需要多思考和动手网络在LINUX系统上发挥的最淋漓尽致,所以在学习的时候最好学习LINUX配合使用,学习LINUX,推荐《鸟哥的LINUX私房菜:基础篇》。
学习网络过程中,要不断抓包分析等,自己能写些简单的应用来发包更是完美。抓包工具推荐:LINUX环境下用TCPDUMP,windows环境下用 wireshark。这个阶段写习完后,已经是个小高手了。。
主要技能应该是 : 对TCP,IP,DNS,icmp等协议应该都蛮熟了得了,dhcp/tftp/ftp等协议也应该都懂些,重点是要学会如何分析一个协议及LINUX系统的基本 *** 作也差不多了。
3.高手阶段
这个阶段需要有一点的编程能力,指C/C++编程。主要学习的方向是协议的实现和协议的架构原理
协议的实现方面, 主要学习底层协议(指传输层及以下)的实现, 这些协议都是在 *** 作系统层面实现的,最好的教材是《TCP/IP详解:实现》。至于网络架构这块,可以学习《计算机网络》这本书。
贴一下互联网头部大厂2020年校招相关岗位的薪资待遇:
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品,是最流行的关系型数据库管理系统之一。
端口是3306。
表很多时,使用linux脚本,需要根据需要修改一下:
和创建一样,可以加上 if exists
可两篇文章:
如:
用于在已有的表中添加、删除或修改列。
添加 ADD
或
默认是添加到最后,但可以指定位置。FIRST :添加最前
AFTER 字段名> :添加指定字段之后
例子:
删除 DROP
修改 MODIFY 主要修改原列的类型或约束条件 同样可以用 FIRST 和 AFTER 字段名> ,代表的是修改到哪里。
修改字段名 CHANGE
可以把表2的数据复制到表1中,但 不能复制约束性条件 。
单行
多行,注意 只有一个VALUES :
不写 (行1, 行2...) 这一部分的话,默认一一对应
除了以上方法外,还可以用SET为每一行附上相应的值。
假如没有筛选的话,就给全部都修改了。可以用 WHERE 筛选。
假如 没有筛选的话,就给全部删除了 。相当于清空。
清空
先把表删除,然后再建一个。与 DELETE FROM 相比, TRUNCATE 的效率更快,因为 DELETE FROM 是把记录逐条删除的。
查询执行的顺序
FROM -->WHERE -->SELECT -->GROUP BY -->HAVING -->ORDER BY -->LIMIT
注意
当数据很大,上百万的时候,使用LIMIT ... OFFSET ..的方式进行分页十分浪费资源且耗时长。最好是结合WHERE使用,如:
REGEXP 使用正则表达进行匹配。 查询时,需要搭配WHERE或HAVING使用 。
两个表之间有交集且要用到两个表的数据时,可以使用内连接查询。
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
用法:
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。 把LEFT JOIN的表1、表2调换顺序,就是REGHT JOIN 。
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行. 相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
但 MySQL中不支持 FULL OUTER JOIN 。
即SELECT嵌套。
IN 一个查询结果作为另一个查询的条件。 如:
EXISTS 用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。True时执行。 如:
索引的本质是一种排好序的数据结构。利用索引可以提高查询速度。
常见的索引有:
MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件:
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联 *** 作。
对已有的两个表增加外键 比如:主表为A,子表为B,外键为aid,外键约束名字为a_fk_b
为子表添加一个字段,当做外键
为子表添加外键约束条件
假如删除记录报错: [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...)
这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。可以通过设置 FOREIGN_KEY_CHECKS 变量来避免这种情况。 第一步:禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0 第二步:删除数据 第三步:启动外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=1 查看当前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS
使用 UNION 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果一般为 M+N 行。
每个查询必须包含相同的列、表达式和聚集函数。
默认会去除相同行,如果需要 保留 相同行,使用 UNION ALL 。
只能包含一个 ORDER BY 子句,并且必须位于语句的最后 。
内置函数很多, 见: MySQL 函数
我们一般使用 START TRANSACTION 或 BEGIN 开启事务, COMMIT 提交事务中的命令, SAVEPOINT : 相当于设置一个还原点, ROLLBACK TO : 回滚到某个还原点下
一般的使用格式如下:
开启事务时, 默认加锁
根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。
根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。
除此之外,我们可以显示加锁
加锁时, 如果没有索引,会锁表,如果加了索引,就会锁行
InnoDB默认支持行锁,获取锁是分步的,并不是一次性获取所有的锁,因此在锁竞争的时候就会出现死锁的情况
解决方法:
即ACID特性:
由于并发事务会引发上面这些问题, 我们可以设置事务的隔离级别解决上面的问题.
MySQL的默认隔离级别(可重复读)
查看当前会话隔离级别
方式1
方式2
设置隔离级别
主从集群的示意图如下:
主要涉及三个线程: binlog 线程、 I/O 线程和 SQL 线程。
同步流程:
由于MySQL主从集群只会从主节点同步到从节点, 不会反过来同步, 所以需要读写分离
读写分离需要在业务层面实现 , 写数据只能在主节点上完成, 而读数据可以在主节点或从节点上完成
索引是帮助MySQL高效获取数据的排好序的数据结构
MySQL的索引有
推荐两个在线工具:
简单来说, B树是在红黑树(一个平衡二叉树)的基础上将一个节点存放多个值, 实现的, 降低了树的高度, 每个节点都存放索引及对应数据指针, 同一层的节点是递增的
而B+树在B树的基础上进行优化, 非叶子节点存放 子节点的开始的索引, 叶子节点存放索引和数据的指针, 且叶子节点之间有双向的指针
如下示意图:
不同的引擎, 主键索引存放的数据也不一样, 比如常见的 MyISAM 和 InnoDB
MyISAM 的B+树叶子节点存放表数据的指针, InnoDB 的B+树叶子节点存放处主键外的数据
其他的:
即多个列组成一个索引, 语法:
由于联合索引的B+树的结构, 根据列建立, 所以我们的查找条件也要根据索引列的顺序( where column1=x, column2=y,columnN... ), 否则会全表扫描
如果你对列进行了 (+,-,*,/,!) , 那么都将不会走索引。
OR 引起的索引失效
OR 导致索引是在特定情况下的,并不是所有的 OR 都是使索引失效,如果OR连接的是 同 一个字段,那么索引 不会失效 , 反之索引失效 。
这个我相信大家都明白,模糊搜索如果你前缀也进行模糊搜索,那么不会走索引。
这两种用法,也将使索引失效。另 IN 会走索引,但是当IN的取值范围较大时会导致索引失效,走全表扫描, 见: MySQL中使用IN会不会走索引
不走索引。
走索引。
所以设计表的时候, 建议不可为空, 而是将默认值设置为 "" ( NOT NULL DEFAULT "" )
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)