互联网、研究所、银行、国企干货满满的应招攻略!
我可以从下面几个方面来阐述:
首先呢,我在本科(研究生)期间修的是XXX学位,对于当下的金融科技领域(按需更改,以银行为例)我相信我可以胜任该领域从事的技术活动;
然后,通过了解发现(面试前做一些这个银行的功课,说出它的一些业务)在这些业务上面拥有很大的优势,具有良好的发展前景;除此之外,对于我而言,我对(说自己的项目中契合的东西)有一定了解,可以从银行中XXX的工作,前面实习的时候(对口的实习内容)实习经验,也可以协助相关技术部门完成XXX的工作内容。(若有)研究生阶段主要从事XXX的研究,将来如果有需要,也能参与一些(自己对应领域)的工作譬如像XXX的任务;(职业规划)当然前期的时候,还是会以学习为主,积累工作经验,把基础打牢,经过一两年时间的沉淀慢慢成长为可以在自己专业方面独当一面的人,能够独自承担责任,发现问题,解决问题;我希望在公司长期工作,最后成长为在工作中能有创新与发展,能够为公司带来更大的价值的人。
最后,就是我自身的原因,我家就在XX,离家比较近,所以我选择了在XX工作(或者说学校在这里,喜欢这里的环境,朋友也多之类的话,就是表明一些你想来这发展又不会轻易离职的决心就好)。因此,如果我能加入XX银行,当然我自己也很希望加入XX银行大家庭,我能很快适应这份工作,投入到工作中,充分发挥自己的专业和特长。
drop:完全清空表,包括表的定义、数据和触发器,但它不会删除为表设置的权限(因为其是DDL语句会隐事提交事物)
truncate:清空表中的数据。
delete:逐行删除数据。
普通索引(没有任何限制,仅加速查询);可为空
唯一索引(索引列的值必须唯一);可为空
主键索引(特殊的唯一索引,一个表只能有一个主键);不能为空
联合索引(mysql从左到右使用索引中的字段,一个查询可以只使用索引中的一部分,但只能是最左侧部分)
聚集索引的叶子节点存放有对应的数据节点,可以直接获取到对应的数据。
一个表中可以拥有多个非聚集索引,叶子节点存放的不是实际数据,而是指向实际数据的指针。
b树是一种平衡二叉树,b+树在b树的基础上在每层索引关键字在下一层都有保留,仅在叶子节点存储数据。
为什么使用B树而不是二叉树:考虑到磁盘I/O的影响,数据库索引是存储在磁盘上的,在结构上面看使用b树索引查找速度更快,b+树在每层根节点开辟存储的索引更多,每个索引下还有许多索引,子节点的第一个数表示的是上层节点的第一个索引。
b数与b+树区别:仅在叶子节点存储数据。每层索引关键字在下一层都有保留。b+树中间节点不保存数据。b+树必须查找到叶子节点。
b+树的优点:大大增加了范围查询的性能;根据局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。
InnoDB(是mysql默认的事务型存储引擎)、
MEMORY(将数据全部放在内存中,访问速度较快)、
ARCHIVE(适合存储大量独立,作为历史记录的数据)、
MYISAM(数据以紧密格式存储)
1. InnoDB 支持事务,MyISAM 不支持事务。
2. InnoDB 支持外键,而 MyISAM 不支持。
3. InnoDB 是聚集索引,MyISAM 是非聚集索引。
4. InnoDB 不保存表的具体行数。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。
1、选取适用的字段属性(SQL语句优化);2、建立索引;3、使用外建,优化锁定表;4、锁定表、优化事务处理。实在不行再考虑从优化器参数、架构、表设计等进行优化。
1、脏读:A事务读取到了B事务未提交的内容,而B事务后面进行了回滚;
2、不可重复读:当设置A事务只能读取B事务已经提交的部分,会造成A事务內的两次查询,结果竟然不一样,因为在此期间B事务进行了提交操作;
3、幻读:A事务读取了一个范围的内容而同时B事务在此期间插入了一条数据造成“幻觉”。
面向过程是面向解决问题的步骤进行编程;面向对象是分析参与问题的实体,通过调用这些实体的属性和方法解决问题
面向对象特性:封装、继承、多态
常见的线性结构:线性表、栈、队列、双队列、数组、串
常见的非线性结构:二维数组、多维数组、广义表、树(二叉树)、图、堆
指针数组和数组指针的区别:
指针数组里面装着指针,其实还是一个数组,定义形式为int *a[10];
数组指针是指一个指向数组的指针,其实还是一个指针,只不过是指向数组而已,定义形式为int (*p)[10]。
虚函数:是为了实现多态,目的是为了在父类指针指向不同子类对象时,调用虚函数,调用的是对应子类对象的成员函数,即可以自动识别具体子类对象。
c++父子类继承时的隐藏、覆盖和重载:
1、隐藏:隐藏发生的主要原因是当子类有父类的同名成员,子类对象优先考虑子类域自身成员。
就是说子类对象访问某成员,变量成员和变量函数都一样时,编译器先在子类域中检索,如果在子类域中找到该成员,则检索结束,返回该成员进行访问。如果在子类域中找不到该成员,则去父类域中检索。如果父类域中存在,则返回成员进行访问,如果父类中不存在,则编译错误,该成员不存在。
当父子类域都存在同一成员时,编译器优先在子类中检索,就算父类域中也存在该同名成员,也不会被检索到,因此,父类域中的该成员被子类域中的该同名成员隐藏,如果要访问父类域中的该成员,只能通过调用的方式,即:ch.Father::m_m
2、覆盖:覆盖只发生有虚函数的情况下,且父子类成员函数类型必须一模一样,即参数和返回类型都必须一致。子类对象调用时,会直接调用子类域中的成员函数,父类域中的该同名成员就像不存在一样,即父类该成员被子类成员覆盖。
3、重载:相同域的同名不同参函数。(在父子类情况下,不考虑)
C++编译过程:
1、编辑(hello.c)2、预处理(把引用的文件展开,并生成hello.i的预处理文件)
3、编译(把预处理编译成汇编语言文件)4、汇编(执行汇编语言文件)
5、链接(把汇编语言文件链接组织起来成为可以执行的文件)
最快的排序算法:快排,但不稳定(实际上是Timsort最快)
排序算法:
———— 排序方法 ———— 时间复杂度 ————空间复杂度 ———— 稳定程度————
———— 归并排序 ———— O(n log n) ———— O(n) ———— 稳定 ————
———— 冒泡排序 ———— O(n的平方) ———— O(1) ———— 稳定 ————
———— 选择排序 ———— O(n的平方) ———— O(1) ———— 不稳定 ————
———— 插入排序 ———— O(n的平方) ———— O(1) ———— 稳定 ————
———— 希尔排序 ———— O(n log n) ———— O(1) ———— 不稳定 ————
———— 快速排序 ———— O(n log n) ———— O(log n) ———— 不稳定 ————
———— 堆排序 ———— O(n log n) ———— O(1) ———— 不稳定 ————
查找文件的命令:cat、ls、find
cd切换到根目录;
ls目录查看;
mkdir[]:创建目录;rm:删除当前目录下的文件;mv:重命名目录
Find:搜索目录
touch:新建文件
vi/vim:打开并编辑文件,输入i,a,o进入编辑模式;
Wq:保存并退出
cat(看最后一屏)/more(百分比显示)/less(翻页查看)/tail(指定行数或者动态查看):文件查看
Pwd:查看当前目录路径
查看网卡信息:ifconfig
查看当前系统端口:netstat -an
清屏:ctrl+l
查看内存:cat/proc/meminfo
查看cpu:cat/proc/cpuinfo
Top命令:可以实时显示系统中各个进程的资源占用状况
OSI七层模型:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
1、物理层是为数据链路层提供物理连接,以透明的传送比特流;
2、在物理层的基础上,传输以帧为单位的数据;
3、网络层是通过执行路由选择算法,为报文分组通过通信子网选择最适当的路径;
4、传输层是向用户提供可靠的端到端服务,透明的传送报文;
5、会话层是组织两个回话用户之间的对话,并管理数据交换;
6、表示层用于处理通信系统间信息交换的表示方式;
7、应用层不仅要提供远程所需要的信息交换和远程操作,并且还要作为应用进程的用户代理,完成一些信息交换的功能。
TCP三次握手:
第一次握手是客户端给服务器发送字段请求SYN;
第二次握手是服务器返回客户端的字段SYN+ACK,同时字段表示确认收到客户端的(请求字段);
第三次握手是客户端给服务器响应一个字段ACK来表示确认收到服务器的字段(SYN)。
终止一个连接四次挥手:
第一次挥手:客户端发送一个FIN报文
第二次挥手:服务端收到FIN报文之后,会发送ACK报文,确认报文段
第三次挥手:如果服务器也想断开链接,则发送FIN报文,连接释放报文段
第四次挥手:客户端收到FIN之后,一样发送一个ACK报文作为应答。确认报文段。
get和post区别:
1、get是不安全的,post是对所有操作用户不可见的
2、get传送的数据量较小,post传输的数据量较大
3、get限制form表单数据集的值必须为ASCII字符,post支持整个字符集
4、get执行效率比post好。
http和https:
HTTP超文本传输协议,被用于在web浏览器和网站服务器之间传递信息
默认工作在TCP协议80端口
以明文方式发送,不提供任何方式的数据加密
HTTPS超文本传输安全协议,是一种透过计算机网络进行安全通信的传输协议,HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。提供网站服务器的身份认证,保护交换数据的隐私与完整性
默认工作在TCP协议443端口
HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:
1、TCP 三次同步握手
2、客户端验证服务器数字证书
3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
4、SSL 安全加密隧道协商完成
5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
HTTP 与 HTTPS 区别
1、HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
2、使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
3、HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
4、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
5、HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
http请求方法:
1、get:请求指定的页面信息
2、head:类似于get只不过返回的没有具体内容
3、post:进行处理请求
4、put:从客户端向服务器传送的数据取代指定的文档的内容
5、delete:请求服务器删除指定的页面
6、connect:代理服务器
7、options:允许客户端查看服务器的性能
8、trace:显示服务器收到的请求
状态码:
200-请求成功
301-资源被永久转移到其他url
404-请求的资源不存在
500-内部服务器错误
网页上搜索过程:
1. 在浏览器中输入一个网址,它的运行过程。
这个过程中发生了网络通信,即利用TCP/IP协议簇进行网络通信,发送端由应用层往下走,接收端由物理层往上走,步骤如下:
1、浏览器输入URL,其中是HTTP 协议。
2、应用层DNS解析,三次握手,获取域名对应的IP。
3、得到目标服务器的IP地址以及端口号(HTTP 80端口,HTTPS 443端口),会调用系统库函数Socket,请求一个TCP流套接字。客户端向服务器发送HTTP请求报文。
4、传输层TCP传输报文。
6、数据到达数据链路层,此时客户端发送请求结束。
7、服务器端经过数据链路层→网络层→传输层→应用层,解析请求报文,发送响应报文。
8、关闭连接,TCP四次挥手。
9、客户端解析HTTP 响应报文,浏览器开始显示HTML。
tcp和udp区别:
TCP:面向连接/可靠/基于字节流
UDP:无连接/不可靠/面向报文
1、TCP面向连接;UDP无连接
2、TCP可靠传输,使用流量控制和拥塞控制;UDP不可靠传输,不使用流量控制和拥塞控制
3、TCP只能是一对一通信;UDP支持一对一、一对多、多对一和多对多
4、TCP面向字节流;UDP面向报文
5、TCP首部最小20字节,最大60字节;UDP首部开销小,仅8字节
6、TCP适用于要求可靠传输的应用,例如文件传输;UDP适用于实时应用(IP电话、直播等)
TCP/IP协议集包括应用层,传输层,网络层,网络访问层。
测试开发等:
测试开发的流程:
1、需求分析;2、制定测试用例;3、评测测试用例;
4、执行用例;5、提交bug;6、回归测试(对修复的bug进行验证)
7、编写并提交测试报告
软件测试方法:
白盒测试
关注程序代码的具体细节,根据软件内部代码逻辑结构分析来进行测试。
测试用例设计方法:逻辑覆盖、循环覆盖、基本路径覆盖、判定覆盖
黑盒测试
不考虑代码具体实现,检测软件的各个功能能否实现,依靠软件说明书来判断测试用例,
关注具体的客户需求改进软件功能。
黑盒测试主要是为了发现:1.是否有不正确的或者遗漏的功能;2.输入是否能输出正确的结果;3.性能上是否满足要求
测试用例设计方法:边界值分析法、等价类划分、错误猜测法、因果图法、状态图法、测试大纲法、随机测试法、场景法
面向对象和面向过程的区别
面向对象是把构成问题的事务分解成各个对象,建立对象来描述某个事务在解决问题的步骤中的行为;
既然是团队开发了,那么就先把本地版本代码传到远程库,这样其他的开发人员就可以拉取最新的代码
1 | git push -u origin master |
测试:
性能测试;易用性测试;兼容性测试;安全性测试;UI界面测试
网页为例:
1、在搜素框搜索关键字,查看出来的结果是否正确;点击图标是否正确运行结果是否正确。
2、输入关键字下面关键字词条能否出现,时间能否正确显示。页面结构、链接是否工作正常。
3、兼容性测试:windows系统、Mac系统、iOS手机和安卓手机系统能否正常运行。
4、安全性测试:网站登录、密码保护、信息完整性等测试。
5、UI界面测试:界面颜色,图案,显示能否正常显示。
6、性能测试:网站运行速度。
自动化测试:
在大多数软件的开发模式中,软件发布之前要多次重复代码——测试——修复的过程。
如果要测试某项特性,也许需要不止一次执行测试,而是重复多次。还要检查确认在前面的测试中发现的软件缺陷修复没,同时又没有引入新的软件缺陷。重复执行测试的过程称为回归测试。
软件测试 工具和自动化可以在有限的时间内执行多次测试。
测试工具:
使用工具的类型取决于测试的软件类型,以及是进行黑盒测试还是白盒测试。
1、非入侵式工具和入侵式工具的区别:
1)非入侵式工具:如果工具仅用于监视和检查软件而不对其进行修改,就认为是非入侵式工具。
2)入侵式工具:如果工具以任何方式修改了程序代码或者控制了操作环境,就属于入侵式工具。
由于入侵的程度各有不同,测试员通常设法使用侵入性尽量小的工具,以减少工具影响测试结果的可能性。
2、查看器和监视器
查看器(viewer)或者监视器(monitor)测试工具能够看到正常情况下看不到的运行的细节。
1)如代码覆盖率分析器就是查看器的一个例子。
代码覆盖率分析器是如何提供一种方式来查看哪些代码行得以运行、什么函数正在运行、执行测试时所运行的代码分支的。大多数的代码覆盖率分析器是入侵式工具,因为它们需要编译并链接到原程序中才能获得所需信息。
2)通信分析器(communications analyzer)是另一种查看器的例子。
它只是监听线路,提取经过的数据,在另一台计算机上显示。利用该系统可以查看通信数据的正确性以及观察软件缺陷为什么会产生。
通过查看从线上提取的数据,就可以确定问题是出于创建数据的机器还是解释数据的机器。这种类型的系统对软件是非入侵式的。
在网络中,真正监视器被称为嗅探器(sniffer)。
3)大多数编译器所带的代码调试器也可以看做是查看器,看到一般用户看不到的数据的工具都可以归类为查看测试工具。
为什么投测试不投开发?
软件测试是为软件产品的质量把关的,目前大部分还是靠人工测试,所以软件测试有很大的发展空间和前景。软件测试并不比软件开发轻松,也不比软件开发简单,选择软件测试并不是觉得它更容易,而是我本身对这个行业更有兴趣,做测试也会更投入,软件测试贯穿于整个软件开发的生命周期,我也喜欢对个阶段的测试用例进行分析和设计,感觉比开发更有趣。所以选择测试而不是开发。