程序员个人面试总结(精选6篇)
篇1:程序员个人面试总结
个人简历
基本信息:
姓
名:张三
性
别:女
年 龄:23 工作经验:2年 专
业:软件技术 教育程度:专科
联系电话:xxxxxxxxx E-mail: xxxxxxxxxxx@126.com 职业技能与特长:
熟练掌握java语言,深入理解OOP编程思想,有良好的编程习惯;
熟练掌握JSP、Servlet、JavaScript、XML等开发技术;
熟练掌握Struts2+Spring+Hibernate进行JavaEE项目开发,深入理解Struts2核心思想;
熟练掌握Jbpm工作流,理解Jbpm流程实例、任务、执行、候选人、泳道等工作流概念.熟练掌握lucene(全文检索)、mybatis、WebService等流行框架和技术;
熟悉掌握Javascript、Ajax、jQuery等前台页面技术;
熟悉Sql语句编写。熟悉Jdbc、数据源、DBUtil;熟悉Mybatis对象关系映射框架;
熟悉Tomcat、JBoss等Web服务器的安装和配置,熟悉JAVA相关开发工具(Eclipse, Jbuilder)及项目管理工具SVN、Maven的使用;
熟悉关系型数据库的理论和E-R图的编写和使用PowerDesigner建模工具, 熟练使用MySQL、Oracle等数据库, 熟悉PL/SQL语法及事务及存储过程的设计;
熟悉软件工程,能迅速接受新技术,快速学习和应用。有中型项目开发经验,能独立完成软件某个模块的分析,设计开发,单元测试;
具备一定的英语,逻辑思维能力,有很好的团队合作精神。职业概况 求职意向:
工作性质:全职 目标地点:北京 目标职能:JavaEE开发工程师 期望待遇:具体值 工作经验:
2012/4—至今
北京神舟国际旅行社集团有限公司
职务:JavaEE开发工程师 工作描述:负责相关开发文档的编写、代码功能模块的编写等工作。项目经验:
项目名称:东华国旅管理平台
开发环境:Eclipse6.5+JDK6.0+Apache2.2+Tomcat6+Oracle+SVN
(Apache和Tomcat之间采用mod_jk作为桥梁,使用AJP协议通讯)使用技术:Struts2+Spring+Hibernate+Jbpm+Ajax+Jquery 开发周期:9个月
网
址:http:// 项目描述:
1.本系统拥有实时的机票查询系统,实时连接国内唯一机票预订系统中航信,信息全面,价格透明,预订便捷。最好的三方协议价格控制商业旅行成本,是企业商旅的最佳选择;
2.本系统主要分为价格政策、订单管理、会员管理、企业客户、基础数据、酒店管理、系统管理等核心模块;
3.通过对基础数据、机票、酒店、旅游线路、网站信息等数据的维护实现前台网站的所有功能;
4.对会员和企业客户的相关功能进行管理;
5.对客户在网站上形成的机票、酒店、订单进行管理。责任描述:
1.2. 3. 4.
自我介绍: 本人热爱IT行业、积极乐观、良好的表达与沟通能力。目前单身,能接受外派等工作。
篇2:程序员个人面试总结
这篇侧重于具体的笔试、面试的问题,至于是哪个公司的就
不去追究了,但一定是经常问到的,而且我嵌入式系统工程师和移动 开发工程师都参与了,问题要区别看待,那么自然就少了很多对C++ 问题的考察。
笔试
有一个教训是,题目让你编程实现的,不要罗列一大堆思想方
法,编程么,就是把你的代码写上去,比如写个非递归的中序遍历二 叉树,都知道用个栈就好了,但是还是要写的。
嵌入式中最常考的就是
(1)运算符优先级,实在记不下来,每次去前看一遍(没办法,人家非要考)
(2)用变量a 给出下面的定义(《程序员面试宝典》,后面很多 题都是其中的),注意a)一个指向有10 个整型数数组的指针 b)一 个指向函数的指针,该函数有一个整型参数并返回一个整型数 c)一 个有10 个指针的数组,该指针指向一个函数,该函数有一个整型参 数并返回一个整型数
(3)结构体占用内存空间大小的计算,然后优化;考察内存对齐(为什么要对齐?),其实不同编译器,不同平台都是有差别的,但 既然要考,把基本的弄清楚。
(4)剩下的对const 的理解,#define 和inline 的区别,typedef、volatile 的理解使用以及值传递、地址传递,内存空间分配(堆栈)
等宝典上都有。
(5)这里加两个代码的:a)CPU 大小端的判断(要理解)
[cpp]
1.int check_endian(){
2.union w{
3.int a;
4.char b;
5.}
6.c.a = 1;
7.return(c.b == 1)
8.}
b)求二进制数中1 的个数(《编程之美》),这个很常用,是一 些问题的基础,其中a 是要求1 个数的数
[cpp]
1.int num = 0;
2.while(a){
3.a &=(a-1);
4.num++;
5.}
6.return num;
(6)Java 中主要涉及接口、抽象类的理解,异常处理机制
(7)对内存回收时机的考察(恰当时候,不是一定回收),finalize的执行,顺带的可以和final、finally 的理解一起出现,而且注意 finally 即使在return 后面,也照样执行;有些公司考到内存的分 代回收,可以了解下。
(8)字符串常量池的理解,题目的话就是结合new 创建对象和==、equal,问你创建了几个对象,判断两个对象是否相同,一般记住new 肯定创建新的引用,而是否指向同一个字符串用==无法判断,而单独 声明String 对象,那么就没有新创建对象。
(9)String 类的+操作,StringBuild 的优化和StringBuffer 的 区别,相类似的对各种容器的区别理解(List,Set,Map),而且会 说到线程安全SynchronizedMap 和ConcurrentHashMap 的区别;至于 真的考察Java 中I/O 类的联合使用,那就靠自己的经验了。
(10)内部类、泛型、反射好好看看《Java 编程思想》,基本应 该能搞定。而且你还会看到是否有sizeof,线程之间的协作问题等 等。
面试
不管答案怎样,面试的心态和表达技巧一定要多学习,不要
仅仅回答是或否,要有条理的展开,否则一个小时左右的面试会有各 种各样的问题,总有你答的不好的;面试是个人和人交流的过程,但 是简单基础的问题千万别错,否则后面一点机会没有。
(1)必问:进程间通信、写个擅长的排序或者网络公司问个TCP、UDP 区别,其实可以从问你DNS、HTTP、Ping 等属于哪一层,底层是 基于传输层的什么来考察你的;还有就是各种权限相关的,序列化相
关,C++的虚函数实现,Java 的内存回收机制,强调的是要用自己的 话说出来,尽量不要去背。嵌入式的基本nand nor Flash 的区别以 及笔试中的大小端、宏定义、断言等问题也常在面试中出现。
(2)常问在《编程之美》上的如摸石头的游戏3 篇,求二进制 数中1 的个数,寻找最大的K 个数,斐波那契(Fibonacci)数列,数组相关的如 求数组的子数组之和的最大值,求数组中最长递增子 序列 以及 桶中取黑白球等,很多是原题,也有就是以此为基础来做 的; 比如百万级数量的IP 段,一个区段对应一个地方(比如北京,西安之类),给一个IP 查找确定是哪个地方
(3)设计模式 23 个常用的要了解一下,单例模式要会实现,看 看我推荐的书应该问题也不大的。
(4)Android 相关的也是些框架的理解,进程间通信,四大组件 的理解使用,从这些问题上看看你到底用到、学习到一个什么样程度,对错估计不是特别在意的。
(5)非技术性的就是些项目难点,收获,感受,你的优势,证明 你的能力之类,还有就是你期望的工作环境、氛围,职业规划,理想; 有时会遇到压力的优缺点,把一个MP3 推销给聋子等问题。补充一下 的是,有时候会从你做的项目中问你对产品的思考,包括UI、功能 实现,性能优化等等。面试还是针对公司的特点,多看以往的面经比 较好。
最后要说的是不管你大
二、大三,研
一、研二,其实对于找
篇3:程序员面试攻略 (原书第3版)
出版时间:2014-01-01
ISBN:9787111444343
所属分类:
图书>计算机与互联网>编程语言与程序设计
顶级软件公司的程序设计面试通常是很艰难的, 即使是非常优秀的程序员, 如果没有经历过这类面试并进行充分的准备, 也很难通过。拥有扎实的编程技能和丰富的计算机基础知识通常还不足以让你轻松通过这类面试, 你还需要掌握面试中的沟通技巧与答题技巧。这样才能在有限的面试时间中让面试官了解你的真实能力。
本书深入探究了顶级软件公司的程序设计面试过程, 并且对可能出现的面试题目进行了分类汇总, 引导你学习解决各类问题的方法.而不是通过罗列大量面试问题, 通过死记硬背来教你准备程序设计面试。此外, 由于程序设计题目干变万化, 通过死记硬背不能给你通过面试带来实质性的帮助。
篇4:浅析个人所得税程序法的完善
基于以上理论,笔者认为,我国应将个人所得税划归为中央税,原因有三:(1)提高工作效率。从效率原则来看,个人所得的征税对象是个人的所得,而个人所得的取得地经常会随着个人的流动而无法固定。随着市场经济的进一步发展和经济全球化的深入,个人的流动性会越来越强,其所得的所在地涉及的范围会越来越广。个人所得税归为中央税,会减少税收征管的障碍,降低纳税人偷税、逃税的概率。(2)有利于“宽税基”目标的实现。从适应原则来看,个人所得税的税基是很宽泛的,即便现在我国的个人所得税还不很完善,可未来的发展趋势也是会往“宽税基”方向发展。个人所得税如仍由地税局征管,会难以适应。(3)促进税收公平,实现地区经济的均衡发展。从恰当原则来看,个人所得税具有调节个人收入分配不公的功能,如由地税局征管,会造成同一收入的两个纳税人由于居住地的不同而负担不同的税收,难以有效发挥其本身应有的作用。
进一步完善个人所得税双向申报制度
我国个人所得税申报制度虽确定为双向申报,但实施效果却不尽理想。扣缴义务人的隐瞒申报、高收入个人的隐瞒申报都让双向申报制度大打折扣。因此,对二者均须完善相关法律规定来保证双向申报的有效实施。
1、完善代扣代缴制度。制定扣缴义务人对个人收入支付申报的具体规章,明确规定凡是向个人支付收入的扣缴义务人,必须向税务机关申报有关资料信息;凡是向个人支付工资以外的各种名目的现金、实物、有价证券等,如果单位不向税务机关进行申报,也不进行代扣代缴,那么不得计入成本费用。
2、完善纳税申报制度。要充分实现纳税申报制度必须有一系列配套制度的支持,如个人收入控制体系,个人财产登记制度,个人社会信用制度等。同时,税务机关还应将纳税人自行申报的信息与已掌握的信息进行交叉稽核,以确定纳税人申报信息的准确性。对此,我国可以借鉴世界通行的“蓝色”申报支队,即对能如实申报的纳税人采用蓝色标记的申报表进行申报,在费用、损失和扣除方面给与更多的优惠;反之则用“白色”普通申报方式,这是西方国家为了鼓励纳税人如实申报,自觉纳税而采取的一项行之有效的措施。
3、严格违法代扣代缴义务人和纳税申报人的法律责任。对扣缴义务人不履行或没有完全履行扣缴义务的,追究民事责任,如由扣缴义务人承担履行扣缴义务范围内的税款的缴纳;对严重不履行义务的扣缴义务机关的主要负责人,虚假申报情节严重的纳税人追究其刑事责任等。
4、建立第三方协助申报制度。所谓第三方协助申报制度,是指征缴个人所得税双方以外的个人或机构,如果掌握了有关某一方收入的信息,应及时提供给税务机关的制度。比如,房产部门能够掌握大量纳税人购房、卖方的信息,其中体现了大量的收入所得,此时房产部门应作为协助申报人,向纳税机关汇报相关信息。
完善个人所得税税源监管
实现税收信息化
在现代信息社会,随着计算机及因特网在征管工作的普及,实行税收的信息化管理已成为一种必然趋势。20 世纪六十年代,美国的计算机征管网络已覆盖全国,税务登记、纳税申报、税款征收、税务稽查等工作都已实行网络化。目前,国内收入局的网站能为纳税人提供许多有关税收方面的信息,纳税事宜也可在网上进行,电子服务报税已在许多纳税人当中得到推广。
完善个人财富实名制,实现交易非货币化
1、完善个人财富实名制。2000年,我国实行储蓄存款实名制,这为税务机关了解纳税人的个人收入情况发挥了积极的作用。可是,随着经济的不断发展,纳税人的收入结构呈现多元化、多渠道趋势发展,存款实名制已远远不够,需要将实名制推广到个人财富的各个领域。目前,个人的许多财产都处于隐蔽状态,这就为国家税款的流失埋下隐患。笔者认为,各级税务机关应该加大对高收入行业和个人的监督力度,为其设档归类,特别是数额较大的财产,都要用真实姓名登记、存档。档案材料应当彻底了解其生产经营规模、人员数量、收益情况及工资、薪金的发放渠道等信息。这样,税务机关就能通过这些档案材料,详细了解一定时期高收入者的财产来源、财产变动情况及纳税情况等信息,以期能更好地查漏补缺,最大限度地避免偷税、漏税等现象的重复发生。
2、实现交易非货币化。个人财富实名制成熟后,应逐步实现交易非货币化。个人所得税收的流失,很大程度上是因为税务机关对纳税人的财产情况不了解。如果纳税人的交易都是通过银行进行,实行非货币化,将有助于税务机关掌控纳税人的财产情况,也降低纳税人的交易风险。笔者认为,可以广泛推行信用卡支付制度,鼓励纳税人刷卡消费。国家应该规定,服务性行业都应该配有刷卡机,以便纳税人刷卡消费。
建立纳税人信用等级制度
诚实守信是做人的基本原则,税收领域也是如此。可要每位纳税人都诚实守信,也不是一件容易的事情。因此,有必要建立纳税人信用等级制度。税务机关应将纳税人分成不同的信用等级,考核标准为纳税人历年的税务登记、税收申报、税款缴纳、发票管理、税务检查等。根据纳税人的不同等级适用不同的税收管理:对于信用等级高的纳税人,实行简易管理程序,并且给予税收奖励;对于信用等级低的纳税人,要重点监控,并且给予税收惩罚。
(作者单位:中国铁路物资北京有限公司)
篇5:程序员面试技巧总结
面试问题:
1、你曾解决的一个有趣的技术问题
2、你曾克服的一个人际冲突
3、显示领导力或个人能力的例子
4、你曾在以往项目中做出的贡献
5、最喜欢的语言的一些琐事,对这种语言你做了什么,以及你不喜欢它哪里
6、有关公司产品/业务的问题
7、关于该公司的工程策略(测试,Scrum,等等)
热爱技术。表达你对你所做的一切感到骄傲,你对自己的选择充满自信,你对语言和工作流有着自己的看法。
沟通
涉及到编码问题的时候,沟通是关键。一个在工作时需要帮助却能和人正确沟通的求职者比那些能轻松解决问题的求职者甚至更好。
了解这是哪种问题。有两种类型的问题:
1、编码。面试官希望你能针对问题写出简洁高效的代码。
2、闲聊。面试官希望能和你聊一聊。话题通常是(1)高水平的系统设计(“如何克隆Twitter?”)或(2)琐事(“Javascript中的hoisting是什么意思?”)。有时候这些琐事中也会引入“实际”问题,例如,“如何迅速排序整数列?好的,如果不是整数,是其他类型的呢…… ”。
如果你开始编写代码,并且面试官并不想多说废话,只想尽快过渡到“实际”问题,那么如果你罗哩叭嗦太多的话,她可能会觉得厌烦。不妨直接问,“是不是为这个问题写代码?”
让人感觉你有团队精神。面试官想知道和你一起工作是什么感觉,会有什么问题,所以要让他们看到你的团队合作性。使用“我们”来代替“我”,例如,“如果那个时候我们做广度优先搜索的话,就能及时/准时得到解决方案。”如果让你选择在纸上还是在白板上编码的话,选白板。这样,你就可以接近面试官,直接面对他提出的问题(而不是和她在桌子两边遥遥相望)。
把自己的想法大声说出来。不是开玩笑,比如说:“我不知道这样做是否有效――但请让我试一试。”如果你不知道怎么办,不知道这个问题该如何解决,那么就说一说你现在的想法。说一说你认为怎么做可能会有效。说一说你认为哪些会有用,以及为什么没用的原因。这同样适用于琐碎的闲聊问题。当面试官要求你解释Javascript闭包的时候,“这与范围有关,不妨把它放到一个函数中”可能会让你得到90%的分数。
不知为不知。如果正在谈论的话题(例如,具体的语言事务,具体的琐事,运行时分析)的确是你不曾涉猎的内容,那么不要不懂装懂。相反,你可以直接说:“我不知道,但我猜$thing,因为……”,因为后面可以通过分析排除其他选项,还可以拿其他语言或问题做例子。
说话不要不经大脑。不要自信地将答案脱口而出。如果是正确的,那么你还是需要时间来考虑如何解释,如果是错的,那会显得你冲动鲁莽。你不是在和人比速度,而且你这么做更有可能因为打断她的话或者妄下结论而惹恼她。
摆脱困境
有时候你会陷入僵局。放松。这并不意味着你已经失败了。请记住,面试官通常更在乎的,是你能否巧妙地从几个不同的角度去揭示问题,而不是一根筋走到底地坚持正确答案。
画图。不要浪费时间在脑袋里思考,可以画到板上。画出几个不同的测试输入。画出你如何手动如愿得到所需的输出。然后想想将你的方法转换成代码。
解决问题的简单版本。不知道如何找到集合中的第4大条目?那么想想如何找到第1大条目,然后试试能否沿用这种方法。
写一个简洁低效的解决方案,然后对其进行优化。竭尽全力。尽一切可能的方法得到某种答案。
讲讲自己的思路。讲一讲你知道什么。讲一讲你认为什么可能工作以及为什么无效的原因。你可能突然会意识到它实际上是可以工作的,或修改版本是有效的。也有可能,你会得到提示。
等待提示。不要用期待的眼光盯着面试官,但可以有短暂的“思考”时间――面试官或许已经决定给你个提示也说不定呢,等待她的提示以免打断她。
考虑空间和运行时的界限。如果你不知道你是否可以优化解决方案,那么就说出来。例如:
“我必须至少看看所有的条目,我做不到时间复杂度比O(n)还好的了。”
“蛮力方法才能检验所有的可能性。”
“答案将包含n^2数据项,所以我必须至少花费N^2的时间。”
写下你的思路想法
凭空地想很容易自我矛盾。把你的想法写下来,然后再去考虑细节。
调用帮助函数,继续前进。如果你不能或多或少地马上想出如何实现算法,那就跳过它。写一个命名合理的调用函数,例如:“this will do X”,然后继续下一步骤。如果帮助函数非常微不足道,你甚至可以将它忽略。
不要担心语法。不妨一笑而过。如果你非要考虑语法,那就还原到英语。只要向面试官说明稍后会回来整理即可。
预备足够的空间。你可能后面会想要在代码行之间添加代码或笔记。从白板的顶部开始写,并在每一行之间留一条空白。
最后写一个重头检查的标志。不要担心你写的for循环是否应该有“<”或“<=”。在代码的最后画个勾选提醒自己最后再检查一遍。先按自己的思路走。
使用描述性的变量名。想名字需要时间,但可以防止你忘记自己写某段代码的目的。使用names_to_phone_nums_map而不是nums。在名称中说明类型。返回布尔值的函数应该以“is_ *”,保存列表的Vars应该以“s”结尾。标准化很有意义。
完成之后的整理
浏览解决方案,大声地讲,输入一个例子。当程序运行时记录下变量保存的值――如果你只是记在脑子里,不会让你赢得任何加分。这有助于你发现bug和消除面试官的困惑。
寻找差一错误。你的for循环是不是应该使用“<=”来代替“<”?
测试边缘情况。措施包括空集合,单项目集合或负数。加分点:提一提单元测试!
不要惹人厌烦。有的面试官可能并不在意这些整理步骤。如果你不确定,可以这样说,“我通常会检测一些边缘情况――那么我们接下来是不是做这个呢?“
实践
最后,运行实践问题是没有捷径的。
好记性不如烂笔头。对自己诚实。用笔写可能一开始会让你觉得别扭。但是如果你现在就能克服这个难题,那么当面试的时候,你就不会觉得笨拙和不顺手了。
篇6:程序员个人面试总结
简述Java的基本历史
java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机、冰箱等
简单写出Java特点,写出5个以上,越多越好
简单的、面向对象的、分布式的、安全的、稳定的、与平台无关的、可解释的、多线的、动态的语言。
什么是Java? JAVA:一种编程语言
一种开发环境
一种应用环境
一种部署环境
请写出Java的版本分类,以及每种版本的应用方向 三种版本:
JME:是面向内存有限的移动终端.为消费性产品设计的;
JSE: 是SUN公司针对桌面开发和低端商务计算方案开发的版本。为笔记本电脑、PC机设计的;
JEE: 是一种利用JAVA 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。为企业级的、服务器端的高端应用而设计的;
描述Java技术的主要特性 java虚拟机
垃圾回收
代码安全性
描述 Java虚拟机的功能
(1)通过 ClassLoader 寻找和装载 class 文件
(2)解释字节码成为指令并执行,提供 class 文件的运行环境
(3)进行运行期间垃圾回收
(4)提供与硬件交互的平台
简述Java代码安全性(1)编译时的错误检验
(2)类装载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马“的应用
(3)字节码校验
(4)沙箱机制,限定访问权限
描述Java垃圾回收机制
Java 编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。在 Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在 Java 技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃。
垃圾回收有以下特点:
(1)垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。
(2)有一些跟垃圾回收相关的方法,比如:System.gc(),调用这些方法,仅仅是在通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。
(3)程序员可以通过设置对象为 null,来标示某个对象不再被需要了,这只是表示这个对象可以被回收了,并不是马上被回收。
简述Java代码的运行过程
(1)加载代码 通过类装载器装载CLASS文件
(2)校验代码 由字节码校验
(3)执行代码 由解释器将字节码转换成机器码
简述如何搭建Java开发环境 首先下载安装JDK 然后配置环境
(1)配置PATH,(2)配置CLASSPATH
(3)配置JAVA_HOME
简述classpath,path,JAVA_HOME的意义和配置方法 path 操作系统运行环境的路径
classpath JAVA运行应用程序时所需要的类包的路径
JAVA_HOME 供需要运行JAVA的程序使用
请描述:一个完整的Java文件的代码分几个部分,每部分都起什么作用,大致的写法 package 当前类所在位置
import 当前类运行时所需要的包或类
public class 类名 {
属性定义;
方法定义:
构造方法定义;
public static void main(String args [])例外{ 程序入口 语句;} }
//注释
Java代码的注释有几种?分别举例说明(1)// 单行注解
(2)/* */ 块注释
(3)/* *
* 文档注释
*/
什么是Java代码的语句,什么是Java代码的块,举例说明 语句 是一行以分号终止的代码,例:int a;
块 是以{ }为边界的一些语句的集合 例:public void tt(){}
什么是标示符?
标识符:是赋予变量、类、方法的名称。
标示符定义的规则?
首字母只能以字母、下划线、$开头,其后可以跟字母’下划线、$和数字配置CLASSPATH 首字母小写中间用大写字母隔开 标识符具有一定的含义
什么是关键字?
关键字就是编程语言与机器语言的编码约定
true、false、null、sizeof、goto、const那些是Java关键字 true、false、null 为JAVA的关键字
Java的基本数据类型有几种?分别是? short int long boolean float double char byte
请写出每种基本类型的默认值?取值范围?分别给出一个定义的例子 默认值
取值范围 示例
字节型 : 0-2^7—-2^7-1 byte b=10;
字符型 : ‘ u0000′ 0—-2^16-1 char c=’c’;
short : 0-2^15—-2^15-1 short s=10;
int : 0-2^31—-2^31-1 int i=10;
long : 0-2^63—-2^63-1 long o=10L;
float : 0.0f-2^31—-2^31-1 float f=10.0F
double : 0.0d-2^63—-2^63-1 double d=10.0;
boolean: false truefalse boolean flag=true;
在基本类型中,如果不明确指定,整数型的默认是什么类型?带小数的默认是什么类型? 整数类型 默认为 int
带小数的默认为 double
如何定义float类型和long型 float f = 1.2f
long l = 1.2L
什么是变量?
变量是用来引用一块内存区域或一个值,用标识符来表示,可以通过操作变量来操作变量所对应的内存区域或值块的值。
变量的定义规则?
以字母、$、下划线开头,其后可以跟字母、下划线、$和数字; 首字母小写,中间单词用大写字母隔开; 名称具有一定含义;
请写出Java编码约定中对下列部分的要求:类、属性、方法、包、文件名、变量、常量、控制结构、语句行、注释
类: 一个类文件中类名要和文件名相同,类名一定要以大写字母开头,单词之间用大写字母分隔
属性: 属性名首字母小写,中间用大写字母隔开。
方法: 方法名首字母小写,中间用大写字母隔开。
包: 引用包必须写在类文件的开头,有且只能有一个包,全部用小写字母。
控制结构:当语句是控制结构的一部分时,即使是单个语句,也应使用大括号将语句封闭。
语句行:每行只写一个语句,并使用四个缩进的空格,使代码更易读,注意用分号结束。
注释: 用注释来说明那些不明显代码的段落。
常量: 常量名一般用大写字母,单词之间用下划线分隔,一旦赋值不允许修改。
什么是Javadoc? 按照一定格式生成程序的文档的工具。
什么是引用类型?
用户定义类型, 它可引用类和数组。
除去基本数据类型的其他类型都是引用数据类型。
什么是按值传递?什么是按引用传递?
按值传递:就是将该值的副本传过去(基本数据类型+String类型的传递,就是按值传递)
按引用传递:就是将值的内存地址传过去(除基本数据类型+String以外类型的传递,就是引用传递)
如何创建一个新对象?如何使用对象中的属性和方法? 使用new 关键字来创建一个新的对象;
通过对象的实例用”.“(点)来调用对象中的属性和方法;
静态的方法和属性,也可以直接用类名”.“(点)来调用;
简述new关键字所做的工作
new 创建一个对象,并为对象分配一块内存。
简述”=” 和”= =”的功能和区别 “=” 赋值,“= =”当比较基本数据类型的时候,判断前后两个值是否相等;
当比较引用数据类型的时候,判断= =前后两个值的内存地址是否相等;
区别:
= :为赋值表达式
= = :为逻辑表达式
什么是实例变量?什么是局部变量?什么是类变量?什么是final变量?
实例变量:
类中定义的变量,即类成员变量,如果没有初始化,会有默认值;
局部变量:
在方法中定义的变量,必须初始化;
类变量:
用static修饰的属性;
final变量:
用final 修饰的变量,简述上述各种变量的定义规则和使用规则?
实例变量: 不需要static关键字来声明,需要类的实例(对象)调用(用”.“);
类变量: 用static修饰,可以用类名调用,也可以用类的实例调用;
局部变量: 在方法内任意定义变量即为局部变量;
final变量: 一旦赋值,不可以再修改的变量;
final属性只允许赋值一次,且只能通过构造方法赋值,定义后也就是一个常量;
final修饰的变量,只允许赋值一次
a++和++a的区别?
a++ : 先使用,后加1
++a : 先加1,后使用
请描述instanceof、?:、&、&&各自的功能
instanceof :用来判断某个实例变量是否属于某种类的类型。
? : 三目运算符:
表达式1?表达式2:表达式3
如果表达式1为true,执行表达式2,否则执行表达式3
&: 位运算:按位与 |
&&: 逻辑运算:逻辑与
请描述>>、<<、>>>的功能
10>>4 :算术或符号右移位运算符
<< :算术或符号左移位运算符 >>> :逻辑或无符号右移位运算符
请描述什么是强制类型转换?什么是自动类型转换?什么是向上造型?并分别举例说明 强制类型转换:在一个类型前面加(),来强制转换
long l = 9L;
int i =(int)l;
自动类型转换:
int i = 5;
String str = “”+i;
向上造型:把范围小的造型为范围大的类型:
int i = 2;
long l = i;
请写出完整的if条件控制语句的结构 if(布尔表达式){ 语句
}else{
语句
}
请写出完整的switch语句的结构 switch(字符){
case 字符: 语句
break;
case 字符: 语句
break;
default:语句
}
请写出完整的for语句的结构 for(初始语句;条件语句;步长){ }
请写出完整的while语句的结构 while(boolean语句){ }
请写出完整的do while语句的结构 do{
}while(boolean语句);
请描述break 和 continue的功能和用法 break:终止(跳出)最近的循环
continue:跳出本次循环,执行下一次循环
定义一个一维的int数组,先创建它,并初始化它,给它赋值,然后输出其中的一个值 public class Arr{
public static void main(String args[]){ int a[] = new int[5];
a={1,2,3,4,5};//错误 , 只能在初始化时这样做
a[0]=1;
a[1]=2;
System.out.println(a[0]);} }
定义一个一维的A类型数组,直接定义并赋值,然后输出其中的一个值 public class A{
public static int i;
public static void main(String args[]){
A aa = new A();
A bb = new A();
A a[] = {aa,bb};
a[0].i=2;
System.out.println(a[0]);} }
把上面的数组改成2维的数组 public class A{
public static int i;public static void main(String args[]){
A a[ ][ ] = new A[5][5];
a[0][0].i=2;
System.out.println(a[0][0]);} }
举例说明数组拷贝方法的使用:arraycopy方法 public class A{
public static void main(String args[]){
int a[] = new int[5];
int b[] = new int[5];
System.arraycopy(a[5],0,b[5],0,a.length)
System.out.println(b[0][0]);} }
什么是构造和析构方法?功能是?
构造方法:每个类至少有一个构造方法,类初始化时调用的方法
1.方法名和类名相同
2.无返回值类型
格式:访问权限 类名(参数列表){};
1.自己定义构造后,就没有默认的构造方法 2.无构造方法时,默认为空参的构造方法(无参数,方法体为空)析构方法:finalize
类销毁时,自动调用方法
当对象在内存中被删除时,自动调用该方法
在此方法中可以写回收对象内部的动态空间的代码
简述Java的访问修饰符类型?分别有什么功能? public 公开的,任何一个类都有可以访问
protected 同包同类,只可被它的子类访问
default 只能被同一个包中类访问
private 私有的,只能在本类中被访问
分别说明:在类上、在属性上、在方法上能使用哪些访问修饰符 在类上:public default final
在方法上: 访问权限:public protected private default
方法修饰符:static final
返回类型:void
在属性上:public protected private default
static final
简述什么是包?包的功能
包:对所定义的多个JAVA类进行分组,将多个功能相关的类定义到一个包(文件)中。
功能:1.易于查找和使用适当的类
2.包不止包含类和接口,还可以包含其它包,形成层次的包空间
3.有助于避免命名冲突
请写出5个以上的JDK中的包,以及他们的基本功能
java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面
java.lang: 提供java编成语言的程序设计的基础类
java.io:
包含提供多种输出输入功能的类,java.net:
包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET,java.applet: 包含java小应用程序的类
java.util:
包含一些实用性的类
什么是包装类?Java中都有哪些包装类
在JDK中针对各种基本类型分别定义相应的引用类型 ————–称为封装类 Boolean Byte Short Integer Long Float Double Character
OOP(面向对象)语言的三大特征是? 封装性,继承性,多态性
分别表述类的三大特性及其他们的功能
封装:隐藏类的实现细节、迫使用户去使用一个接口去访问数据、使代码更好维护
继承:子类可以直接继承使用父类的方法,程序员只需要做的是定义额外特征或规定将适用的变化
多态性:同一个行为具有多个不同表现形式或形态的能力
如何实现继承?继承的规则? public class A extends B{ }
单继承性
构造方法不能继承
super引用父类,调用父类的属性,方法
当子类中出现与父类的方法名,返回类型,参数列表相同的方法时要覆盖此方法 简述this和super的功能和用法 this :
能访问除构造方法以外所有的属性、方法,通过this.来调用方法和属性 不可以在静态方法中使用,在调用其它构造方法时,必须放在该构造方法的第一行
在构造方法中使用this(参数列表),相当于调用本类的其它构造方法,它必须作为构造方法的第一句
super :访问父类
super.点取父类中被子类隐藏的方法和属性,通过 super(参数列表)来调用父类的属性和方法,在调用父类的构造方法时必须放在子类构造方法里的第一行;
如何确定在多态的调用中,究竟是调用的那个方法? new的是哪一个类就是调用的哪个类的方法。
请描述方法定义的完整的语法结构
权限修饰符 修饰符 返回类型 方法名(参数)例外{
方法体;}
什么是重载?
在一个类中出现方法名相同,但参数列表不同时,这种情况就是重载。
简述重载的规则 方法名称必须相同;
参数列表必须不同(个数不同,或类型不同,或参数排列顺序不同); 与返回类型无关;
什么是方法的覆盖?什么情况下出现? 方法覆盖:
子类可以修改从父类继承过来的行为,也就是说子类可以创建一个与父类方法有不同功能的方法,但具有相同的:名称、返回类型名和参数列表。
在父子类的情况下出现时。
方法覆盖的规则?
方法名要和父类中被覆盖的方法名相同,返回类型相同,参数列表相同。访问权限要大于等于被覆盖方法的权限。例外列表要小于等于被覆盖方法的例外列表。
static修饰符的功能是?可以用在什么地方?怎么访问? static 修饰符功能:
共用一块内存区域,也就是用static修饰的变量或成员方法对所有类的实例都是相同的 静态成员方法和静态变量的优点在于他们能在没有创建类的任何一个实例的情况下被引用。可以用在方法或属性上 访问方式:
直接使用类名调用
new 一个实例,用实例调用
static的基本规则
类中的静态方法只可以调用静态的属性和方法,不允许调用非静态的属性和方法。静态变量为类变量,可以用类名直接调用静态的属性和方法。静态方法中不允许出现this和super 构造方法不允许声明static 非静态变量为实例变量,通过实例调用 静态方法不能被非静态方法覆盖
final修饰符的功能是?可以用在什么地方? 功能:final标记所有通用的功能,不能随意更改
可以用在类、属性和方法上
final的基本规则
final修饰的类不能被继承
final修饰的成员变量只允许赋值一次,且只能通过构造方法里赋值。final修饰的局部变量即为常量,只能赋值一次。final修饰的方法不允许被子类覆盖。
什么是抽象方法,什么是抽象类
用abstract修饰的方法,只有方法的声明,而没有方法的实现,就叫抽象方法。
用abstract修饰的类,就叫抽象类。
抽象类的规则
抽象类内部可以没有抽象方法 必须用abstract修饰
不能够直接使用抽象类,必须通过子类继承并且实现 抽象方法不允许被private修饰
什么情况下使用抽象类
当一个类的一个或多个方法是抽象方法时;
当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时; 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时;
equals方法和”= =”的功能和区别 功能:判断对象是否相等
区别:
equals方法比较的是对象的值
= =:比较的是对象值的内存地址,对基本数据类型来说= =比较的是数值
toString方法的功能和基本写法 返回一个String类型
public String toString(){
return “”;
}
String的方法的功能和基本使用方法,请描述5个以上
substring(参数1,参数2);功能:取字符串中参数1到参数2的的所有字符;“String”.subString(0,1);
replace(参数1,参数2);功能:用参数1中的值替换字符串中所有参数2的值 “String”.replace(ing,tt);
equals();功能:判断两个字符串是否相等 “String”.equals(“tt”);trim();功能:去掉字符串两边的空格 “String”.trim();
indexof();功能:查找字符串中参数所在位置,并返回字符串第一个出该参数的下标
“String”.indexOf(“ing”);
split();功能:根据参数分割该字符串 “String”.split(“-”);
为什么使用StringBuffer类?有什么功能和优点? –只创建一个对象
–StringBuffer 对象的内容是可以被修改的
–除了字符的长度之外,还有容量的概念
–通过动态改变容量的大小,加速字符管理
举例说明如何使用StringBuffer StringBuffer sb = new StringBuffer();
sb.append(“aaa”);
如何使用Java读写系统属性? 读:
Properties props = System.getProperties();
Enumeration prop_names = props.propertyNames();
while(prop_names.hasMoreElements()){
String prop_name =(String)prop_names.nextElement();
String property = props.getProperty(prop_name);
System.out.println(“Property ‘” + prop_name + “‘ is ‘”+ property + “‘”);}
写:
System.setProperties(props);
简述properties文件的结构和基本用法
结构:扩展名为properties的文件,内容为key、value的映射,例如”a=2″
用法:
public class Test {
public static void main(String args[]){ try {
String name = “test.properties”;
InputStream in = new BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();
p.load(in);
System.out.println(“a的值==” + p.getProperty(“a”));
} catch(Exception err){
err.printStackTrace();} } }
什么是接口?接口的定义规则?
接口是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
public interface Tt {
public void outPut();
public int tt();}
接口的作用?为什么使用接口? 多重继承
封装、隔离
功能,实现的分离
多态
便于后期维护
接口是可插入性的保证。
什么是多重接口
就是一个类实现多个接口
描述接口的基本思想? 封装 隔离
接口及相关机制的最基本作用在于:通过接口可以实现不相关类的相同行为,而不需考虑这些类之间的层次关系。
根据接口可以了解对象的交互界面,而不需了解对象所属的类。
面向对象程序设计讲究”提高内聚,降低耦合”。
如何在代码中使用接口?
public class MyCast implements Tt{
public void outPut(){}
public int tt(){
return 0;} }
举例说明如何把接口当作类型使用 public interface Animal(){
public void tt();}
public class Dog implements Animal{
public void tt(){} }
Animal ani = new Dog();
如何选择接口和抽象类?为什么? 优先选用接口,尽量少用抽象类
在下列情况下选择抽象类:需要定义子类的行为,又要为子类提供共性的功能。
什么是异常,异常的分类?
程序中导致程序中断的一些情况叫做异常,一般程序员可以处理。
异常分为运行时异常和非运行时异常(一般异常)
运行时异常是指因设计或实现方式不当导致的问题。也可以说,是程序员的原因导致的,本来可以避免发生的情况。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出现这些异常的代码不需要try块包围。
非运行时异常是指除运行时异常以外所有的异常,出现这些异常的代码必须用try块包围。例如:FileNotFoundException,EOFException,简述处理异常的两种方式?
抛出(throws)和catch语句处理
简述try块的功能和规则
try块内部一般写一些编程人员认为可能会出现异常的代码,使程序运行时不会因为出现异常而中断。
简述catch块的功能和规则
功能:可以截获所声明的异常,并在语句块内对其进行处理
规则:catch(Exeption e){
e.printStackTrace();
}
简述finally块的功能和规则
finally块一般写一些不论是否发生异常都必须执行一次的代码
例如关闭与数据库的连接等
简述throw和throws的功能和使用方法 throw 指编程人员主动抛出一个异常
throw new NullPointerExeption();
throws指程序遇到异常情况自动的被动抛出一个异常
public void test()throws Exeption{}
异常的分类? 错误(Error): JVM 系统内部错误、资源耗尽等严重情况,程序员不可控制
例外(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,程序可以控制
什么是预定义异常
java程序中预先定义好的异常叫做预定义异常
简述自定义异常的规则 写一个类继承Exception
用户自定义异常通常属Exception范畴,依据惯例,应以Exception结尾,应该由人工创建并抛出。
什么是断言?
用来证明和测试程序的假设。
如何使用断言?举例说明
一种是assert<<布尔表达式>>;另一种是assert<<布尔表达式>>:<<细节描述>>。
assert a= =10 : “这里a等于10″;
集合框架
什么是集合?什么是元素? 可以包含其他对象的简单对象就叫集合
集合框架中所包含的对象就叫做元素
描述出Java集合框架中集合的接口关系 Collection—-Set和List
Set—-HashSet和SortedSet
List—-ArrayList和LinkedList
Map—-HashMap、SortedMap和TreeMap
代码示例:Collection接口的使用,包括如何定义、初始化、赋值、取值、修改值除值 Collection col = new ArrayList();
String oldValue = “abcd”;
String newValue = “1234″;
//增加
col.add(oldValue);
Iterator it = col.iterator();
while(it.hasNext()){
//取值
String str =(String)it.next();
if(str.equals(oldValue)){
//删除
col.remove(oldValue);//修改
col.add(newValue);} }
代码示例:List接口的使用,包括如何定义、初始化、赋值、取值、修改值、删值 List col = new ArrayList();
String oldValue = “abcd”;
String newValue = “1234″;
col.add(oldValue);
Iterator it = col.iterator();
while(it.hasNext()){
String str =(String)it.next();
if(str.equals(oldValue)){
col.remove(oldValue);
col.add(newValue);} }
代码示例:Set接口的使用,包括如何定义、初始化、赋值、取值、修改值、删值 Set col = new HashSet();
String oldValue = “abcd”;
String newValue = “1234″;col.add(oldValue);
Iterator it = col.iterator();
while(it.hasNext()){
String str =(String)it.next();
if(str.equals(oldValue)){
col.remove(oldValue);
col.add(newValue);} }
代码示例:Map接口的使用,包括如何定义、初始化、赋值、取值、修改值、删 Map map = new HashMap();
String oldValue = “abcd”;
String newValue = “1234″;
//增加
map.put(“1″,oldValue);
Set set = map.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key =(String)it.next();
//取值
String value = map.get(key);}
//修改
map.put(“1″,newValue);
//删除
map.remove(“1″);}
描述List接口、Set接口和Map接口的特点 List接口中的对象按一定顺序排列,允许重复
Set接口中的对象没有顺序,但是不允许重复
Map接口中的对象是key、value的映射关系,key不允许重复
如何给集合排序? 实现comparable接口
IO 什么是流?可画图说明
流是要传输的数据在源和目的地之间运行的轨迹。
描述I/O流的基本接口和类的结构
代码示例:使用URL流,读取网页代码 import java.io.*;import java.net.URL;import java.net.URLConnection;public class ReadURL { public static void main(String[] args)throws Exception { URL url = new URL(“http://bbs.tarena.com.cn”);//建立封装统一资源定位符的类 URLConnection uc = url.openConnection();//打开连接
InputStreamReader isr = new InputStreamReader(uc.getInputStream());BufferedReader br = new BufferedReader(isr);
//传输数据 while(true){ String temp = br.readLine();if(temp==null){ break;} System.out.println(temp);} br.close();} }
什么是Unicode?
是一种字符的编码方式,占16位字节,Java 技术使用 Unicode 来表示字符串和字符。
代码示例:如何使用Reader和Writer来进行输入输出 //Writer写入操作
FileOutputStream fos=new FileOutputStream(“a.txt”);
OutputStreamWriter osw=new OutputStreamWriter(fos);
BufferedWriter bw=new BufferedWriter(osw);
bw.write(“欢迎来到java快车”);
bw.close();
//Reader读取操作
FileInputStream fis=new FileInputStream(“a.txt”);
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
String str=br.readLine();
System.out.println(str);
什么叫保持?什么是可序列化?如何实现可序列化?
将一个对象存放在某种类型的永久存储器上(比如硬盘,光盘,软盘等),称为保持。标识一个类可以被持久化,叫序列化,也叫串行化或持久化。表示这个类中的数据可以按流式输出。
实现可序列化的方法:实现java.io.Serializable接口。
代码示例:如何读写对象流 //读
try {
String str = “123″;
FileOutputStream f = new FileOutputStream(“test.txt”);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(str);
f.close();
}catch(Exception e){
e.printStackTrace();} //写
try {
FileInputStream f = new FileInputStream(“test.txt”);
ObjectInputStream s = new ObjectInputStream(f);
str =(String)s.readObject();
f.close();
}catch(Exception e){
e.printStackTrace();}
简述File类的基本功能
处理文件和获取文件信息;文件或文件夹的管理。
概括一句话就是:除了读写文件内容其他的都可以做。
代码示例:如何使用随机文件读写类来读写文件内容 RW表示文件时可读写的
读:
try{
RandomAccessFile f = new RandomAccessFile(“test.txt”, “rw”);
long len = 0L;
long allLen = f.length();
int i = 0;
while(len < allLen){
String s = f.readLine();
if(i > 0){
col.add(s);} i++;
//游标
len = f.getFilePointer();} }catch(Exception err){
err.printStackTrace();}
写:
try{
RandomAccessFile f = new RandomAccessFile(“test.txt”, “rw”);
StringBuffer buffer = new StringBuffer(“n”);
Iterator it = col.iterator();
while(it.hasNext()){
buffer.append(it.next()+ “n”);
}
f.writeUTF(buffer.toString());
}catch(Exception err){
err.printStackTrace();}
代码示例:如何使用流的基本接口来读写文件内容 try{
DataInputStream in =
new DataInputStream(new BufferedInputStream(new FileInputStream(“Test.java”)));
String currentLine=null;
while((currentLine = in.readLine())!= null){
System.out.println(currentLine);}
}catch(IOException e){
System.err.println(“Error: ” + e);
}
多线程
什么是线程? 轻量级的进程
线程的三个部分是? 处理机
代码
数据
为什么使用多线程 使UI响应更快
利用多处理器系统
简化建模
代码示例:Java中实现多线程的两种方式,包括如何定义多线程,如何使用多线程 实现Runnable接口
class Thread1 implements Runnable{
public void run(){
//run里一般写一个while(true)循环
System.out.println(“Runnable“);
} }
public class Test{
public static void main(String[] a){
Thread1 r = new Thread1();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
} }
继承Thread
class Thread2 extends Thread{
public void run(){
System.out.println(“extends“);} }
public class Test{
public static void main(String[] a){
Thread t = new Thread2();
t.start();
}
}
如何实现线程的调度?如何暂停一个线程的运行 调度用wait和notify,—-
sleep()
什么是线程的优先级
判断哪个线程先执行的级别
简述sleep方法和wait方法的功能和区别 sleep是让线程休眠一段时间
wait是让线程挂起
什么是守候线程
隐藏在后台持续运行的线程
什么是临界资源
指多个线程共享的资源
什么是互斥锁,Java中如何实现
用来保证在任一时刻只能有一个线程来访问临界资源的那个标记
在Java中使用
用在对象前面限制一段代码的执行
用在方法声明中,表示整个方法为同步方法。
什么是死锁?如何避免?
如果程序中有多个线程竞争多个资源,就可能会产生死锁。当一个线程等待由另一个线程持有的锁,而后者正在等待已被第一个线程持有的锁时,就会发生死锁。
要避免死锁,应该确保在获取多个锁时,在所有的线程中都以相同的顺序获取锁。尽量少用临界资源。
简述wait和notify,notifyAll的使用
被锁定的对象可以调用wait()方法,这将导致当前线程被阻塞并放弃该对象的互斥锁,即解除了wait()方法的当前对象的锁定状态,其他的线程就有机会访问该对象。
notify使等待队列上的一个线程离开阻塞状态
notifyAll使等待队列上的所有线程离开阻塞状态
Socket编程
什么是url?基本的格式是? 统一资源定位器
Http://:port
简述IP,Port,TCP的基本功能 IP代表网络位置
Port代表端口号
TCP可保证不同厂家生产的计算机能在共同网络环境下运行,解决异构网通信问题,是目前网络通信的基本协议
简述Java网络模型的基本功能 描述服务端和客户端的连接过程
简述Java网络编程究竟做些什么?如何做? 1.建立连接
2.准备输出的数据,流式输出
3.流式输入,编程业务需要的格式
4.关闭连接
服务器分配一个端口号。如果客户请求一个连接,服务器使用accept()方法打开socket连接。
客户在host的port端口建立连接。
服务器和客户使用InputStream和OutputStream进行通信。
代码示例:基于Socket编程 try {
ServerSocket s = new ServerSocket(8888);
while(true){
Socket s1 = s.accept();OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(“Hello,” +s1.getInetAddress()+ “port#” + s1.getPort()+ “nbye!”);
dos.close();
s1.close();}
}catch(IOException e){
System.out.println(“程序运行出错:” + e);}
TCP和UDP区别
TCP(传输控制协议)和UDP(用户数据报协议)是传输层协议
TCP是面向连接的可靠数据传输协议,能保证传输内容的完整和准确;数据传输的辅助开销大,效率低
UDP: 是无连接的,不可靠地传输协议,不能保证传输内容的完整和准确,对信息的适时要求比较高
设计模式
什么是设计模式?
就是经过实践验证的用来解决特定环境下特定问题的解决方案。
设计模式用来干什么? 寻找合适的对象
决定对象的粒度
指定对象的接口
描述对象的实现
运用复用机制
重复使用经过实践验证的正确的,用来解决某一类问题的解决方案来达到减少工作量、提高正确率等目的什么是对象粒度
对象中方法的大小就是粒度
基本的Java编程设计应遵循的规则? 面向接口编程,优先使用对象组合设计模式的应用范围
所能解决的特定的一类问题中
简述什么是单例模式,以及解决的问题,应用的环境,解决的方案,应用时应注意什么? 解决的问题:在任何时间内只有一个类实例存在的模式。
应用环境:需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式。
解决方案:保证一个类只有一个类实例存在。
本质:控制实例的数量。
注意:要合理的使用单例,避免单例成为瓶颈。
代码示例:单例模式的两种实现方法,并说明优缺点 public class Test{
private static Test test = new Test();
public Test(){
}
public static Test getInstance(){
return test;} }
public class Test{
private static Test test = null;
private Test(){
}
public static Test getInstance(){
if(test==null){
test = new Test();
}
return test;
} }
第一种方式:装载类的时候就创建类的实例,用空间换时间。
第二种方式:延迟装载,不需每次都创建一个类实例,而只是在第一次使用时创建,有效的利用资源,用时间换资源。
简述什么是工厂模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 利用工厂来解决接口选择的问题的模式。
应用环境:当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定,创建的对象时,就需要用到工厂模式。
解决方案:定义一个创建对象的类,在类的方法中决定具体实例化哪一个类。
本质:就是根据不同的情况来选择不同的实现类,重在选择。
代码示例:工厂模式的实现方法 单独是使用工厂:
public class Factory{
public static Sample creator(int which){
if(which==1){
return new SampleA();
}else if(which==2)
return new SampleB();
}
}
}
工厂+单例:
public class MyFactory{
public static MyFactory f = null;
public MyFactory(){ }
public static MyFactory getInstance(){
if(f==null){
f=new MyFactory();} }
public DBDAO getDAO(){
return new DBDAOImpl();} }
简述什么是值对象模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 用来把一组数据封装成一个对象的模式
解决问题:在远程方法的调用次数增加的时候,相关的应用程序性能将会有很大的下降
解决方案:使用值对象的时候,可以通过仅仅一次方法调用来取得整个对象,而不是使用多次方法调用以得到对象中每个域的数值
本质:封装数据。
代码示例:值对象模式的实现方法 步骤:
public class UserModel{
private String userId;
private String userName;
public void setUserId(String id){
this.userId = id;
}
public String getUserId(){
return userId;
}
public void setUserName(String name){
this.userName = name;
}
public String getUserName(){
return userName;
}
}
简述什么是DAO模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 数据访问对象
解决问题:根据数据源不同,数据访问也不同。根据存储的类型(关系数据库、面向对象数据库、纯文件等)和供应商实现不同,持久性存储(如数据库)的访问差别也很大。如何对存储层以外的模块屏蔽这些复杂性,以提供统一的调用存储实现。程序的分布式问题
解决方案:将数据访问逻辑抽象为特殊的资源,也就是说将系统资源的接口从其底层访问机制中隔离出来;通过将数据访问的调用打包,数据访问对象可以促进对于不同数据库类型和模式的数据访问。
本质:分层,是系统组件和数据源中间的适配器。(一层屏蔽一种变化)
代码示例:DAO模式的实现方法
什么是框架?框架的优点?
框架是能够完成一定功能的半成品
1.优点:完成一定的功能、提供一个精良的应用程序架构
2.框架都是以接口的形式出现
3.应该了解框架完成的功能、框架的API接口、框架的功能是怎么实现的什么是开放-封闭法则(OCP)可扩展但是不可以更改已有的模块
对扩展是开放的,对修改是封闭
什么是替换法则(LSP)使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用。
如何综合使用我们学过的设计模式来构建合理的应用程序结构
是采用接口进行隔离,然后同时暴露值对象和工厂类,如果是需要数据存储的功能,又会通过DAO 模式去与数据存储层交互。
构建常用的合理的Java应用包结构 Ui(表现层)
business–factory,ebi,ebo
dao–factory,dao,impl
awt、swing 什么是GUI中的容器?什么是GUI中的组件?
容器:能包含其他container和其他component的component。
组件:在设计上能实现一定功能的封装体;
简述AWT中的Frame、Panel和组件的关系
组件放在Panel上,而多个Panel可以叠加到Frame上,Frame一般只有一个,各个Panel可以互相在Frame上切换
简述如何使用一个组件
初始化,加到容器中,注冊事件,实现相应的事件
Panel pan = new Panel();
TextField td = new TextField();
td.setText(“this is in a TextField.”);
pan.add(td);
描述一个GUI界面的基本构成? Frame,Panel,組件
Popmenu
如何控制外观,如颜色、字体等? 可使用setColor(),setFont()方法
例如: Frame f = new Frame();
Font font = new Font(“TimesRoman”, Font.PLAIN, 14);
f.setColor(Color.red);
f.setFont(f);
什么是布局管理器?
用来管理GUI界面中组件的分布情況,负责决定布局方针以及其容器的每一个子组件的大小
描述每种布局管理器的基本特点
FlowLayout 从左到右分布,排满推到下一行
BorderLayout 上下左右中分布
CardLayout 卡片式分布
GridLayout 网格式分布
XYLayout 坐标分布
什么是JFC(Java基础类)?
是关于GUI组件和服务完整集合,主要包括5个API:
AWT,JavaD,Accessibility,Drag&Drop,Swing
提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包;
Swing和AWT的区别?
Swing提供了更完整的组件,引入了许多新的特性和能力。Swing API是围绕着实现AWT 各个部分的API 构筑的。
AWT 采用了与特定平台相关的实现,而绝大多数Swing 组件却不是这样做的,因此Swing 的外观和感觉是可客户化和可插的。
什么是双缓冲?
在后台进行界面的更新,然后在前台进行界面交换
功能:双缓冲可以改善一个被频繁改变的组件的外观
描述GUI的事件机制
事件源:是一个事件的产生者,或产生事件的组件对象
事件监听器:调用事件处理方法的对象
事件处理器:就是一个接收事件、解释事件并处理用户交互的方法。
描述Swing应用程序的基本结构? 组件定义
初始化界面
各种事件处理方法
各种适配类
描述表现层的基本功能? 展示数据
人机交互
收集参数、调用逻辑层api
描述在开发Swing应用程序中,一般都要写那些代码?都写到什么地方? 一般要在类的初始化的时候给组件赋值,写在jinit的方法里面
一般要在按扭的事件处理中写收集参数,组织参数,调用业务接口的方法
对于GUI组件而言,最主要的方法是哪些? 初始化
如何给组件初始化
如何从组件中取值
设计组件的属性
如何学习GUI组件的用法?
主要学会组件的定义、取值、赋值的方法
类比学习
JavaScript
什么是Javascript JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。
Java和Javascript的区别
1、基于对象和面向对象
Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。
JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver)的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用。
2、解释和编译
两种语言在其浏览器中所执行的方式不一样。Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台 上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。
JavaScript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户编由浏览器 解释执行。
3、强变量和弱变量
两种语言所采取的变量是不一样的。
Java采用强类型变量检查,即所有变量在编译之前必须作声明。
JavaScript中变量声明,采用其弱类型。即变量在使用前不需作声明,而是解释器在运行时检查其数据类型,4、代码格式不一样
Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中。
JavaScript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载。编写HTML文档就像编辑文本文件一样方便。
5、嵌入方式不一样
在HTML文档中,两种编程语言的标识不同,JavaScript使用来标识,而Java使用„来标识。
6、静态联编和动态联编
Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。
JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查,如不经编译则就无法实现对象引用的检查。
Javascript的运行环境 具备javascript运行器的如何在web页面加入Javascript,请写出两种方式并示例
alert(11);
【程序员个人面试总结】相关文章:
程序员个人年度总结08-05
程序员个人年终总结06-14
年度程序员个人总结04-27
程序员个人的工作总结报告04-27
程序员试用期转正个人总结05-01
优秀程序员试用期个人工作总结04-26
程序员面试经典试题08-05
程序员代码面试指南08-05
php程序员面试04-17
黑马程序员面试技巧08-14