计算机编程语言知识汇总
2022-10-19 17:07:08 0 举报
AI智能生成
计算机编程语言知识汇总
作者其他创作
大纲/内容
TODO
熟悉C++
熟悉多线程
熟悉操作系统
智能指针
C++
Moving from Java to C++
和java比较着学习
常见问题
2、 C++内存分配方式有哪些
简述extern"C"的作用
5、 面对对象的三个基本特征,并简单叙述之
类成员函数的重载、覆盖的区别
overload就是函数用不同的参数
override就是用虚函数实现多态
请简要叙述struct和class的区别
struct默认是public的
class默认是private
struct没有类的方法,可以模仿class
10、请列出STL中常用的容器
11、什么是虚函数、纯虚函数,并举例
12、多重继承与虚函数表的实现原理又是什么
线程间如何进行数据交换并确保数据安全
数据库设计原则
C++中虚函数工作原理是
模板
vector中resize() 和 reserve() 函数的区别
面向对象
三大基本特征
封装
继承
多态
五大基本原则
单一职责原则
开放封闭原则
里氏替换原则
依赖倒置原则
接口隔离原则
关系数据库的特点
基础知识
C++基础
函数
inline函数
编译时会替换函数,而不是压栈跳转
限制
不能有复杂的结构控制switch, while
不能是递归函数
函数重载
C++ 函数传参
形参
指针
引用
定义数组
字符串类string
原来的c只有字符数组
#include <string>
命名空间
using namespace std告诉编译器后面的函数都是std名下的
#include<iostream>
using namespace std
引用和指针的区别
共同点
都可以避免拷贝副本
都可以修改变量
不同点
Safer
References cannot be NULL,必须初始化
A reference must be initialized when declared
Easier
References don’t need dereferencing operator to access the value.
不用像指针加*用数据
引用
引用变量是所引变量的别名,地址相同
引用与指针的区别
引用必须在定义时就要初始化
引用作为函数参数,传参不会产生临时变量
关键字
auto关键字
类型推导
const限定符
必须初始化
const修饰普通类型的变量
const 修饰指针变量
const在*号左边,则被指物为常量
const在*号右边,则指针为常量
const在*号两边,则指针和被指物为常量
const参数传递和函数返回值
A:值传递的 const 修饰传递,一般这种情况不需要 const 修饰,因为函数会自动产生临时变量复制实参值。
B:当 const 参数为指针时,可以防止指针被意外篡改。
C:自定义类型的参数传递,需要临时对象复制参数,对于临时对象的构造,需要调用构造函数,比较浪费时间,因此我们采取 const 外加引用传递的方法。
列出关键字static的作用
隐藏
static变量存放在静态存储区
保持变量内容的持久
只会初始化一次
可以初始化变量为0
在c语言中
A static variable inside a function keeps its value between invocations.
多次调用一个函数但保存同一个变量值
A static global variable or a function is "seen" only in the file it's declared in
Static functions are not visible outside of the C file they are defined in.
在c++中
在 C++ 中,需要一个数据对象为整个类而非某个对象服务
1、被 static 修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要 new 出一个类来<br>2、被 static 修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要 new 出一个类来
内存管理
深copy vs 浅copy
忘掉这两个概念,好好理解什么是指针,什么是内存,内存怎么分布。
浅拷贝是只拷贝指针地址
子主题
深拷贝是先申请一块跟被拷贝数据一样大的内存空间,把数据复制过去
子主题
malloc和new的区别
new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。
new是c++的保留字,malloc是c的库函数stdlib
子主题
动态内存
分配初级数据类型
数组
对象
delete
delete
delete[]
删除数组
删除对象时,默认调析构函数
不能删的东西
指针指向栈区内容
内存管理发展
从malloc/free到new/delete
从new/delete 到内存配置器(allocator)
面向对象
封装
类Class
this指针
应该用->
对象构造与析构
构造函数
并且不会返回任何类型
析构函数
对象死的时候自动调用
主要完成内存释放和对象销毁
在前面加了个波浪号(~)作为前缀
拷贝构造函数
默认拷贝构造是浅拷贝
注意
类最后要加分号
静态成员
使用 static 关键字
静态成员在类的所有对象中是共享的
创建对象
栈中分配,不用释放
分支主题
堆中分配,需要释放
子主题
继承
抽象类&接口
多态
重载
一个函数处理多种类型变量、不同个数的变量
运算符重载
关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。
用虚函数来实现
虚函数virtual
用来在继承的时候,使用多态,调用父类却能使用子类的方法、
析构函数继承时也应该是virtual
在java里面很简单
C++中的虚函数的作用主要是实现了多态的机制
c++是怎么找到要调用的实际的函数的
用虚函数表
dynamic/late binding 运行时才绑定
标准模板库STL
迭代器
其实就是指定类型的指针
容器
string
构造方法
遍历
直接索引
用at
用迭代器
拼接
直接用+
成员函数append
查找替换
find
replace
可以直接遍历进行替换
大小写转换
可以直接遍历加减32
注意事项
在std下面
string::npos可以表示string的结束位子
与java不同是可更改的
vector
初始化
遍历
[]
at
front第一个元素
back最后一个元素
插入删除
push_back加到最后
pop_back把最后一个pop出来
insert插入指定位置
erase删除指定位置
clear删除所有的元素
头文件vector
vector is the type of sequence that should be used by default.
vector or list
频繁插入不适合用vector
vector用的是连续的空间
list用的不连续的
resize vs reserve
resize直接改变size,改变数组大小
reserve改变capacity,不直接改变size
stack
头文件stack
top
pop
不返回值
push
size
empty
容器的通用方法
索引
[]比at快
流
算法
常见容器的时间复杂度
采用红黑树实现
插入: O(logN)<br><br>查看:O(logN)<br><br>删除:O(logN)
map, set, multimap, and multiset
采用哈希表实现
unordered_map,unordered_set,unordered_multimap, and unordered_multiset
hash_map, hash_set, hash_multimap, and hash_multiset
插入:O(1),最坏情况O(N)。<br><br>查看:O(1),最坏情况O(N)。<br><br>删除:O(1),最坏情况O(N)。
进阶
模板
类似于Java的泛型
用于处理不同类型的数据
各种数据类型相加的实例
多线程
智能指针
自动析构,不用delete,自动释放申请的空间
c++11之后才有的
方法
reset
get
unique_ptr
你就想象unique_ptr是一个壳子,把一个raw ptr包裹在里面
shared_ptr
可以有多个shared_ptr实例指向同一块动态分配的内存,当最后一个shared_ptr离开作用域时,才会释放这块内存
weak_ptr
weak_ptr不能直接指向内存空间,只能指向shared_ptr:
处理类型
类型别名
typedef
using
auto关键字
类型推断
decltype
只推断类型,不用计算表达式
各种后缀.cc .hpp
都没有关系,根据自己喜好来使用,对编译器来说都一样
好的资料
书籍推荐
常用函数
测时间
数字转化字符串
C语言
基本知识
struct对齐
union取最大内存
指针
指针本身是一个变量,存着一个地址
address of pointer
指向指针的指针
auto pp = std::addressof(p);
函数指针
野指针
指向已删除的对象
内存
堆区heap
动态申请的变量(即new,malloc函数申请的变量)存放在堆区
栈区
局部变量存在在栈区
函数调用用的栈帧,寄存器的保存恢复也都是在栈帧上实现的
静态区
全局变量和静态变量存放在静态区
在静态数据区,内存中所有的字节默认值都是0x00
代码区
内存相关函数
alloca
向栈申请内存,因此无需释放
malloc
malloc分配的内存是位于堆中的, 未初始化(用memset),要释放
calloc
和malloc一样,但是初始化为0
free
怎么知道要free多大的空间?
malloc的时候保存了大小
怎么free的?
只是把这一块地址标记为available
free之后原来的指针的地址不变,最好把它置空
怎么free 指向指针的指针
函数
1、main里面的argc怎么读进来的
读取参数可以理解
读取的参数的个数是怎么来的
特殊情况,编译器处理的
写出C/C++标准库中strcpy、memcpy函数定义的原型,两个函数返回值有什么意义,两个函数有什么区别
nested function
问题
怎么结束所有循环
只能用goto或者exit
break只能结束当前循环
3、 #include<file.h>与#include“file.h”的区别
搜索顺序不同,尖括号搜索系统目录;引号先搜索当前目录,再搜索系统目录。
请说出const与#define相比有什么优点
C语言中怎么在main函数开始前执行函数
在gcc中,可以使用attribute关键字
2、头文件怎么能只包含一次
char* p vs char p[]
char *s = "Hello world"; 字符串是只读的,不可更改
char s[] = "Hello world"; 字符串可以更改
常用工具
调试gdb
gdb ./a.out
加断点
run
查看内存泄露valgrind
用于c++时会有一个内存释放不了
gproc
常见错误
segment fault
写只读区域,如改变char *s
常用代码块
minishell
计时
读取行
解析行
fork exec wait
比较少用的语言
Julia
速度快,适合科学计算
Julia可以调用Python的所有东西
汇编
MIPS
类似于C,比C更底层,操纵寄存器,控制函数栈帧
python
常用函数
yield
一个带有 yield 的函数就是一个 generator,还可以继续执行
* 的用法
乘法
倍数
*parameter是用来接受任意多个参数并将其放在一个元组中。
Python 显示数字的千分位
常见问题
整数除法得到商,需要加上*1.0
编码问题
SyntaxError: Non-ASCII character ‘\xe9’ in file 异常
Python 字符串前面加u,r,b的含义
加r
去掉反斜杠的转移机制。
加u
后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面
加b
b" "前缀表示:后面字符串是bytes 类型。
python3和python2的不同
找不到模块找不到模块
拷贝的代码,重新创建__init__.py文件
python中的super( test, self).__init__()
对继承自父类的属性进行初始化
ModuleNotFoundError: No module named '_pydevd_bundle_ext'
没法debug,重命名一下文件
浅/深copy
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。
copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
copy.deepcopy 深拷贝 拷贝对象及其子对象<br>
缩进问题
排序是按照多个指标
格式化输出
"%d %.2f" % (1, 1.2)
"{:d} {:.2f}".format(1, 1.2)
排序
sorted
降序reverse=True
返回索引
直接排序,用key返回索引
增加一列index,然后排序
使用enumerate
lambda表达式
匿名函数
需要一个函数,但是又不想费神去命名一个函数
list
反转
reverse
a[::-1]
统计
count
删除
pop(index)
切片
list[<start>:<stop>:<step>]
常用模块
opencv
cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 0, 255), 4)
numpy
numpy中增加维度reshape, 或者np.newaxis
类型转换
a.astype(np.int16)
转置
.T
.transpose()
矩阵乘法.dot
按元素乘*
tqdm
Tqdm 是 Python 进度条库
argparse
初始化
parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
添加参数
parser.add_argument
parser.add_argument('x', type=int, help="the base")
parser.add_argument("-v", "--verbose", help="increase output verbosity",<br> action="store_true")
解析参数
args = parser.parse_args()
网站应用
flask
Flask是一个轻量级的Web应用框架
服务器部署
dominate
生成静态网页
读写文件
xml
import xml.etree.ElementTree as ET
tree = ET.parse(xml_file)
root = tree.getroot()
json
struct
读写二进制文件
系统函数
os
listdir查看文件夹下所有的文件
shutil
copyfile
movefile
collections
OrderedDict
其他
pip
与pip3的区别
注释写法
写法2
在命令行调试:加上-m参数。 python -m pdb hello.py
clear 删除所有断点
轮子
Iou
gamma矫正
好玩的程序
100行的俄罗斯方块
java
StringBuffer
用途
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。String不能直接修改
与StringBuilder不同
StringBuilder 的方法不是线程安全的(不能同步访问)
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
使用方法
初始化
StringBuffer sBuffer = new StringBuffer("菜鸟教程官网:");
append
可以追加string或者char
toString()
转成string类型
StringBuilder类与string类的区别
多线程
网络编程
collection
Queue<String> queue = new LinkedList<String>();
add
offer
poll
Stack<Integer> st = new Stack<Integer>();
ArraryList
new ArrayList<Integer>(stack)
Map<String, String> map = new HashMap<String, String>();
初始化
map.put("key1", "value1");
map.get("key1")
map.remove("key1");
遍历
增强for循环遍历
使用keySet()遍历
迭代器遍历
使用keySet()遍历
判断key是否在
boolean flag=map.containsKey("opt")
遍历搜索
set
HashSet
HashSet hs = new HashSet();<br>
add
contains
常用函数块
字符串转字符数组
常见问题
static关键字
static变量
静态变量被所有的对象所共享,在内存中只有一个副本
static方法
方便在没有创建对象的情况下来进行调用(方法/变量)。
字符转数字
不能直接转要先转成string
HashMap集合是允许存放null值的
ArrayList vs LinkedList vs Vector
保留小数点后几位
String.format("%.2f", f)
怎么排序
差别
list
Collections.sort
Collections.reverse
数组
Maven的核心功能便是合理叙述项目间的依赖关系
JDK,JRE,JVM的关系<br>
JDK:JAVA开发工具包<br>
JRE:JAVA运行环境<br>
JVM:JAVA虚拟机<br>
JDI thread evaluations' has encountered a problem
在Eclipse debug是watch了消失的变量
处理复杂输入
基础语法
left >= right? left + 1: right + 1;
48个关键字
abstract - boolean - break - byte - case - catch - char - class - continue - default - do - double - else - extends - false - final - finally - float -for - if - implements -import - instanceof -int - interface - long - native - new<br>-null - package - private - protected - public -return - short - static - super - switch -synchronized - this - throw -<br>throws - transient - try - true - void - volatile - while
数据类型
基本的数据类型和c用法一样
为了把基本数据类型变成类
装箱Boxing
拆箱Unboxing
基本数据类型<br>
数值型<br>
整型<br>
byte(1字节8位)
short(2字节16位)
int(4字节32位)
long(8字节64位)
浮点型<br>
float(4字节32位浮点数)后面+f<br>
double(8字节64位浮点数)<br>
double不能进行特别精确的小数相加减,如果出现这样的问题,我们可以用乘法将他变成int类型操作<br>
字符型<br>
char(<span style="font-family: 'Wawati SC';">2字节16位Unicode字符</span>)
布尔型<br>
boolean(1字节8位)<br>
true
false
默认值
引用数据类型<br>
类,数组,接口<br>
String字符串<br>
String
substring
beginIndex -- 起始索引(包括), 索引从 0 开始。<br>endIndex -- 结束索引(不包括)。
enum枚举类型<br>
随机数<br>
Math.random()
例子:int a = (int)(Math.random()*10)<br>
获得0-9随机数<br>
例子:int a = (int)(Math.random()*37)<br>
获得0-36随机数<br>
例子:int a = (int)(Math.random()*37+1)<br>
获得1-37随机数<br>
Scanner对象<br>
使用Scanner的步骤:<br>import java.util.Scanner;//导入Scanner类<br>Scanner input = new Scanner(System.in);//创建Scanner对象<br>int a = input.nextInt();<br>double b = input.nextDouble();<br>String c = input.next();<br>
数组
数组初始化
输出一个数组<br>
例子:<br>int[] intArray = { 1, 2, 3, 4, 5 }; <br>String intArrayString = Arrays.toString(intArray);
例子:<br>String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");
多维数组<br>
二维数组<br>
int[][] scores = new int[3][3];<br>
数组
正向排序
Arrays.sort()
数组逆向排序<br>
ArrayUtils.reverse(intArray);逆向排序<br>
例子:<br>int[] intArray = { 1, 2, 3, 4, 5 }; <br>ArrayUtils.reverse(intArray); <br>System.out.println(Arrays.toString(intArray));
基础知识
编码
Ascii码只有英文
unicode支持全世界的语言
UTF-8,是对Unicode编码的压缩和优化
GBK支持中英文
编程原则
高内聚
低耦合
前端
基本上就是javascript做一些网页后台<br>
写干净的代码
Use clear variable and function names
Write short functions that only do one thing
Classes can be no longer than 100 lines of code
Methods and functions can be no longer than 5 lines of code
Pass no more than 4 parameters into a method
Encapsulation + Modularization
命名
命名规范<br>
只能使用数字,字母,下划线,美元符号<br>
数字不可以作为开头<br>
命名不可以是关键字<br>
区分大小写,没有长度限制<br>
命名方法<br>
大驼峰命名法:HelloWorld<br>
小驼峰命名法:helloWorld<br>
匈牙利命名法:hello_world<br>
基础
计算机系统基础
汇编MIPS
linux基本知识
OpenCV环境
交叉编译
Android
hisi
正则表达式
设计模式
Singleton 单例模式
创建class,然后实例化
Abstract Factory,抽象工厂
Factory Method,工厂方法
用一个工厂类,可以生产特定的类
子主题
Builder,建造模式
Prototype,原型模式
Iterator,迭代器模式
就是怎么设计类
好的资料
内存管理相关
0 条评论
下一页