for(;1;)语句有什么问题:
他的意思是循环条件永远为真,不停地进行循环操作,除非循环体中有强制退出循环的语句才能终止循环,其实功能就相当于while(1)
存取时间和存储周期哪个大:
存储周期略大于存取时间,因为存储周期是两次读或写操作的最短时间,而存取时间是存储器从接收读命令到被读信息稳定在数据寄存器的输出端为止的时间间隔。
毕设ssm框架:
Spring
轻量级开发框架,目的在于提高开发人员的开发效率和提高系统的维护性spring的核心是IOC(控制反转)即不需要编程人员去手动的创建对象,而是让框架帮助完成这一切(在配置文件中指定使用特定的参数去调用实体类的构造方法来实例化对象)
AOP(面向切面编程) 在运行时,动态的将代码切入到指定的方法、指定的位置上的编程思想就是面向切面编程。
AOP基于动态代理
Spring MVC
随着 Spring 轻量级开发框架的流行,Spring 生态圈出现了 Spring MVC 框架, Spring MVC 是当前最优秀的 MVC 框架。相比于 Struts2 , Spring MVC 使用更加简单和方便,开发效率更高,并且 Spring MVC 运行速度更快。
MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,并且它天生与 Spring 框架集成。Spring MVC 下我们一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台页面)。
PS:上图为网图
MyBatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
如何理解mvc:
M(model)V(View)C(controller)是一种软件设计典范。用一种数据,界面,业务逻辑分离的方式来组织代码,使业务逻辑相互独立并且联系。每一层只专注自己的业务,使模块间低耦合性
Java重载和重写:
重载就是根据输入的数据不同,做出不同的处理,发生在同一个类里。方法名必须相同,参数类型不同,个数不同、顺序不同。
重写就是子类继承父类的相同方法,输入数据一样,但要做出有区别于父类的响应时,覆盖父类方法
重写就是对父类方法的改造,外部样子不变,内部的逻辑结构发生改变
(比如中国,美国,印度都继承父类人类的吃的方法,但是子类美国人吃的方法是用叉子吃,中国人使用筷子,印度人用手)
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
封装:
封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。防止该类的代码和数据被外部类定义的代码随机访问。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
继承:
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
多态:
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
全局变量可以定义在类外吗:
可以吧,但是得在头文件中声明
说说人工智能:
依个人理解,人工智能目的是让计算机模拟人的思维,让他解决一些不能用代码解决的问题,比如分析图片中的内容,这些问题没有一个确定的公式也没有确定的算法人的大脑不是根据算法来推导的,实现人工智能的核心就是机器学习,机器学习就是让计算机不断地学习,喂给它大量的数据让他在数据中积累经验,经过不断的调整参数,直到它非常接近或完全符合正确的结果就是说模型就训练好了,而实现机器学习的重要分支就是深度学习,深度学习就是模拟人类大脑的神经突触之间的连接,人们研究了一个更加智能和通用的模型,就是卷积神经网络。
机器学习、人工智能和深度学习都是最近很火的词,有的人用截然不同的态度评价它们,好像三者并无联系,有的人却认为它们不过是新瓶装旧酒,都是商家宣传推广的噱头。
这些看法未免有些片面,机器学习、人工智能和深度学习的目标都是让算法模拟“智能”,但层次范围不同。
用北京市的环线来形容三者的关系实在最形象不过了,如下图所示:
上图:机器学习、深度学习和人工智能的关系
人工智能(Artificial Intelligence)涵盖范围最广,三环以内都可以叫人工智能,它关注的问题和方法也最杂,包括知识推理、逻辑规划以及机器人等方面。
机器学习(Machine Learning)住在二环,是人工智能的核心区域,也是当前发展最迅猛的一部分,子算法流派枝繁叶茂,但思想比较统一。
至于当下的网红——深度学习(Deep Learning),其实原本是从机器学习的神经网络子算法分支发展出来的一系列成果,知识体系一脉相承,只不过近年大出风头,干脆重新起了个名字“单飞”了。
人工智能
人工智能的目的是让计算机模拟人类的思维,让它解决一些不能用代码描述的问题,比如判断一朵花是不是玫瑰、通过 CT 照片检测一个人的病情等,这些问题就不能用传统的编程方法解决,因为没有一个确定的公式,或者说没有一个确定的算法。
但是我们人类就很容易解决这些问题,人类大脑不是根据固定的算法来推导的,而是根据以往的认知或者经验来推理。人工智能的目的也是如此,就是不给计算机编写固定的算法,让计算机根据已有的经验或者认知来帮助人们做事情。计算机的思维方式和人类相似,所以称为人工智能。
机器学习
李飞飞ted演讲如何教会计算机理解图片
人工智能是一个很美好的憧憬,那么,如何才能实现人工智能呢?答案就是让计算机不断地学习,也就是喂给它大量的数据,让它从数据中积累经验,逐渐形成认知。这就是机器学习。
人工智能是最终目标,机器学习是实现目标的一种方案。
机器学习是一件很麻烦的事情,需要先搭建一个模型,这个模型包含了很多参数,然后把准备好的数据(包括正确的结果)输入到模型中,不断调整模型的参数,直到它非常接近或者完全符合正确的结果,这个时候我们就说模型训练好了。
机器学习的模型有很多种,已经有人帮我们开发好了,我们从中选择其一即可,这个不用担心。最要命的是数据,机器学习需要大量的数据才能训练好模型。人类看一两张猫的照片就认识猫了,但是机器学习需要看成千上万张照片。
如何收集大量有效的数据,是机器学习的重中之重,所以才有了爬虫,有了数据挖掘,有了数据清洗等分支。
深度学习
深度学习
机器学习的模型是一个不断发展的过程,后来人们逐渐研究出了一种更加智能和通用的模型,就是卷积神经网络(CNN)。CNN 模拟人类大脑神经突触之间的连接,通过调整参数来模拟突触连接的强弱。
如图卷积神经网络示意图(x 表示输入,y 表示输出)
CNN 模型是机器学习的高级玩法,更加接近真正的人工智能,所以人们称此为深度学习。说白了,深度学习就是机器学习的一个分支。
总结
人工智能是最终的目标,就是让机器模拟人类的思维模式;机器学习是实现人工智能的一种途径,它有很多模型可以选择;深度学习是机器学习的一个分支,它使用了一种更加智能和通用的模型,就是卷积神经网络(CNN)。
软件工程的特征:
(1)具有一种文化背景的人为具有另一种文化背景的人创造产品
(2)开发效率很重要
(3)软件工程的中心课题:控制复杂性
(4)软件经常变化
(5)软件必须有效的支持他的用户
(6)和谐的合作是开发软件的关键
瀑布模型:
生命周期为线性,包括需求分析,设计,编码,测试,运行维护,从前至后、相互衔接的固定顺序,如同瀑布流水,以文档为驱动、适用于软件需求明确的软件项目模型。
osi七层协议:
物理层:传输比特流,尽可能屏蔽传输媒体和通信手段之间的差异
如(网卡、网线、光纤、集线器)
数据链路层: 将网络层传输下来的数据组装成帧,为同一链路的主机提供数据传输
如(交换机,网桥)
网络层:主机间数据传输,路由选择,流量控制,拥塞控制,差错控制
如(路由器)
传输层:端到端的可靠传输,流量控制,差错控制,服务质量,数据传输等服务
会话层:不同主机之间的各个进程间进行通话
表示层:处理通信系统中交换信息的方式,翻译,数据的加密和解密
应用层:用户的网络界面
交换机:交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备
排序算法:
插冒归基,快选希堆
数据:
描述事物的符号和记录
数据库:
长期存储在计算机内的、有组织的、可共享的数据集合.
dba :
数据库管理员,管理和维护数据库系统的工作人员
dbms:
数据库管理系统,操纵和管理数据库的大型软件
数据库系统:
由数据库、数据库管理系统、数据库管理员、应用系统构成
时间复杂度:
描述一个算法的运行时间.
空间复杂度:
一个算法在运行过程中临时占用存储空间大小的度量
软件工程测试的定义:
使用人工和自动的手段来运行测试某个系统的过程,目的在于检验它是否满足规定的需求或者弄清楚预期结果与实际结果之间的差别
软件测试的目标:
- 为发现程序中的错误而运行程序的过程
- 好的测试方案是发现迄今为止尚未发现的错误的方案
- 成功的测试是发现迄今为止尚未发现错误的测试
主要的测试方法:
静态测试
- 代码测试:测试代码是否符合相应的标准和规范
- 界面测试:测试软件的实际界面与需求中的说明是否相符
- 文档测试:主要测试用户手册和需求说明是否符合用户的实际需求
动态测试
- 黑盒测试:只考虑系统的输入和输出,完全不考虑程序内部的逻辑结构和处理过程,有(等价划分法 边界值法 因果图法 场景法)
- 白盒测试:结构测试或逻辑驱动测试,针对测试单元的内部是如何进行工作的测试,有(语句覆盖 判定覆盖 条件覆盖 点覆盖 边覆盖 路径覆盖)
冒泡排序的时间复杂度 :
最坏n^2 最好n 平均n^2
区块链:
- 核心的特点是 数据难以篡改和去中心化
- 服务器在区块链中成为节点,提供存储空间和算力支持
- 节点通常掌握在不同的主体手中, 所以篡改区块链中的数据是不容易的
数据库三级模式,两极映像:
外模式:又称为子模式,是数据库用户的视图, 使用户可看到的局部数据的逻辑结构和特征描述
模式:概念模式,数据库中全体数据的逻辑结构和特征描述,是所有用户的公共视图,一个数据库只有一个模式
内模式:数据库物理结构和存储方式的描述,是数据在数据库内的组织方式.
软件开发模型:
指的是软件开发全部过程、活动和任务的结构框架。
瀑布模型: 生命周期中各个活动规定危险性链接的模型,包括需求分析、设计、编码、测试、运行与维护,从前至后相互衔接固定顺序,如同瀑布流水逐级下落文档驱动,适用于需求分析十分明确。
增量模型: 将需求分段为一系列增量产品,每一增量可以分别开发,第一个增量为核心产品 客户对每一个增量的使用和评估都会作为下一个增量的新特征和功能, 直到生产了最终的完善产品
螺旋模型:
将瀑布模型和迭代模型结合起来,加入了风险分析,使开发人员对每个演化层出现的风险有所了解,特别适合于庞大 复杂并且具有高风险的系统
CMMI:
是CMM模型的最新版本,是用于评价软件承包能力并帮助改善软件质量的方法,侧重于软件开发过程的管理及工程能力的提高与评估
- 初始级
- 可重复级
- 已定义级
- 已管理级
- 优化集
ODBC
开放数据库互联, 它建立了一组规范,并提供了一组对数据库访问的标准 API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给 ODBC。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。
日志文件
日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。
在计算机中,日志文件是记录在操作系统或其他软件运行中发生的事件或在通信软件的不同用户之间的消息的文件。记录是保持日志的行为。在最简单的情况下,消息被写入单个日志文件。
软件开发的早期阶段为什么要进行可行性研究?
进行可行性研究的原因:在实际情况中,许多问题不可能再预定的系统规模或时间期限之内解决。如果问题没有可行的解,那么花费在这项工程上的任何时间·人力·物力,都是无谓的浪费。
可行性研究的目的:就是用最小的代价在尽可能短的时间内确定问题是否能够被解决;可行性研究的目的不是解决问题,而是确定问题是否值得去解决。
应该从那些方面研究目标系统的可行性:
(1)技术可行性 使用现有的技术能实现这个系统吗?
(2)经济可行性 这个系统的经济效益能超过它的开发成本吗?
(3)操作可行性 系统的操作方式在这个用户组织内行得通吗?
简述面型对象方法的4个要点:
(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。
(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的 静态属性,是对象的状态信息。
(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。
(4)对象彼此之间仅能通过传递消息互相联系。
E-R模型向关系模型的转换规则
软件生命周期:
软件的产生直到报废的生命周期
生存周期包括:
- 问题定义
- 可行性分析
- 需求分析
问题识别
到处逻辑模型
编写文档- 开发阶段
- 维护
需求分析:
需求分析的目的是通过详细的调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求,然后再次基础上确定新系统的功能。
程序设计风格:
风格就是好的规范,当然我们所说的程序设计风格肯定是一种好的程序设计规范,包括良好的代码设计,函数模块,接口功能以及可扩展性等,更重要的就是程序设计过程中代码的风格,包括缩进,注释,变量及函数的命名,泛型和容易理解。
视图:
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。
图是一个虚拟表,其内容由查询定义。
需求分析常见的获取方法:
- 研究用户
- 从调查中获取用户需求
- 通过原型完善用户需求
简述模块独立性:
模块独立性是指模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。
耦合
耦合是对一个软件结构内各个模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,调用模块的方式,以及通过接口的信息。 具体区分模块间耦合程度的强弱的标准如下:
- 非直接耦合
- 数据耦合
- 标记耦合
- 控制耦合
- 外部耦合
- 公共环境耦合
- 内容耦合
总之,耦合是影响软件复杂程度的一个重要因素。应该采取的原则是:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。
内聚
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。
- 偶然内聚
- 逻辑内聚
- 时间内聚
- 过程内聚
- 通信内聚
- 顺序内聚
- 功能内聚
衡量模块独立性的指标:
耦合和内聚同上
什么是数据字典
数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。 简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合。
线程和进程的区别
看了一遍排在前面的答案,类似”进程是资源分配的最小单位,线程是CPU调度的最小单位“这样的回答感觉太抽象,都不太容易让人理解。做个简单的比喻:进程=火车,线程=车厢线程在进程下行进(单纯的车厢无法运行)一个进程可以包含多个线程(一辆火车可以有多个车厢)不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-"互斥锁"进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”
关系语言的分类:
关系代数语言:
- 选择(西格玛的那个)
- 投影(只显示某个属性Π的那个)
- 连接:自然连接 (共同属性值相等的)
外连接 ()
左外连接 (左表记录全显示)
右外连接 (右表记录全显示出来) - 除(保留满足S 的,而且R中的列要去掉S的列)
关系演算语言
SQL语言:结构化查询语言
数据定义语言(DDL):定义基表,视图和索引, 定义表,删除表,修改表
数据查询语言(DQL): 数据对象查询
数据库操纵语言(DML):数据的插入、修改、删除
数据库控制语言(DQL):列表和视图的授权,完整性规则的描述以及事务的开始和结束等控制语句
数据库安全控制
- 用户身份识别
- 存取控制
- 视图机制
- 审计
- 数据加密
数据库设计步骤
- 需求分析
- 概念结构设计 ER图或者设计数据字典
- 逻辑结构设计 ER图转为逻辑模型
- 物理结构设计 把逻辑模型转化为物理模型
- 数据库实施 写SQL代码
- 数据库运行和维护 性能检测
---------------------------------------以下常考知识点待补充--------------------------------
分类,聚类区别:
tcp/udp:
排序算法的步骤(堆排序):
需求分析的任务:
可行性分析的任务:
数据库发生错误:
简述UML中活动图,状态图,顺序图的用途:
并发操作可能出现的问题,如何保证可串行性:
关系数据库能否完全消除数据冗余,为什么?:
分布式数据库的分布透明性:
软件开发者能够PDL选择一般那些标准:
函数依赖的逻辑,闭包:
UML:
--------------------------英语部分-------------------------
英语自我介绍:
介绍家乡:
介绍父母:
周末会干什么: