C的万能指针
可以return 所有类型的指针
C语言编译过程
预处理阶段-------编译阶段-------汇编阶段--------链接阶段
预处理阶段:根据#开头,修改源.c程序,生成另一个.i作为扩展名的文件
编译阶段:将.i翻译成.s,包含一个汇编语言程序
汇编阶段:将.s翻译成一个机器语言指令,结果保存在.o文件中。.o是一个二进制的文件
链接阶段:负责得到一个可执行文件。
索引的优化
-
Like的前导模糊查询不能使用索引
-
Union、in、or都能命中索引,推荐使用in
-
负向条件查询不能使用索引,比如!=,<,>,not in, not exists, not like
-
建立联合索引的时候,区分度最高的字段在最左边
-
存在非等号和等号混合判断条件时,把等号条件的列前置
-
不要在索引上做计算
-
Is null, is not null 无法使用索引
-
单表的索引最好在5个以内
-
在经常用作过滤的字段上建立索引
-
Group by、order by字段上建立索引
-
不同值较少的字段不必要建立索引
-
在经常存取的列上建立复合索引
-
索引数目最多不要超过5个
-
复合索引中使用频率最高的放在前面
深拷贝浅拷贝
浅拷贝只是增加了一个指针指向已经存在的内存地址(如果原地址改变了,指针指向的对象也要改变)
深拷贝增加了一个指针并且申请了新的内存,使这个增加的指针指向这个新的内存
Const永远不能改变吗
Const限制一个变量不能被改变,产生静态作用,可以提高可靠性。
const关键字代表常量。它是一个变量限定符,用于修改变量的性质,使其变为只读状态。这意味着该变量,就像任何相同类型的其他变量一样使用,但不能改变其值。如果尝试为一个const变量赋值,编译时将会报错。
数据库中drop和delete和truncate的区别?
-
Delete是每次删除表中的一行,将该行的删除操作作为事务记录在日志中方便进行回滚
-
Truncate是一次性删除所有的数据,不把单独的删除操作记录在日志中,删除时不能回复的。执行速度快
-
Truncate表后,表和索引所占的空间会恢复到初始的大小
-
Delete不会减少表和索引所占的空间
-
Drop会将表所占的空间全部释放掉
-
Truncate只能对表,delete可以对视图和表
-
Truncate和delete只删除数据,drop删除整个表
-
Truncate和drop不能回滚,delete可以回滚
-
不再需要表,用drop
-
仍要保留表,删除所有记录用truncate
-
删除部分记录用delete
-
(truncate和delete只删除数据,不删除表的结构,drop删除表的结构和数据)
-
速度drop>truncate>delete
-
Delete不会自动提交,drop和truncate会自动提交
Delte和drop的区别
不再需要表,用drop,删除部分记录用delete
速度:drop>delete
Delete不会自动提交,drop可以自动提交
Drop会将表的空间全部释放掉,delete不会减少表和索引所占的空间
Delete可以回滚,drop不能回滚
数据库如何创建索引?
Create index indexname on mytable.
Drop index on mytable.
Show index.
了解操作系统么?
linux系统的操作有用过么?ll命令什么意思?
Ll是ls -l的别名,
列出文件的详细信息
Ls -a 列出目录下的所有文件
一个软件登录页面,点登录,超过5s没有响应?你如何设计测试用例?
软件测试设计测试用例遵循什么原则法则?
F12响应传参,
原则:
-
单个用例覆盖最小化原则
-
测试用例替代产品文档功能原则
-
单次投入成本和多次投入成本原则
-
测试结果分析和调试最简单化原则
-
每个测试需求至少有一个测试用例与之对应
-
每个测试用例包含的测试步骤尽量不超过10个
-
测试用例设计是应包含边界情况、等价类等方法
-
流程尽量实现每个路径的覆盖
-
测试用例应当根据测试范围进行评审检查,覆盖全部范围
-
公用性比较强的用例应当单独列出来,以便日后继续利用
-
注意命名规范
F12判断前后端问题
可以根据响应的值判断一些bug所在
(1)响应中没有数据,则是后端数据没有返回,前端展示为空,则为后端问题。例如:列表中新增一个数据,没有显示,通过请求中可以看到数据total为0,则是后端数据没有返回。
(2)响应中有数据,但是前端显示错误了,可以根据字段值判断是否前端显示中取错了字段显示,可以判断是前端问题。例如:前端显示内容错误了,把登录用户名显示了登录帐号,则可以在响应中看数据是否返回正确,返回正确而显示错误,则有可能是前端绑定字段错误。
(3)响应中有数据,但是跟自己操作的结果不一致,可以根据数据库查询,如果数据库中也没有记录,可能是代码有问题,没有记录你的操作。例如:注册了一个帐号,但是登录时提示帐号或密码错误,这就可以在数据库表中查看是否有注册的数据。
链接数据库一般要设置哪些东西
Db.properties
jdbc.username=root
jdbc.password=root
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/databasename
数据库常用端口(不会)
Mysql 3306
Sqlserver 1433
Oracle 1521
讲一讲事务的特性
- 原子性:事务的所有操作要么全部完成要么全部不完成,不会停滞在中间的某个环节。如果发生错误会回滚到事务开始前的状态
- 一致性:事务开始前后数据库完整性没有受到破坏
- 隔离性:事务执行过程中不应该受到其他事务的干扰,同一时间只有一个请求用于同一数据
- 持久性:事务完成之后,事务对数据库所做的更改就持久的保存在数据库中,不会被回滚
给你一个表怎么改某个人的地址
Update 表名 set 字段名=‘新内容’ where+条件
Update ‘runoob_tbl’ set ‘submission_date’=’2016-05-06’ where ‘runoob_id’=3;
常用哪些类型的索引
Fulltext hash btree rbtree
Fulltext
全文索引, 只有char varchar text 列上可以建立全文索引。解决针对文本的模糊查询效率较低的问题
Hash
类似于键值对的形式,适合最为索引。只在=和in条件下高效
Btree
将索引值按照一定的算法存入树形数据结构中。默认和最常用的索引类型
Rtree
范围查找
索引种类
普通索引
唯一索引(列值唯一,可以有null)
主键索引(列值唯一,不可以有null,表中只有一个)
组合索引(专门用于组合搜索)
全文索引(对文本的内容进行分词,搜索)
<直接创建索引>
– 创建普通索引
CREATE INDEX index_name ON table_name(col_name);
– 创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name(col_name);
– 创建普通组合索引
CREATE INDEX index_name ON table_name(col_name_1,col_name_2);
– 创建唯一组合索引
CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);
<通过修改表结构创建索引>
ALTER TABLE table_name ADD INDEX index_name(col_name);
五、索引机制
1.为什么我们添加完索引后查询速度为变快?
传统的查询方法,是按照表的顺序遍历的,不论查询几条数据,mysql需要将表的数据从头到尾遍历一遍
在我们添加完索引之后,mysql一般通过BTREE算法生成一个索引文件,在查询数据库时,找到索引文件进行遍历(折半查找大幅查询效率),找到相应的键从而获取数据
2.索引的代价
2.1创建索引是为产生索引文件的,占用磁盘空间
2.2索引文件是一个二叉树类型的文件,可想而知我们的dml操作同样也会对索引文件进行修改,所以性能会下降
3.在哪些column上使用索引?
3.1较频繁的作为查询条件字段应该创建索引
3.2唯一性太差的字段不适合创建索引,尽管频繁作为查询条件,例如gender性别字段
3.3更新非常频繁的字段不适合作为索引
3.4不会出现在where子句中的字段不该创建索引
Sizeof
是C/C++的一个操作符,返回一个对象或者类型所占内存的字节数
Malloc
动态内存分配,申请一块连续的内存大小的区域,用void*类型返回分配的内存区域的地址。是一个指针型的函数,返回的指针指向该分配域开头的位置
Strcpy
C语言的标准库函数,返回值为char*。 把含有\0的字符串复制到另一个地址空间
链表排序
void ListSort_2(Node **head)
92 {
93 Node *p = NULL;
94 Node *q = NULL;
95 Node *t = NULL;
96
97 if(*head == NULL || (*head)->next == NULL)
98 {
99 return;
100 }
101
102 for(p = *head; p != NULL; p = p->next)
103 {
104 for(q = *head; q->next != NULL; q = q->next)
105 {
106 if(q->data > q->next->data)
107 {
108 swap(q->data, q->next->data);
109 }
110 }
111
112 }
113 }
冒泡排序直接交换数据
三次握手
栈队列优缺点
New和malloc的区别
- New是在自由存储区为对象分配内存,malloc是在堆上动态分配内存
- New分配成功时返回的是对象的指针,malloc返回的是void*,还需要强制转化
- New分配内存失败时会抛出异常,malloc失败时返回null
- New无需指定内存块的大小,malloc需要显式指定内存的尺寸
- New和delete可以重载,malloc和free不能重载
- New是调用构造函数,malloc不调用
索引说一下
SQL性能低下怎么解决
cpp的list和vector
.面向对象三大特性
5.讲一下虚函数,静态函数
6.内存分配,堆区栈区
还问了linux指令
C++中有哪些数据结构
数据库中count(1) count(*) count(列名)的区别
数据库中行锁
11.数据库查找某一行末尾为0的数据
12.遇到bug怎么调试?
为什么这么多银行选择来浦发/你的职业规划/最近浦发上一款新产品你知道吗/对互联网有热情吗
增查删改等SQL命令
原子性的实际应用场景
常用的排序算法以及口述快排的实现思路
- 用到事务了吗?事务的特性;
- Linux命令,用过vi吗;
- 怎么删除一行,怎么在行末尾写东西;
- 基本数据类型;
1.输入一个数字,输出以这个数字为长度的回文数,比如输入6,输出123321,输入7,输出1234321;
2.只有1,3,5,7构成的奇数,输入一个数,代表位数,输出对应的奇数个数,比如输入1,输出4,因为{1,3,5,7};
3.输入一个字符串,按ASCII码倒排
从客户角度出发谈谈随着5G时代到来,区块链、云计算、大数据、人工智能这些技术在银行的应用
用过什么数据库、数据库的左连接的思想及其实现语句、线程的状态、什么是平衡二叉树、什么是红黑树、常用的排序算法,说一下快排
对浦发的了解
优缺点