面试大吉顺利拿offer包
软件工程
软件工程
Linux
Linux查看内存使用情况:free命令、sar命令、top 命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
1.Linux常见命令
C++
一、一些概念
- C++(封装、多态、继承)与C、JAVA(jdk\jre\jvm)的区别
- new、malloc、free、delete的区别;delete[]、delete的区别
- 重载、重写、覆盖的区别
- 指针和引用的区别
- 引用作为函数参数以及返回值的好处、限制
- 什么是野指针?成因?如何避免?
- 虚函数是如何实现的;虚函数表怎样实现运行时候的多态
- 构造函数为什么不写成虚函数?析构函数必须写成虚函数的原因?
- 静态函数与虚函数的区别?什么是纯虚函数?
- 关键字static的作用(内存只拷贝一次)
- 变量的区别
- 内存泄漏(分类、如何判断?解决办法)、内存溢出的概念、段错误
- 声明和定义的区别
- C++文件编译和执行的四个阶段
- C++内存管理
- C语言函数调用的过程
- 深拷贝和浅拷贝的区别; 什么时候调用拷贝构造函数?
- C++的四种强制类型转换;为什么不用?
- 调试程序的方法?
- C++线程中几种锁机制
- 乐观锁与悲观锁
static全局变量只初始化一次,这样做的目的是为了防止在其他文件单元中引用。static局部变量和普通局部变量的区别在于static局部变量只被初始化一次,下一次的计算依据是上一次的结果值。
静态变量:程序启动时创建并初始化,程序结束时销毁释放。 普通变量:程序自定义创建及初始化,在函数退出时或对象析构时自定义销毁释放。
为别人不会同时修改数据。. 因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。. 悲观锁:悲观锁在操作数据时比较悲观,认为别人会同时修改数据。. 因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据。
二、语法
- #define与const、typedef的区别; const的作用、修饰、 定义常量的方式以及存储位置
- 结构体struct和共同体(联合)union的区别
- 类和结构体的区别
- #include<>与#Include“”的区别
- extern C的作用、volatile关键字的作用
- C++新特性
- C++中的基本数据类型
- C++访问权限、友元
- C++如何处理返回值
C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。
默认的继承访问权限、默认的数据访问控制权限
class这个关键字还可用于定义模板参数,就像typename。但是strcut不用与定义模板参数,
三、数据结构
排序算法的比较
stl库的包含内容?容器?算法?迭代器?
- 树:红黑树、AVL平衡二叉树的定义、特点
- map\multimap(哈希表和红黑树)的比较
- B+树与B树(所有节点存放键值对)的区别
- 哈夫曼编码的应用与原理
- epoll的实现:红黑树+双向链表
- map与unorder-map的底层实现、优缺点
- set与map原理
- set为什么可以自动去重(底层重写了equals和hashcode)
- 栈与堆的区别
- 两个栈怎么实现队列
- 栈溢出的概念和原因
- 小根堆、大根堆
- 数组与链表的区别
- vector与list的区别
- 哈希表的使用与实现
C++常见知识点
数据库
- 索引、优缺点、原理、数据结构以及各自优势、设计原则
- 索引类型(全文索引)以及对DB性能的影响
- 聚集索引与非聚集索引
- 数据库的事务、ACID特性
- 主键、外键、视图、触发器
- 左连接、右链接、等值连接、自然连接
- 删除语句 增删改查
- char与vchar的区别
- like % -
count sum- 最左前缀原则
- 数据库的三大范式
- 脏读、不可重复读、幻读
- 四种隔离状态
- mysql的锁:行锁、表锁、页锁、悲观锁、乐观锁
- 存储引擎MyISAM InooDB
- MVCC机制
- 数据库连接泄露
- 数据库的设计,如何进行SQL优化
- MYSQL、ORACLE的区别
- DBMS 支持哪几种数据模型?SQL 的四个组成部分是什么?
常用的是层次模型,网状模型和关系模型(最重要)
SQL的四个组成部分:
1、数据库模式定义语言DDL:create用来创建数据库中的各种对象——表、视图、索引、同义词、聚簇等
2、数据查询语言dql:基本结构是由SELECT子句,FROM子句和WHERE子句组成的查询块
3、数据操纵语言dml:插入INSERT、更新UPDATE和删除DELETE
4、数据控制语言dcl:用来授予或回收访问数据库的某种特权,并控制数据库操纵事物发生的时间和效果,对数据库实监控
乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。. 因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。. 悲观锁:悲观锁在操作数据时比较悲观,认为别人会同时修改数据。. 因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据。
redis
- redis的概念、特点、定时机制如何实现?单线程为什么高效?rehash如何实现?
- redis与mongodb的区别、memcached的区别
- 缓存技术
数据库整理
操作系统
管理硬件和软件的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
- 进程与线程的概念和区别(多核、多机)
- 进程的通信方式(共享存储)、调度策略(多级反馈队列调度)、同步机制
- 线程间通信与同步方式(事件)
- 虚拟内存的优劣
- 内存资源紧张的方法
- 缓冲区溢出?危害?原因?
- 死锁?产生条件?解决办法?
- 并发、并行、同步、异步、互斥、高并发( 高并发是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问或者socket端口集中性收到大量请求(例如:12306的抢票情况;)
- 线程、线程的几种状态
- 多线程同步锁机制
- 服务器接收多个客户端请求的方法
- 软链接、硬链接
- 用户态和内核态(程序调用、中断、异常、)
- windows的消息机制
- 分段和分页的区别
操作系统
计算机网络
- tcp三次握手,四次挥手,为什么不是两次、为什么是四次?客户端2ml响应为什么?
- tcp,udp区别
- http,https区别、http特点
- http长连接,短连接
- http请求响应过程
- TCP流量控制(滑动窗口),拥塞控制(慢开始,拥塞避免,快重传,快恢复)
- http协议包括哪些请求,get、post区别
- 网络分层结构:七层,四层,五层
- cookie和session区别
- ARP协议工作过程
- DNS解析过程
- 对称加密、非对称加密
- 邮件发送(smtp)、接收(pop3)的过程
计算机网络1
计算机网络2
B站10 道大厂面试必考的计算机网络问题
设计模式
- 单例模式的概念、线程、确保类只有一个实例的方法
Java
B站java汇总视频讲解
软件工程
- 软件开发的模型以及应用场景
- 软件开发的过程
- 软件测试的流程
- 测试报告里包含的内容
- 软件测试的策略、阶段(黑盒、白盒)、类型----》实例测试(杯子)
- 各测试环节的介绍、Alpha\Beta测试的不同
- 测试用例的元素、作用、如何设计
- 软件的缺陷、严重等级
- 白盒
- 测试的弊端—牛客网上
白盒测试法的覆盖标准有 逻辑覆盖 、循环覆盖和基本路径测试。. 其中逻辑覆盖包括 语句覆盖 、 判定覆盖 、 条件覆盖 、判定/条件覆盖、
条件组合覆盖 和 路径覆盖 。. 六种覆盖标准发现错误的能力呈由弱到强的变化: [1] 1.语句覆盖每条语句至少执行一次。. [1]
2.判定覆盖每个判定的每个分支至少执行一次。.
可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、软件交付、验收、维护。
一、 软件工程模型:
- 瀑布模型:将软件生存周期中各个活动规定为依线性顺序连接的若干阶段的模型,它是以文档为驱动,适合于软件需求很明确的软件项目的模型。
- 增量模型:它假设可以将需求分段为一系列增量产品,每一增量可以分别开发。该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”
- 快速原型模型:快速原型模型对于许多需求不够明确的项目,比较适合采用该模型。它采用了一种动态定义需求的方法,通过快速地建立个能够反映用户主要需求的软件原型,让用户在计算机上使用它,了解其概要,再根据反馈的结果进行修改,因此能够充分体现用户的参与和决策。
- 喷泉模型:喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。喷泉模型使开发过程具有迭代性和无间隙性。
二、
需求分析:是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言表达出来的过程,基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写需求规格说明书文档并最终得到用户的认可。
概要设计:⑴设计软件系统结构(系统有多少个模块,各模块之间的接口和个模块本身的功能)⑵进行数据结构及数据库的设计⑶编写概要设计的文档⑷评审
详细设计:依据概要设计阶段的分解,设计每个模块内的算法、流程等。
三、软件维护:
(1)改正性维护:在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段。这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就叫做改正性维护 。
(2)适应性维护:在使用过程中,外部环境(新的硬、软件配置)数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化
(3)完善性维护:在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为满求了足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。
(4)预防性维护。为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。
四、衡量模块独立性的两个标准是什么?各表示什么含义?
内聚和耦合。内聚:又称为块内联系,指模块内部各成分之间相互关联的程度,以高内聚为设计目标。耦合:也称块间联系,模块之间相互联系程度的度量,联系越紧密,耦合性越强,独立性越差,以低耦合为设计目标。
五、软件设计的基本原理:模块化、抽象、独立性、信息隐蔽
六、结构化程序设计的基本要点是什么?
1、采用自顶向下、逐步求精的程序设计方法2、使用三种基本控制结构构造程序。任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造,3.这三种基本结构的共同点是单入口、单出口。
七、软件工程三要素:过程、方法、工具三要素。方法支撑过程和工具,过程和工具又促进方法学的研究。
八、CMM全称是软件能力成熟度模型;从无序到有序的进化分成5个级别,分别为:1 初始级(工作无序,管理无章法,项目成功主要依靠项目负责人的经验和能力);2 可重复级(建立了基本的项目管理过程来跟踪成本、进度和功能特性。管理制度化,建立了基本的管理制度和规程,管理工作有章可循。 );3 已定义级(使用标准开发过程(或方法论)构建(或集成)系统);4 已管理级(产品和过程已建立了定量的质量目标。);5 优化级(量化反馈和先进的新思想、新技术促使过程不断改进)。
九、简述提高可维护性的方法:(1)建立明确的软件质量目标;(2)利用先进的软件开发技术和工具;(3)建立明确的质量保证工作;(4)选择可维护的程序设计语言;(5)改进程序文档。
十、软件危机:软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。⑴ 软件规模越来越大,结构越来越复杂。⑵ 软件开发管理困难而复杂。⑶ 软件包开发费用不断增加。⑷ 软件开发技术落后。⑸ 生产方式落后,仍采用手工方式。⑹ 开发工具落后,生产率提高缓慢。
十一、调试:进行了成功的测试之后才开始的工作。调试的目的是确定错误的原因和位置,并改正错误,归纳法、演绎法和回溯法
十二、数据字典、数据流图:
数据字典是关于数据的信息的集合,对数据流程图中的各个元素做完整的定义与说明,是数据流程图的补充工具。数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。 数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明
软件测试
常用用例设计方法
电梯,杯子,笔,桌子,洗衣机的测试用例
软件开发模型的使用场景
软件工程
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!