面试书籍笔记

面试的书籍主要是参考《王道程序员求职宝典》这本书来复习的,这本书列出了很多零散的知识点,还是蛮值得一看的。

标准库提供的字符串处理函数:
1. strlen(s)
2. strcmp(s1,s2)
3. strcat(s1,s2)
4. strcpy(s1,s2)
5. strncat(s1,s2,n)
6. strncpy(s1,s2,n)

传递给这些标准库例程的指针必须具有非零值,并且指向以NULL结束的字符数组,其中的一些标准库函数会修改传递给它的字符串。这些函数将假定它们所修改的字符串具有足够大的空间接收本函数新生成的字符,程序员必须确保目标字符串必须足够大。

void * memcpy(void * desc,const void * str,size_t n)  

从源src指向的目标地址的起始位置开始拷贝n个字节到目标desc所指向的内存地址的起始位置中,函数返回指向desc的指针。

strcpymemcpy的区别:
1. 复制的内容不同,strcpy只能用于复制字符串,memcpy可以复制任意内容。
2. 复制的方法不同,strcpy不需要指定长度,它遇到被复制字符的串结束符’\0’才结束,memcpy根据第3个参数来决定。
3. 用途不同,复制字符串时用strcpy,复制其他类型时用memcpy。

void * memset(void * s,int ch,size_t n)  

将s中前n个字节用ch替换并返回s。

字符串转换为整数需要考虑的三个问题:
1. +-号问题
2. 字符是否有效的问题
3. 整数是否溢出的问题

在一个字符串中找到第一个只出现一次的字符
1. 使用一个hash表(记录下每个字符出现的次数)
2. 两次遍历

判断一个字符串中所有字符是否相同

  1. hash表
  2. 为了节省空间,可以使用bitmap
  3. 作位运算(异或)

自定义str 的函数时需要特别注意三点:

  • 断言asssert,判断输入指针是否为NULL
  • 返回值(char*),为了支持链式调用
  • const修饰(输入参数要加,输出参数不能加)

char数组移除字符就是要将整个数组移动,使用两个指针。

printf函数数据类型大小大于占位符时会出现问题如:
printf(“%d”,long long)
“%d”只会寻址四个字节,但是long long 类型的数据会有8个字节入栈。
printf打印long long时需要特别注意。


enum 枚举类型名  
{
    枚举常量1[=整型常量] ,    
    枚举常量2,  
    ...  
}[变量名列表];  

花括号内的内容成为枚举表,其中的每一项称为枚举变量。

sizeof是单目运算符,它的计算发生在编译时刻。
sizeof可以对一个函数调用求值,其结果是函数返回类型的大小,函数不会被调用,注意是函数调用,不是函数。

C99标准规定,函数,不能确定类型的表达式以及位域成员不能被计算sizeof值。

#pragma pack(n)

枚举只是定义了一个常量集合,里面没有元素。枚举类型是当做int类型存储,故而枚举类型的sizeof为4。

sizeof求字符数组时千万不要忘记最后的’\0’。

异或运算符有一个性质:两个相同的数异或结果为0,0与任意数异或的结果为该数。

异或和按位或的应用
1. 交换两个数
2. 不用算术运算符实现加法
3. 求平均值

移位运算符优先级比算术运算符低,所以要特别注意加上括号。

在C++中,有符号数与无符号数转换时,内存中的内容并没有改变。只是对内容中相同的数据解释不通而已。

  • 整型提升
    bool,char,unsigned char,signed char,short,signed short都会提示为int。
  • 运算时的转换
    int(signed int)->unsigned int->long->unsigned long->float->double->long double

newdelete是C++中的运算符:
1. 首先调用operator new的标准库函数
2. 调用构造函数

mallocnew的异同点:
相同点:
都可以用于申请动态内存和释放内存。

不同点:
1. malloc与free是C/C++语言的标准库函数,new/delete是C++中的运算符。
2. new自动计算需要分配的空间,而malloc需要手工计算字节数。
3. new是类型安全的,malloc不是。
4. new调用operator new 分配足够的空间,并调用相关对象的构造函数,而malloc不能调用构造函数。
5. malloc/free需要库文件支持,new/delete则不需要。

局部变量和全局变量重名时会覆盖掉全局变量,若要使用全局变量需要使用::或extern。

使用malloc需要注意3点:
1. 强制类型转换
2. 非空判断
3. free释放掉内存

inline说明对于编译器来说只是一个建议,编译器可以选择忽略。

在C++程序中调用被C编译器编译后的函数,需要加上extern “C”,C++运营是一种面向对象的编程语言,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,比如加上函数的返回值类型等信息。而在C语言中只是简单的函数名字而已,不会加入其它信息。也就是说,C和C++语言对产生的函数的名字的处理是不一样的。这样在链接阶段若是按照C++的函数命名规则去查找C编译器编译的函数,就会出现链接错误。

没有默认构造函数的类类型成员,以及const类型的成员变量引用类型的成员变量,都必须在构造函数初始化列表中进行初始化。

有一种特别常见的情况需要类定义自己的复制控制成员:类具有指针成员。

成员函数的隐藏
1. 两个函数参数相同,但基类函数不是虚函数。
2. 两个函数参数不同,无论基类函数是否是虚函数。

定义类型转换函数,需要注意一下几点:
1. 转换函数必须是成员函数,不能是友元函数。
2. 转换函数不能指向返回类型,但是再函数体内必须用return语句以传值方式返回一个目标类型的变量。
3. 转换函数不能有参数。

基于引用计数的垃圾回收机制:
基于跟踪处理的垃圾回收机制:
- 标记-清除
- 标记-整理
- 标记-拷贝

reinterpret_cast:显示强制转换,用()实现。
const_cast:转换表达式的const性质。
static_cast:编译器隐式执行的任何类型转换都可由static_cast显示完成,仅当类型之间可由隐式转换时(除类层次之间的下行转换以外),static_cast的转换才是合法的。
dynamic_cast:必须是指针,类的引用或者void *,dynamic_cast设计运行时类型检查,dynamic_\cast主要用于类层次间的上行和下行转换。

海量数据处理,top k问题的通用解决方法:
1. 分治 –>使用hash进行映射
2. 堆排序
3. 快排中的分割思想
4. 位图bitmap

必须要root权限才能打开的端口为小于1024的端口。

应用不支持一般意义的赋值运算,因此没有引用类型的容器。

容易元素类型必须满足以下两个约束:
1. 元素类型必须支持赋值运算
2. 元素类型对象必须可以复制

源代码删除是删除死代码,死代码是指永远不会被执行到的代码。

单例模式
1. 静态成员变量(指针)
2. 静态局部变量 返回引用,注意拷贝,赋值要为private。
3. 静态局部变量,返回指针
4. 考虑线程安全,异常安全,使用双重锁,静态成员变量(指针)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值