22届计算机考研复试技巧以及注意事项高频问答35问Python集锦【一定要记牢】

这几天22年考研初试成绩即将公布,我们的考生下一步即将面临的就是复试,我 们知道复试中面试一项是起着最最至关重要的作用。那么,在复试面试时大家应该注意哪些 事项呢?总结多年来学员的经验,提供以下高频出现的问题。

还为大家准备了复试相关视频,如下图所示,看第三张图,回复【考研复试】即可拿去学习了。

  

1.谈谈你为什么要考计算机/软工专业研究生?

答:我大四在北京实习期间,进入的是一家大数据公司,接触的就是大数据、云计算,由于我所在组负责开发的就是政府项目,最看重的就是安全和稳定。因此我对大数据、云计算和信息安全产生了极大的兴趣,但是因为没有系统学习这方面的渠道和方法,无法在这方面更进一步,为了能够系统的学习这一方面,我选择了继续攻读研究生。

2.如果你能顺利的考入我校研究生,你对今后2年/3年的学习规划是什么?

答:我将会专注于在这一领域的学习与研究,在大数据、云计算和信息安全方面建立自己的知识结构体系。我目前对于大数据、云计算和信息安全的理解不全面不深刻,对于这方面的应用了解的不多,为了弥足自己的不足,在研究生期间,我将会努力阅读国内外的先进论文和了解该领域在我们日常生活中的最新应用。希望在研究生毕业之后,为自己在这一领域的未来职业生涯打下坚实的基础。如果能够获得攻读博士的机会,我更愿意更进一步,继续学习。

【镜像问题】如果你不幸被刷,你会怎么办?你愿意来读非全日制吗?

答:我选择考取研究生,就是为了对大数据、云计算和信息安全有一个自己的知识体系结构,如果读非全日制的话,可能自己没有那么多的时间和热情安心学习和研究,所以本人不太愿意读非全日制。

【陷阱问题】如果我们录取你,你一定会来吗?

答:贵校有的雄厚的师资力量和良好的科研环境,校园环境优美,学风浓厚。而且海洋对我也具有莫大的吸引力,贵校的研究方向和我的个人兴趣十分契合。如果贵校录取我,我愿意来这里继续学习。

3.你为什么选择我们学校?/为什么选择这座城市(例如深圳)?

答:贵校有的雄厚的师资力量和良好的科研环境,校园环境优美,学风浓厚。而且海洋对我也具有莫大的吸引力,贵校的研究方向和我的个人兴趣十分契合。上海是我从小到大一直想要来的城市,这里有一流的教育医疗体系,相对公平的竞争环境,是中国的金融中心,这些都对我有着很大的吸引。

4.你是否有过项目经验?

答:我在本科期间做过xx系统等,在工作期间主要做的是xx系统。涉及C语言、Java语言、Groovy语言和C++语言,涉及C/S架构和B/S架构,在每个项目中,我都收获颇丰。

如果有项目经验,你在该项目中所担当的角色、本人完成的工作、该项目的亮点是什么?

答:根据自己的实际情况回答。

5.你在过去的编程中,遇到的最困难的事是什么?你是如何解决的?

答:遇到最大的困难就是所做项目中涉及到新的知识和自己从未接触过的新技术。当遇到这类困难时,我首先阅读官方文档或者请教有经验的前辈,对所使用的技术有一个大概的了解,然后在根据自己的需求研究这类知识的具体使用,并自己着手写一些demo加深理解。在彻底掌握该类技术的使用后,再使用到项目中。

6.你是否有个人技术博客?

答:有CSDN和博客园的博客,在GitHub上也有自己的小demo,在工作期间会在博客园写一些对技术使用的心得。一般都是在这两个技术论坛阅读别人写的一些技术理解。

7.本科毕设做的怎么样了?请详细说明。

答:根据自己的实际情况回答。

8.你学习过什么编程语言?你为什么学习该编程语言?

答:学过C语言,C++语言,Java语言和Groovy语言,HTML,JavaScript等。在本科期间通过C语言入门,然后通过C++语言学习面向对象语言的特点。最后以C语言和C++语言的了解,学习Java语言,用于工作。在工作中,由于所使用的项目插件是用Groovy语言写的,为了满足羡慕需要,所以学习了Groovy语言。

9.简述你学习过的框架技术。(SSM,微服务框架,MVC)

答:SSM:

Spring

Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。

SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

微服务框架:

MSF4J 是 Java 轻量级高性能的 WSO2 微服务框架。微服务架构是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并与轻量级机制(通常是HTTP资源的API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署。这些服务的集中化管理已经是最少的,它们可以用不同的编程语言编写,并使用不同的数据存储技术。

10.你本科成绩怎么样?本科排名怎么样?

答:我的本科采用五分制绩点计算算法,我的GPA是xx,对应百分制是xx分。本科排名在我所学对应专业排名前12%。

11.你是否有过竞赛获奖经历?

答:根据自己的实际情况回答。

12.你本科学的最好的一门课是什么?说一说你对这个课程一些自己的理解。

答:学得较好的课程是数据结构。

首先为什么要开发各种各样的软件,目的只有一个:就是利用计算机来为人们处理各种数据并以一定的形式展现出来供用户使用。随着计算机的应用范围的不断扩大,计算机所需要处理的数据越来越复杂,并且规模越来越大,计算机所处理的数据已不再是单纯的数值数据,而更多的是非数值数据。

 另一方面,现实中需要处理的数据并不是杂乱无章的,它们一定有内在的各种联系,但这需要算法设计人员去总结、归纳、建模、然后抽象出一个具体的模型来表示—,我们将这个模型成为数据的逻辑结构。然后聪明的设计师再围绕这个创建的逻辑结构总结设计出一套处理方法,这样,数据有了,模型有了,算法有了,在理论上问题就可以解决了。剩下的就应该交给计算机去做了,但以上都是基于逻辑上的设计,计算机才不懂这些。所以接下来还需要对应的存储结构来将要处理的数据先存储到计算机中,再将那些处理逻辑(算法)用相应的代码实现,计算机才能对数据进行有效的处理。

13.你今后想从事什么方向的学习?为什么?

【近似问题】你怎么看待你今后研究的方向与发展前途?

【近似问题】你想研究的方向与你本科所学有什么相关吗?

【近似问题】你在该方向上做过什么工作?

答:今后想从事大数据,云计算和信息安全这一方向的学习。我大四在北京实习期间,进入的是一家大数据公司,接触的就是大数据、云计算,由于我所在组负责开发的就是政府项目,最看重的就是安全和稳定。因此我对大数据、云计算和信息安全产生了极大的兴趣。

【近似问题】你认为计算机/软工方向在未来5年发展最好的领域是什么?

(1)网络化趋势。网络化是信息时代的基本特征,软件产业的发展也由“以机器为中心”向“以网络为中心”的变革。随着泛在网、物联网的发展及“云计算”、“移动计算”等技术的成熟,软件网络化成为新趋势,网络化软件产品分发迅速、使用便捷、收费灵活、防盗版等特点正改变着软件的模式。

(2)服务化趋势。软件服务化的一种主流模式就是元计算,它是指在高层系统软件控制下各种服务器形成一个具有计算数据处理能力的服务“环境”,被看作是下一代Internet技术发展的目标,推进了软件系统的发展趋势开始从集中的主机环境转变为客户网络结构。在此趋势下,软件服务所提供给客户的体验成为市场竞争的关键性因素。

(3)智能化趋势。嵌入式系统的方兴未艾为软件产业智能化发展带来巨大机会。随之智能化的研发和应用,提高了资源配置效率,提高了信息系统的自适能力,扩大了意识思维的领域。多媒体、数字化等信息技术促进了计算机网、通信网和电视网日趋融合,也推进了软件开发语言高级化、发工集成化的发展。

(4)开放化趋势。开放化的主要表现是软件产品标准化和软件源代码开放。开放源代码软件,降低了软件技术和知识产权壁垒,为打破操作系统领域的垄断创造了条件。Linux就是一个开放式的操作系统,具有代码开放、分布式开发环境的特点。以开放源代码软件为基础发展软件产业是推动我国软件产业开放化的重要途径。

(5)融合化趋势。传统产业的改造升级将推动应用软件需求的增长,传统意义上的机械化、电气化、自动化等“硬装备”转化为数字化、智能化、网络化的“软装备”的核心技术,促进了软件产业与其他产业之间的融合不断深化。软件企业适应市场需要不断拓展并升级其产品领域、推进产业链和集群式发展,以形成行业竞争的新优势。

 【近似问题】计算机软件技术发展现状?

(1)国外软件技术发展现状。在目前全球软件产业发展领域,美国无疑是发展最为成熟的,近年来,印度、中国软件产业的发展也比较迅速。世界各国对计算机软件技术发展都十分重视,并出台了一系列国家级别的软件开发的政策,并投资了相应的人力物力。大多数国家把开发重点优先放在了对基础软件的研发以及计算机软件开发方法上。当前备受国际关注的IT前沿技术与关键技术主要有:大规模网络体系;高端计算(虚拟计算、网格计算、云计算、泛在计算);系统芯片(集成芯片);软件工程;知识处理(海量数据库和数据挖掘);高效系统;高可靠软件和系统;移动和无线通信;开放源码;面向服务的体系结构等。

(2)国内软件技术发展现状。我国软件产业自上世纪70年代中期起步,随着改革开放40年来的发展,我国软件业从无到有、从小到大,现在己发展成为国家战略性先导产业。2000年中国软件产业规模达到5834亿元,到2009年达到9513亿元 ,2010年超过1万亿元。在全国范围内初步形成了北京、上海、江苏、杭州、济南等国家软件产业基地。我国软件产业在规模高速增长的同时,产业结构不断完善,逐步形成了软件科研和技术、基础软件和应用软件、软件应用、软件人才培养全面覆盖、产业链配置相对齐全、完整的产业结构体系。目前,我国软件产业发展正处于良性发展阶段,软件产业的规模、效益和出口额不断扩大,软件产品结构和层次不断优化,从业人员素质和水平不断提升。

14.比较熟悉的开发工具是什么?

答:Eclipse,WebStorm,IDEA,Navicat,Postman等。

15.如果和老师发生矛盾怎么解决,你的研究兴趣和老师的要求方向冲突怎么办?

答:找出矛盾的根源,根据矛盾对症下药,如果是学术上的矛盾,我可能寻找多种方法和证据,以理说服老师,若无确切的结论,暂且以老师的建议为主,打好基本功。若是生活上的矛盾,我将会做好自己的生活规划,努力克服不好的习惯。第二个问题我觉得兴趣都是培养出来的,如果自己对该领域一点都不了解,何来兴趣可谈,因此,我将会努力学习和了解该方向,说不定发现了自己不知道的兴趣呢。

16.准备考研的过程中,你认为在哪个方面提升最大?

答:忍受寂寞和坚持这个方面提升最大吧。首先,在考研期间,都是自己一个人看书生活,这让我自己真的获益匪浅,在忍受孤独方面提高了很多,以往自己对长时间的寂寞是忍受不了的,但是考研改变了我对这方面的看法。第二就是坚持,考研打得是持久战,不知道结果是怎么样,唯有坚持下来,才能看到胜利的曙光。

17.你认为研究生相对于本科会有什么改变?

答:首先,个人素养方面的提升,毕竟一篇学位论文不是轻轻松松就能写出来的,需要各方面知识的积累和能力的提升,在写作过程中,还会遇到很多困难,战胜困难的经历也会让自己受益终生。第二,学习的专业更深并且研究方向可能更窄一点,所以需要阅读大量书籍和论文,在学习和生活中比本科要更自律。

18.你想出去实习找工作,但实验室不允许,你会怎么做?

答:我觉得既然选择读研,那就努力做一名研究生该做的事情,做好自己当前阶段最主要的事情才是对自己的人生最大的尊重。

19.你认为一个计算机/软工专业的学生应该具备哪些能力?

答:团队精神和沟通能力:计算机专业的学生开发一个大型项目的时候往往是几个人小组合作开发,如果没有团队精神和沟通能力,项目往往完成的不尽人意。

学习和总结能力:计算机专业的学生只有在不断犯错误的过程中才能成长,所以一定要有学习和总结能力,错误尽量不犯第二次。

抗压能力:开发项目时,往往时间紧任务重,在开发过程中还往往遇到各种bug和问题,因此需要一定的抗压能力。

动手能力:计算机是一门实践性和应用性较强的学科,学生不仅需要扎实掌握理论知识,同时还需要学会如何将其运用到实践操作中去,并能够运用所学知识解决实际问题,使得自身的能力不断增强。

创新能力:社会的快速发展离不开计算机技术的提升,因此,高校学生还需要具备较强的创新能力。

信息获取能力:只有对时代信息保持敏锐的察觉力,才能根据科技和社会发展的大方向进行相应的创新,在学习和工作取得更多的成就,同时也会社会的进步贡献自身的力量。

20.【陷阱问题】你有没有读博士的打算?

答:我家里人是支持我读博的,如果有机会,我愿意继续深造。

21.你认为你最大的优势/缺点是什么?

答:优势:有严谨、踏实的的工作态度, 善于沟通交流,做事认真,抗压能力强,良好的专业基础和专业动手能力,较强的自学和技术应用能力,有较强的执行力和纪律性。

缺点:有的时候遇到困难想要自己独立解决,会浪费大量时间

22.【工作】聊聊你的工作经历

答:根据自己的实际情况回答。

23.【工作】为什么放弃工作考研?为什么不考虑换工作而是选择考研?

答:根据自己的实际情况回答。

24.【前沿知识】你对人工智能有什么了解?强人工智能可能实现吗?

答:人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。

强人工智能:人类级别的人工智能。强人工智能是指在各方面都能和人类比肩的人工智能,人类能干的脑力活它都能干。创造强人工智能比创造弱人工智能难得多,我们现在还做不到。Linda Gottfredson教授把智能定义为“一种宽泛的心理能力,能够进行思考、计划、解决问题、抽象思维、理解复杂理念、快速学习和从经验中学习等操作。”强人工智能在进行这些操作时应该和人类一样得心应手。

弱人工智能:弱人工智能是擅长于单个方面的人工智能。比如有能战胜象棋世界冠军的人工智能,但是它只会下象棋,你要问它怎样更好地在硬盘上储存数据,它就不知道怎么回答你了。

每一个弱人工智能的创新,都在给通往强人工智能和超人工智能的旅途添砖加瓦。

25.【前沿知识】什么是机器学习?讲讲具体的算法。

答:传统上如果我们想让计算机工作,我们给它一串指令,然后它遵照这个指令一步步执行下去。有因有果,非常明确。但这样的方式在机器学习中行不通。机器学习根本不接受你输入的指令,相反,它接受你输入的数据! 也就是说,机器学习是一种让计算机利用数据而不是指令来进行各种工作的方法。

机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

监督学习算法:线性回归,逻辑回归,神经网络,SVM 

无监督学习算法:聚类算法,降维算法 

特殊算法:推荐算法

【近似问题】你认为你本科学的数学有哪些会用到机器学习中?

概率论,高等数学,线性代数

26.【前沿知识】什么是大数据?你接触到的最大的数据有多大?

答:大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 大数据是一个笼统的概念暂未发现和准确的定义。

大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的。相反,对于机器学习而言,越多的数据会越 可能提升模型的精确性,同时,复杂的机器学习算法的计算时间也迫切需要分布式计算与内存计算这样的关键技术。因此,机器学习的兴盛也离不开大数据的帮助。 大数据与机器学习两者是互相促进,相依相存的关系。

27.【前沿知识】什么是数据挖掘?

答:1、什么是数据挖掘/分析

简单地说就是,在大型数据库中,自动发现有用信息的过程,加以分析。其中数据库中的知识发现是重要的环节,也就是人们说的KDD,knowledge discovery in database。2、KDD是什么其实就是一个数据处理的过程,从输入数据开始,进行预处理工作,包括特征选择,维归约规范化和选择数据子集等等,随后进行分析和挖掘,再经过处理,例如模式过滤,可视化,模式表示等,最后形成可用信息的过程。

3、数据挖掘要解决什么问题

具体的讲主要是以下几个,首先是数据的可伸缩性,提高或改变数据的可伸缩度。其次是解决数据高维性的问题。处理异种数据和复杂数据。解决数据所有权与分布问题。对非传统的分析进行合理处理。

4、数据挖掘的任务

其实主要包括四个大块,可以独立运行,也可以联合操作,分别是聚类分析,预测建模,关联分析,异常检测。聚类分析实用的技术包括K均值,凝聚层次聚类,dbscan,簇评估等,主要目的是通过基于原型,密度,图等的聚类,发现其间的关系。预测建模则更多的是一种可视化角度分析方法,利用分类,回归等方法,来建立模型解决问题。关联分析顾名思义,更多强调数据中的特征强关联,例如说过一万次的啤酒与尿布等。异常检验则主要是识别不同于其他数据的具有显著特征值的数据。

5、基础知识有什么

想学习数据挖掘,几个基础知识是必备。首先是线性代数,包括向量,矩阵等。否则你根本不会是用科学工具。其次是维归约,包括PCA,SVD等技术的使用。还有概率统计,回归方程,优化,也是必备知识。暂时写这么多,有时间再多说些。

28.【前沿知识】大数据和机器学习之前有什么联系?

答:机器学习与大数据紧密联系。但是,必须清醒的认识到,大数据并不等同于机器学习,同理,机器学习也不等同于大数据。大数据中包含有分布式计算,内存数据库,多维分析等等多种技术。单从分析方法来看,大数据也包含以下四种分析方法:

1.大数据,小分析:即数据仓库领域的OLAP分析思路,也就是多维分析思想。

2.大数据,大分析:这个代表的就是数据挖掘与机器学习分析法。

3.流式分析:这个主要指的是事件驱动架构。

4.查询分析:经典代表是NoSQL数据库。

也就是说,机器学习仅仅是大数据分析中的一种而已。

29.【前沿知识】什么是云计算?

答:随着并行计算、分布计算、网格计算、虚拟化、SOA、容错技术、网络带宽等关键技术日趋成熟,通过网络访问非本地的计算服务(包括数据处理、存储和信息服务等)的条件越来越成熟,多种技术的融合就产生了“云计算”。之所以称之为“云”,是因为计算设施不在本地而是在网络中,用户不需要关心它们所处的具体位置,但它确实存在在某个地方。

云计算不是一种新技术,而是一种在并行计算、分布计算、网格计算、虚拟化、SOA、容错技术、网络带宽等关键技术日趋成熟而催生出的新的商业服务模式,它通过大量廉价硬件软件以集群方式来降低成本换取使用量以达到营利的目的。

通过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再由多部服务器所组成的庞大系统搜索、计算分析之后将处理结果回传给用户。通过这项技术,远程的服务供应商可以在数秒之内,达成处理数以千万计甚至亿计的信息,达到和“超级电脑”同样强大性能的网络服务。

30.【前沿知识】什么是深度学习?

答:深度学习(Deep learning)是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:

1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;

2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。

常见的深度学习算法包括:

受限波尔兹曼机(Restricted Boltzmann Machine, RBN)

深度置信网络(Deep Belief Networks,DBN)

卷积神经网络(Convolutional Neural Network, CNN)

堆栈式自动编码器(Stacked Auto-encoders,SAE)。

31.【前沿知识】 什么信息安全?

答:信息安全主要包括以下五方面的内容,即需保证信息的保密性、真实性、完整性、未授权拷贝和所寄生系统的安全性。信息安全本身包括的范围很大,其中包括如何防范商业企业机密泄露、防范青少年对不良信息的浏览、个人信息的泄露等。网络环境下的信息安全体系是保证信息安全的关键,包括计算机安全操作系统、各种安全协议、安全机制(数字签名、消息认证、数据加密等),直至安全系统,如UniNAC、DLP等,只要存在安全漏洞便可以威胁全局安全。信息安全是指信息系统(包括硬件、软件、数据、人、物理环境及其基础设施)受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,信息服务不中断,最终实现业务连续性。

信息安全学科可分为狭义安全与广义安全两个层次,狭义的安全是建立在以密码论为基础的计算机安全领域,早期中国信息安全专业通常以此为基准,辅以计算机技术、通信网络技术与编程等方面的内容;广义的信息安全是一门综合性学科,从传统的计算机安全到信息安全,不但是名称的变更也是对安全发展的延伸,安全不再是单纯的技术问题,而是将管理、技术、法律等问题相结合的产物。本专业培养能够从事计算机、通信、电子商务、电子政务、电子金融等领域的信息安全高级专门人才。

32.什么是多线程?反射?NIO?集合?

答:多线程:多线程就是指一个进程中同时有多个执行路径(线程)正在执行。在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。

反射:JAVA中的反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变。通俗的讲就是反射可以在运行时根据指定的类名获得类的信息。

NIO:

面向流与面向缓冲

Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

阻塞与非阻塞IO

Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

选择器(Selectors)

Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

集合:集合就是一个放数据的容器,准确的说是放数据对象引用的容器。

33.面向对象语言与面向过程语言的区别?面向对象语言有什么优点?

答:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

封装

封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。

要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

 

继承概念的实现方式有三类:实现继承、接口继承和可视继承。

Ø         实现继承是指使用基类的属性和方法而无需额外编码的能力;

Ø         接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

Ø         可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。

OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

 

多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有二种方式,覆盖,重载。

覆盖,是指子类重新定义父类的虚函数的做法。

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。”

那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已 存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

34.说一说OSI各层协议,HTTP?TCP?UDP?IP?

答:应用层

与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。

表示层

这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。

会话层

它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。

传输层

这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。

网络层

这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。

数据链路层

它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。

物理层

OSI的物理层规范是有关传输介质的特性,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。

TCP/IP五层模型的协议:

应用层

传输层

网络层

数据链路层

物理层

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复 用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、 流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要 有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系 统)、TFTP(通用文件传输协议)等.

HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。

35.说一说http请求过程。

答:

  1. 浏览器查找域名的 IP 地址。这一步包括 DNS 具体的查找过程,包括:浏览器缓存 -> 系统缓存 -> 路由器缓存……
  2. 浏览器向 web 服务器发送一个 http 请求:三次握手、传送数据、四次挥手;
  3. 服务器的永久重定向响应:返回真正访问的地址;
  4. 浏览器跟踪重定向地址:另发一个 http 请求;
  5. 服务器处理请求;
  6. 服务器返回一个 http 响应;
  7. 浏览器显示 html 页面:解析 html 以构建 DOM 树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树;
  8. 浏览器发送请求,获取嵌入在 html 中的资源(如图片、音频、视频、CSS 、JS 等等);
  9. 浏览器发送异步请求。

三次握手建立 TCP 连接:

在 http 工作开始之前,浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的。该协议与 IP 协议共同构建 Internet ,即著名的 TCP/IP 协议族,因此 Internet 又被称作是 TCP/IP 网络。 http 是比 TCP 更高层次的应用层协议。根据规则,只有低层协议建立之后才能进行更高次层协议的连接。因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是 80 。在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接:

第一次握手:建立连接时,客户端发送 SYN 包(syn=j)到服务器,并进入 SYN_SENT 状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手:服务器收到 SYN 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED(TCP连接成功)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

一旦建立了 TCP 连接,浏览器就会向服务器发送 http 请求命令。浏览器发送其请求命令之后,还要以头信息的形式向服务器发送一些别的信息。此后,浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

四次挥手终止连接

由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。原则是当一方完成它的数据发送任务后,就能发送一个 FIN 来终止这个方向的连接。收到一个 FIN 只意味着这一方向上没有数据流动。一个 TCP 连接在收到一个 FIN 后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

第一次挥手:TCP 客户端发送一个 FIN,用来关闭客户端到服务器的数据传送。

第二次挥手:服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1 。和 SYN 一样,一个 FIN 将占用一个序号。

第三次挥手:服务器关闭客户端的连接,发送一个 FIN 给客户端。

第四次挥手:客户端发回 ACK 报文确认,并将确认序号设置为收到序号加 1 。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>