Java面试通用技巧(共7篇)
1.Java面试通用技巧 篇一
1、电话结束后要给对方发一个短信或者邮件,发送邮件或短信,告知对方面试时间、地点、行车路线、公司名称、联系人。包括公司的大概情况,所招岗位名称及相关情况,并留下电话号码,便于所通知对象有不明之处可电话咨询。有一封正式的邀约信函,对候选人来说会感觉受到重视。
HR电话通知时的态度很大程度能决定该求职者最后是否来参加面试,而上述这些关键点及细节更能体现出HR的专业和职业度,能让应聘者感到沟通的愉快且有所收获的过程,必将是一个成功的HR自我营销的过程。
2.成功面试的十大通用技巧 篇二
面试发挥出色,可以在一定程度上弥补先前笔试或是其他条件如学历、专业上的不足。许多毕业生求职失败,都是输在了面试上。以此职场专家向即将步入面试关口的应届大学生详细讲解了面试成功的十大法宝和回答考官问题的十大技巧。
技巧一:自我介绍不超2分钟
“请你自我介绍一下”这道题90%以上的用人单位都会问,面试者事先最好以文字的形式写好背熟。其实面试者的基本情况用人单位已掌握,考这道题的目的是考核面试者的语言表达能力、逻辑能力、以及诚信度。所以,面试者在自我介绍的内容要与个人简历相一致,表述方式上尽量采用口语化,注意内容简洁,切中要害,不谈无关、无用的内容,条理要清晰,层次要分明。自我介绍不能超过2分钟,最好把握在1分钟左右。
技巧二:强调温馨和睦的家庭氛围
“谈谈你的家庭情况”此类问题70%的用人单位都会涉及,面试者应简单地介绍家人,一般只需介绍父母,如果亲属和应聘的行业有关系的也可介绍。回答时注意强调温馨和睦的家庭氛围,父母对自己教育方面的重视,各位家庭成员的良好状况,以及家庭成员对自己工作的支持和自己对家庭的责任感。
技巧三:用乐群性爱好点缀形象
“谈谈你的业余爱好”是合资企业、民企乐于问这道题,因为企业主要想通过此题了解面试者的性格是否开朗,是否具有团队精神。所以面试者千万不要说自己没有业余爱好,也不要说自己有那些庸俗的、令人感觉不好的爱好。谈爱好时最好不要说自己仅限于读书、听音乐、上网等一个人做的事,这样可能会令面试官怀疑应聘者性格孤僻,最好能有一些如篮球、羽毛球等,在户外和大家一起做的业余爱好来“点缀”自己的形象,突出面视者的乐群性和协作能力。技巧四:不忘本令考官难忘
“你最崇拜谁?”是近两年用人单位爱考的一道题。面试者回答时,不宜说自己谁都不崇拜,或者说崇拜自己,也最好不要说崇拜一个虚幻的、或者不知名的人,更不能崇拜一个明显具有负面形象的人。面试者所崇拜的人最好与自己所应聘的工作能“搭”上关系,说明自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。
技巧五:座右铭与应聘行业相关
通过提问座右铭用人单位就可以判断面试者是否具有发展前途。面试者不要说那些易引起不好联想的座右铭,也不应说那些太抽象的座右铭,更不宜说太长的座右铭。座右铭最好能反映出自己某种优秀品质,或者和本专业、本行业相关的一句话,比如“只为成功找方法,不为失败找借口”。
技巧六:说与工作“无关紧要”的缺点
当考官问到你的缺点时,面试者不能说自己没缺点,也不能把那些明显的优点说成缺点,但更不能挑严重影响所应聘工作的缺点,或者说令人不放心、不舒服的缺点。可以说出一些对于所应聘工作“无关紧要”的缺点,甚至是一些表面上看是缺点,从工作的角度看却是优点的缺点。
技巧七:尽量回避待遇问题
考官问到“你为什么选择我们公司?”时就试图从此题中了解面试者求职的动机、愿望以及对此项工作的态度,面试者最好不要说太多待遇好等,可以说“我十分看好贵公司所在的行业,我认为贵公司十分重视人才,而且这项工作很适合我,相信自己一定能做好。”
技巧八:遇到提问陷阱采用迂回战术
“如果我录用你,你将怎样开展工作”这是一道陷阱题,如果应聘者对于应聘的职位缺乏足够的了解,最好不要直接说出自己开展工作的具体办法,以免引起不良的效果。面试者可以尝试采用迂回战术来回答,如“首先听取领导的指示和要求,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根据计划开展工作。”技巧九:回避回答对上级具体的希望
“你希望与什么样的上级共事?”通过面试者对上级的“希望”可以判断出面试者对自我要求的意识,这既是一个陷阱,又是一次机会。面试者要好好把握此机会,最好回避对上级具体的希望,多谈对自己的要求,如“做为刚步入社会新人,我应该多要求自己尽快熟悉环境、适应环境,而不应该对环境提出什么要求,只要能发挥我的专长就可以了。”技巧十:尽量体现机智、果敢和敬业
“你是应届毕业生,缺乏经验,如何能胜任这项工作?”此题的回答应体现出面试者的诚恳、机智、果敢及敬业。如“作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益匪浅。请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。”
面试“改头换面”的技巧
找工作定要过面试槛。职业竞争的加剧,使得求职者对在短短十几分钟面试中能否充分展示自己越来越重视———简历精心设计,服饰用心挑选,有人甚至走上手术台“改头换面”。求职过程中,什么样的“包装”合适有效?求职形象设计——
递出一张漂亮的名片
求职时,借助一定技巧,将自己的知识、能力、技能充分展现出来,是一门艺术。要达到这个目的,需要研究着装风格,注意细节修饰,适当进行形象设计,演练谈吐和问答等。三位专家从各自研究领域出发,分别为求职者作了详细讲解。
形体语言
案例:小王走进应聘现场,在考官对面坐定,身体往背椅上一靠,二郎腿翘起,两手交叉胸前,眼睛紧盯着考官,眼神局促不安。
点评:
求职者在面试过程中不经意表现出的形体语言对面试成败非常关键,有时一个眼神或者手势都会影响到整体评分。这里给出几条建议,求职者可以对照着自己演练。
眼神:眼睛是心灵的窗户,恰当的眼神能体现出智慧、自信以及对公司的向往和热情。正确的眼神表达应该是:礼貌地正视对方,但应避免长时间凝视对方,否则易给人咄咄逼人之感;目光可三秒钟移动一下,注视的部位最好是考官的鼻眼三角区(社交区);目光平和而有神,专注而不呆板,眼神不要因紧张而飘忽不定;切忌斜视、下视、仰视,更不能有飘荡、心不在焉、甚至挑逗眼神。
手势:有些求职者由于紧张,双手不知道该放哪儿,而有些人过于兴奋,在侃侃而谈时舞动双手,这些都不可取。不要有太多小动作,这是不成熟的表现,更切忌抓耳挠腮、耸肩、为表示亲切而拍对方的肩膀等。
坐姿:良好的坐姿也是给面试官留下好印象的关键要素之一。可全身稍稍放松,否则会显得坐姿僵硬;坐椅子时最好只坐2/3,不要靠着椅背;上身挺直,这样显得精神抖擞。女生最好两腿并拢,身体可稍稍倾斜,别抖动双腿或将双手叉于胸前。
服装饰品
案例:染过头发的小张着一身休闲装走进了应聘现场,双肩包上挂满了各式小铃铛,颈部及手腕上的饰品闪闪发亮。点评(上海戏剧学院徐家华教授):
服装及饰品是求职者留给面试考官的第一印象,良好的穿着打扮、发型设计能为求职加分不少。同时,得体的穿着打扮能增加自信,从而在接下来的面试中发挥更好。
服装:选择服装的关键是看职位要求。应聘银行、政府部门、文秘,穿着偏向传统正规;应聘公关、时尚杂志等,则可以适当地在服装上加些流行元素,显示出自己对时尚信息的捕捉能力。仪表修饰最重要的是干净整洁,不要太标榜个性,除了应聘娱乐影视广告这类行业外,最好不要选择太过突兀的穿着。对于应届毕业生来说,允许有一些学生气的装扮,即使面试名企,也可以穿休闲类套装。它相对正规套装来看,面料、鞋子、色彩的搭配自由度更高。值得注意的是,应聘时不宜佩戴太多的饰物,这容易分散考官的注意力,有时也会给考官留下不成熟的印象。
化妆:女性切忌浓妆艳抹,男性最好不要有夸张纹身。化妆要自然而不露痕迹,且弱化个性、强调共性。女性可以用薄而透明的粉底营造健康的肤色,用浅色口红增加女性的自然美感,用棕色眉笔调整眉形,用睫毛膏让眼睛更加有神。男性可以用点清洁类的化妆品,给人干净、阳光的感觉就可。在香水的使用上要格外谨慎,避免使用浓烈或者味道怪异的香水,淡淡的清香容易让别人产生愉快的感觉。
发型:发型不仅要与脸形配合,还要和年龄、体形、个性、衣着、职业要求相配合,才能体现出整体美感。求职首先忌颜色夸张怪异的染发,男性忌长发、光头;其次,发型要根据衣服正确搭配,如穿套装,最好将头发盘起来,这样才显精神;再次,要善于利用视觉错觉来改变脸形,如脸型过长的人,可留较长的前刘海,并且尽量使两侧头发蓬松,这样长脸看起来不太明显;脖颈过短的人,则可选择干净利落的短发来拉长脖子的视觉长度;脸型太圆或者太方的人,一般不适合留齐耳的发型,也不适合中分头路,应该适当增加头顶的发量,使额头部分显得饱满,在视觉上减弱下半部分脸型的宽度;最后,根据应聘的不同职业,发型也应有所差异。比如应聘空姐,盘发更加适宜;而艺术类工作对发型的要求更宽泛一些,适当染一点色彩或者男生留略长一点的头发也可以接受。但不管设计梳理什么发型,都应保持头发的清洁。
面试语言
案例:小李小龚同时应聘某职位。向考官递上名片之后,小李很有信心地一再表示,这个岗位非他莫属,还有意无意地透露自己的父亲担任某公司的总经理等。同时小李不断询问“是不是经常加班”、“提供什么样的福利待遇”、“上下班是不是有班车”等等。而小龚的求职目的看来不太明确,她表示愿意听从安排,还谦虚地问:“您看我适合干什么?”
点评:
如果说外部形象是面试的第一张名片,那么语言就是第二张名片,它客观反应了一个人的文化素质和内涵修养。求职者在陌生考官面前,容易由于胆怯和紧张发挥失常。心态决定状态,只有驾驭心态,才能让自己的行为表现积极起来。面试语言要做到以下几点:
有明确的职业规划。面试中经常会遇到这几个问题:你如何看待这个职位?怎么理解工作内容?你的职业目标是什么?这些表明一个了解工作内容、有明确职业目标、有清晰职业规划的应聘者是受企业欢迎的。切忌“你看我适合干什么”或者“这几个职位我都可胜任”这样的回答。你可以询问公司的培训制度、晋升制度、员工规则等,来代替直接询问“薪酬福利”、“是否加班”这些略带功利性的问题,以显示自己的长远眼光。
显示出智慧。考官提问说,我想请你担任某个差班的班主任,在你之前已有5个班主任离任了。请问你该如何做?应聘者们大多滔滔不绝地讲述了自己的授课方式和带班经验,只有一位回答说:“我会和前5位班主任沟通,将他们的经验和教训一一总结。”如今的面试问题已不再局限于工作内容的阐述和专业性问答,特别是针对高层领导的面试,更多地是考核求职者的智慧和应变能力,这时一个充满智慧的回答才能让你脱颖而出。
避免五种语言。有五种不利于求职成功的语言:言过其实、自卑、自负、哀求和恭维。“我从原单位辞职,决定破釜沉舟,干一番大事业”,这样自负的话会吓到面试官:“我父母下岗,家里全靠我支撑,请给我一次机会”,这样哀求的话也不可取,因为企业挑选人是为了创造价值而不是施舍;过分谦虚自卑,会给人没有主张、懦弱胆怯的印象。相反,谦虚、诚恳、自然、亲和、自信的谈话态度会让你在任何场合都受到欢迎。语言能力不是一蹴而就,平时要注意积累,不断培养自己的倾听能力、思维能力、记忆能力和联想能力。
求职整形
案例:“我脸上有雀斑,会不会影响找工作?”、“我手臂上和小腿上的汗毛又黑又长,怎么办?”、“我脸上有个明显的疤痕,会影响求职吗?”……很多求职者,特别是女性求职者,在外形上有着各种各样的顾虑,甚至产生了整形的想法。
点评:
随着整形技术日趋成熟,越来越多的职场人有了用整形来为面试和工作加分的想法。据本市一些医疗整形机构的相关数据显示:每年七八月份是求职整形的高峰期,其中60%左右是应届毕业大学生,整形项目主要集中在开双眼皮、隆鼻、祛痣、祛斑等。专家建议,求职整形要认清以下两点:
美是多样的,整形并不是求职成功的唯一途径。根据自己的专业与特长寻找适合的工作,才是理性明智的选择。脸上的小雀斑、小疤、小痂,以及小腿和手臂上的汗毛这些“小缺陷”在专家看来并无大碍,不会影响求职形象。
整形技术日趋成熟,若身体确实存在影响求职成功的重大缺陷,也不妨通过整形来提高形象分。但首先要正确评估自己,很多求职者认为自己相貌不好,其实这些瑕疵并没有他们想像的那么严重。切忌随意在脸上大动干戈,如果一定要整形,必须选择正规医院。
面试官的四种常用面试技法
面试官该如何面试应聘者呢?我的经验是:一聊、二讲、三问、四答。
一、聊
面试官聊与招聘职位相关的内容,聊三分钟。
为什么面试官要采用聊的形式呢?应聘者没有正式录用之前,和面试官没有隶属关系,是相互选择的对等关系,不是谁求谁的关系。聊,不同于讲,聊是两个人或少数几个人之间的非正式交流,聊是在小范围内轻松气氛中进行的,聊显得非常自然,让应聘者放松后发挥出正常的水平。如果不采用聊的方式,一本正经地,让应聘者感觉特别别扭,不易发挥正常水平。
二、讲
给应聘者讲的时间,也是三分钟。
为什么说应聘者是讲而不是聊?因为,尽管面试官采用的是聊天的形式,但应聘者表述自己看法时一般都是在讲,这是由于应聘者和面试官的心理状态不对等以及信息不对称造成的。应聘者一般都急于展示自己与应聘岗位相宜的才能与品质,处于表现自己的心理状态,不可能平静地聊,所以只能是讲,甚至是演讲。如果应聘者能够和面试官轻松地聊,说明应聘者的心理素质特别好,或者心理优势特别明显,这一般是久经职场的高级别职业经理人。
如果没有前期的面试官放松地聊,应聘者不知道该讲什么,只有通过开始时的聊天,才能让应聘者围绕所要应聘岗位的内容积极地展开思维,去掉戒备心理,打破事先准备好的台词,展示自己各方面的智慧和才能。应聘者的这段演讲是应聘过程中最关键的部分,因为,作为面试官据此可以看出应聘者的基本内涵,不仅看出应聘者从业经验和相关行业经历以及资源背景,更重要的是了解到应聘者的知识总量和思维的宽度、速度、深度、精度,语言的组织能力、逻辑能
力、概括总结能力、化繁为简的能力、应变能力等等,而这些是在应聘者简历中很难体现出来的,甚至在笔试和测试中都很难试出来。即使经验、资历和背景在前期翻阅简历时面试官都知道了,但看他写和听他说则是完全两个不同的测试角度。有经验的面试官根据应聘者上述三分钟的陈述演讲,基本上就会有一个清晰的看法――应聘者与应聘岗位的关联程度和对应聘职位的能力胜任程度做出八九不离十的判断。
当应聘者作三分钟的陈述演讲时,面试官应认真听讲,并不时给予微笑式的鼓励和肯定,切记不要轻易地打断应聘者的陈述。如果面试官考虑到通过打断应聘者的陈述来考察应聘者受挫后的应变能力,也不是不可,但此时的打断效果不好,一是应聘者陈述的主题思路会丢失;二是延长面试时间,进而影响到后面其他面试的人,造成整体面试时间迟延和浪费。
三、问
面试官发问,要问关键内容和相互矛盾的地方,刚柔并济。
主要问三方面内容:问面试官应该了解但在简历和笔试以及在三分钟陈述中一直没有叙述出来的问题;问应聘者在陈述中自相矛盾的地方或陈述中和简历矛盾的地方;问应聘者陈述的事实以及简历中反映出来的内容与应聘职位不相宜的地方。
问话的语气方式也要因人而异,对性格直爽开朗的应聘者可以问得节奏快一些、直接一些,对内向的人可以适当委婉一些,但无论如何都不要伤害应聘者,或者以教训的口吻对待应聘者,时间充裕的话可以以讨论的形式交流些观点和看法。但不论怎么问,都要问到点子上,柔中带刚,曲中显直。只有问到矛盾处,才能真正发挥问的效果,通过面试官发问,一是补充需要了解的关键信息,二是就矛盾问题看应聘者的应变能力、诚信问题等。
四、答
在招聘过程中,应聘者在回答面试官的问题后也会主动反问面试官,而应聘者问的一般都是关系到所应聘职位的薪水、待遇、休假方式、作息时间、业务程序,岗位之间的关系、公司背景以及与竞争对手的关系等问题。面对应聘者的反问,作为面试官应该实事求是地回答,但回答要有艺术性。
面试官和应聘者相互之间的问答,总体时间掌握在四分钟之内。时间长了,就成了谈话和讨论。
3.Java面试通用技巧 篇三
一些Java软件工程师求职者们,可能因为种种原因,对Java语言及其深层原理掌握不牢固,以至于在面试中犯各种错误。本期乔布简历小编将为大家带来的主题是java程序员面试经验,一起来了解一下java程序员面试宝典吧~
关键词:java程序员面试宝典,java程序员面试经验
以下是一些java程序员面试需要注意的地方:
1、对于此类岗位而言,具体的项目是用人单位招聘时最看重的参考因素。即便是没有工作经验的应届生,也要准备可作为自己能力参考的具体作品。如果从未参加过任何项目,可以准备自己在相关领域的课程设计,如有必要还可以将其修改为完整的项目。对于这份具体作品,求职者要有相当的了解。通过求职者对于该作品的讲解,招聘官会判断求职者的技术能力到底如何。
2、Java程序员要求掌握的技能会比较多,求职者在简历上可以分类依次列举出自己所掌握的专业技能,有证书的列出自己所持有的证书名称。在面试的时候,可以对自己所掌握的技能做出介绍,并辅以实例证明,这样会更具有说服力。
3、基础很重要,不要生疏了。不管应聘什么程序员岗位,基础永远都是最重要的。只有有了踏实的基础,再辅以较好的学习能力,这样才不会被互联网日新月异的变化甩开。很多程序员在面试时往往是因为答不出最基础的问题才会错失工作机会。面试前巩固一下基础知识,永远不要轻视了基础。
程序员要时刻关注技术前沿,将新技术与自己所从事的工作联系到一起,做一些深入思考,面试时谈谈这样的问题也是向面试官展现自己学习能力的好机会~
4.java面试题 篇四
1. 新状态:线程已被创建但尚未执行(start 尚未被调用)。
2. 可执行状态:线程可以执行,虽然不一定正在执行。CPU 时间随时可能被分配给该线程,从而使得它执行。
3. 死亡状态:正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。
4. 阻塞状态:线程不会被分配 CPU 时间,无法执行。
四、线程的优先级
线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得 CPU 时间时,线程调度系统根据各个线程的优先级来决定给谁分配 CPU 时间,优先级高的线程有更大的机会获得 CPU 时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。
你可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。
5)你用过哪种设计模式?(瞬联,IBM,aspenTech)
设计:design
模式:pattern
框架:framework
创建模式,结构模式和行为模式
GoF设计模式
A.创建模式
设计模式之Factory(工厂模式)
使用工厂模式就象使用new一样频繁./10/9更新
设计模式之Prototype(原型模式)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
设计模式之Builder
汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder模式就是将这两种情况分开进行。
设计模式之Singleton(单态模式)
保证一个类只有一个实例,并提供一个访问它的全局访问点 2002/10/9更新
B.结构模式
设计模式之Facade
可扩展的使用JDBC针对不同的数据库编程,Facade提供了一种灵活的实现.
设计模式之Proxy
以Jive为例,剖析代理模式在用户级别授权机制上的应用
设计模式之Adapter
使用类再生的两个方式:组合(new)和继承(extends),这个已经在”thinking in java“中提到过.
设计模式之Composite
就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于和单位做买卖。文章中还对Jive再进行了剖析。
设计模式之Decorator
Decorator是个油漆工,给你的东东的外表刷上美丽的颜色.
设计模式之Bridge
将”牛郎织女“分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合)
设计模式之Flyweight
提供Java运行性能,降低小而大量重复的类的开销.
C.行为模式
设计模式之Template
实际上向你介绍了为什么要使用Java 抽象类,该模式原理简单,使用很普遍.
设计模式之Memento
很简单一个模式,就是在内存中保留原来数据的拷贝.
设计模式之Observer
介绍如何使用Java API提供的现成Observer
设计模式之Chain of Responsibility
各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不要推委给下一个.
设计模式之Command
什么是将行为封装,Command是最好的说明.
设计模式之State
状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换.
设计模式之Strategy
不同算法各自封装,用户端可随意挑选需要的算法.
设计模式之Mediator
Mediator很象十字路口的红绿灯,每个车辆只需和红绿灯交互就可以.
设计模式之Interpreter
主要用来对语言的分析,应用机会不多.
设计模式之Visitor
访问者在进行访问时,完成一系列实质性操作,而且还可以扩展.
设计模式之Iterator
这个模式已经被整合入Java的Collection.在大多数场合下无需自己制造一个Iterator,只要将对象装入Collection中,直接使用Iterator进行对象遍历。
6)请说一下MVC架构(瞬联,IBM,aspenTech)
Model:模型层
View:视图层
Controller:控制层
MVC (Modal View Controler)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
MVC如何工作
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
视图
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.
如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
模型
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器
控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。
现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
为什么要使用 MVC
大部分Web应用程序都是用像ASP,PHP,或者CFML这样的过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。
首先,最重要的一点是多个视图能共享一个模型,正如我所提及的,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论你的用户想要Flash界面或是 WAP 界面;用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可以最大化的重用你的代码了。
由于模型返回的数据没有进行格式化,所以同样的构件能被不同界面使用。例如,很多数据可能用HTML来表示,但是它们也有可能要用Macromedia Flash和WAP来表示。模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。
因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从MySQL移植到Oracle,或者改变你的基于RDBMS数据源到LDAP,只需改变你的模型即可。一旦你正确的实现了模型,不管你的数据来自数据库或是LDAP服务器,视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。
对我来说,控制器的也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。
MVC的缺点
MVC的缺点是由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。
你将不得不花费相当可观的时间去考虑如何将MVC运用到你的应用程序,同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫无顾忌的重用它们了。
根据我个人经验,由于我们将一个应用程序分成了三个部件,所以使用MVC同时也意味着你将要管理比以前更多的文件,这一点是显而易见的。这样好像我们的工作量增加了,但是请记住这比起它所能带给我们的好处是不值一提。
MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
MVC是一条创建软件的好途径
MVC设计模式是一个很好创建软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件,你可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。
7)如果类a继承类b,实现接口c,而类b和接口c中定义了同名变量,请问会出现什么问题?(瞬联)
interface A
{
int x = 0;
}
class B
{
int x =1;
}
class C extends B implements A
{
public void pX()
{
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确(输出的是1),而接口的属性默认隐含为 public static final.所以可以通过A.x来明确(输出的是0)。
下面的代码运行时会不会报错
interface Playable
{
void play();
}
interface Bounceable
{
void play();
}
interface Rollable extends Playable, Bounceable
{
Ball ball = new Ball(”PingPang“);
}
class Ball implements Rollable
{
private String name;
public String getName()
{
return name;
}
public Ball(String name)
{
this.name = name;
}
public void play()
{
ball = new Ball(”Football“);
System.out.println(ball.getName());
}
}
答案: 错。”interface Rollable extends Playable, Bounceable“没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的”Ball ball = new Ball(“PingPang”);“。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说”Ball ball = new Ball(“PingPang”);“实际上是”public static final Ball ball = new Ball(“PingPang”);“。在Ball类的Play()方法中,”ball = new Ball(“Football”);“改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在”ball = new Ball(“Football”);“这里显示有错。
8)请说一下java中为什么要引入内部类?还有匿名内部类?(瞬联,IBM)
9)请说一下final,finally和finalize的区别?(瞬联)
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
10)请说一下HTTP请求的基本过程(IBM)
11)java中存在内存泄漏问题吗?请举例说明?(IBM)
会
int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。
12)请说一下java中的内存回收机制所采用的算法(IBM,瞬联)
5.java面试自我介绍 篇五
java面试自我介绍篇一:
我叫赵,我的同学更都喜欢称呼我的英文名字,叫,六月的意思,是君的谐音。我来自安徽的市,在21年我以市全市第一名的成绩考上了大学,学的是计算机科学专业。不过,在大,我没法再像高中一样总是名列前茅了,到目前为止,我的综合学分排名是4%左右。在专业课程方面,我C++的编程能力比较强,一年以前就开始自学Java,在班级里是最早开始学Java的。
我参与过我们老师领导的一个项目,叫做聊天室,我负责开发了其中的及时通信系统的编写。在我们班,老师只挑选了我一个女生参与这个项目,主要是我写程序的效率比较高,态度也非常认真。除了学习和项目实习以外,我在学生会工作了两年,第一年做干事,第二年被提升为秘书长。大家对我的评价是考虑问题很周全,令人放心。
在我的求职清单上,贵公司是我的首选单位,原因和您面试过的很多同学都一样,出于对大品牌的信赖。毕竟,大品牌公司意味着很多我们需要的东西,比如培训和薪资,能和优秀的高素质的人在一起工作等等。
技术支持工程师也刚好是我的首选职位,因为我有技术背景,也有作为女性和和客户沟通的天然优势。还有,我不担心频繁出差,因为我身体素质很好,我已经坚持晨跑两年多了。在专业技术方面,我信赖公司的培训体系和我自己的快速学习能力!希望能有机会加入团队!
java面试自我介绍篇二:
我叫XXX,今年21岁,毕业于XX解放军信息工程大学计算机科学与技术专业,拥有扎实的Core Java基础,良好的编程风格;熟悉JSP+Servlet+JavaBean模式的WEB开发;熟悉Struts,Hibernate,Spring等开源框架,了解EJB;熟悉Tomcat,Jboss服务器等,熟悉基于Linux及Unix环境下的软件开发。
在校期间有多次社会实践经历,曾参与过学院网上虚拟实验室开发的需求分析,大学期间多次担任多课程的课代表。虽然实际工作经验不是很足,但军校四年培养了我充分的自信心和敬业精神以及扎实的学科基础知识和较强的专业技能,四年军校生活中,我严格要求自己,自觉、遵纪、守时。本人坦诚且有责任心,有独立进取的品性,勤于动手、善于动脑,适应新环境能力很强。能在最短时间内完成从学生到职业工作人员的转型,尽自己最大的努力融入新的工作生活。
请各位考官多多指教,谢谢!
java面试自我介绍篇三:
我叫朱新仲,今年22岁,毕业于山东理工大学计算机科学与技术专业。由于非常喜欢本专业,并期待将来从事专业方向的工作,因而在校期间十分注重对专业课的学习,拥有扎实的Core Java基础,良好的编程风格;熟悉JSP+Servlet+JavaBean模式的WEB开发;熟悉Struts,Hibernate,Spring等开源框架,了解EJB;熟悉Tomcat,Jboss服务器等,熟悉基于Linux及Unix环境下的软件开发。因为专业课知识掌握牢固,以专业第一的综合成绩毕业。
然而,我深知仅有专业知识是不够的,社会需要的是高素质复合型人才,因而在校期间学习之外,我积极参加各种社会实践活动,曾参与过学院网上虚拟实验室开发的需求分析。大三暑假曾在浪潮软件园实习,参与了电信增值软件开发与编挰,通过亲自动手及不断地向有经验的工程师请教学习,实习结束时我已经基本掌握整个Java平台的核心技术,独立编程能力大大提高。同时实习生活也让我意识到从事Java编程工作团队合作的重要性。
6.java面试编程题 篇六
import java.util.*;
public class bycomma{
public static String[] splitStringByComma(String source){
if(source==null||source.trim.equals(“”))
return null;
StringTokenizer commaToker = new StringTokenizer(source,“,”);
String[] result = new String[commaToker.countTokens()];
int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
public static void main(String args[]){
String[] s = splitStringByComma(“5,8,7,4,3,9,1”);
int[] ii = new int[s.length];
for(int i = 0; i
ii[i] =Integer.parseInt(s[i]);
}
Arrays.sort(ii);
//asc
for(int i=0;i
System.out.println(ii[i]);
}
//desc
for(int i=(s.length-1);i>=0;i--){
System.out.println(ii[i]);
}
}
}
2.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半 个”。
代码:
public static boolean isLetter(char c){
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null){
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){
if (origin==null || origin.equals(“”)|| len<1){
return “”;
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
//len=(len==1)?++len:--len;
--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(“”+ subString(“我ABC汉DEF”,6));
}
3、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序从a[ 0 :n- 1 ]中选择一个元素作为m I d d l e,该元素为支点把余下的元素分割为两段left 和r I g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点递归地使用快速排序方法对left 进行排序递归地使用快速排序方法对right 进行排序所得结果为l e f t + m I d d l e + r I g h t
//以下为java程序实现的快速排序算法:
public static void sort(int[] data) {
quickSort(data,0,data.length-1);
}
public static void quickSort(int[] data,int low,int high){
int pivotIndex=(low+high)/2;
swap(data,pivotIndex,high);
int k=partition(data,low-1,high,data[high]);
swap(data,k,high);
if ((k-low)>1) partition(data,low,k-1);
if ((high-k)>1) partition(data,k+1,high);
}
public static int partition(int[] data int low,int high, int pivot ){
do {
while (data[++low]
while (high!=0 && data[--high]>pivot);
swap(data,low,high);
}
while (low
swap(data,low,high);
return low;
}
public static void swap(int[] data int low,int high){
int tmp=data[low];
data[low]=data[high];
data[high]=tmp;
}
public static void main(String[] args){
int[] data = new int[]{89,32,425,32,78,1,53,92};
sort(data);
}
4.试用递归的方法写一下计算菲波那契数列的通项f(n),已知f1=1,f2=1,以后每项都是前两项的和。
..............
public static long fibonacci(long m){
if (m==0 || m==1) return m;
else return fibonacci(m-1)+fibonacci(m-2);
}
5. 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的 getInstance方法获取对它的引用,继而调用其中的方法。
Public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance;
}
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
6、创建一个静态方法,给它传入一个对象,请循环的打印出该对象所在类的类名和所实现的方法名(华为笔试最后一道编程)
import java.lang.reflect.*;
public class Test{
public static void test(Object obj){
Class clazz=obj.getClass();
//System.out.println(“类名:”+clazz.getName());
Method[] ms=clazz.getDeclaredMethods();
long len=Array.getLength(ms);
for(int i=0;i
System.out.println(“类名:”+clazz.getName()+“方法名:”+ms[i].getName());
}
}
class A{
public void b(){}
public void c(){}
public void d(){}
public void e(){}
}
public static void main(String[] args){
Test t=new Test();
Test.A a=t.new A();
test(a);
}
}
7、假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = null;
try {
s = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
StringTokenizer st = new StringTokenizer(s);
String s1 = st.nextToken();
String s2 = st.nextToken();
byte[] sa1 = s1.getBytes();
byte[] sb2 = s2.getBytes();
Arrays.sort(sa1);
Arrays.sort(sb2);
String ss1 = new String(sa1);
String ss2 = new String(sb2);
if(ss1.equals(ss2))
System.out.println(“equal”);
else
System.out.println(“not equal”);
8、给你一组字符串如:iu7i8hy4jnb2,让你编程输出里面的数字:7842
用正规表达式:“iu7i8hy4jnb2”.replaceAll(“[^d]”,“”);
9、给你一组字符串让你把它倒叙输出
public static String flashBack(String origin) {
String result = “”;
for (int i = origin.length(); i >0; i--) {
String tmp = origin.substring(i - 1, i);
result += tmp;
}
return result;
}
10、给你一组字符如{1,3,4,7,2,1,1,5,2},让你输出里面出现次数最多且数值最大的一个,出现几次
public void fun4() {
int[] a = { 4, 1, 2, 4, 5, 1, 1, 1, 5, 1, 3, 4, 5 };
Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + “ ”);
}
System.out.println();
int maxNumber = a[a.length - 1], maxCount = 1;
int curNumber = a[a.length - 1], curCount = 1;
for (int i = a.length - 1; i >0; i--) {
curNumber = a[i];
if (a[i] == a[i - 1]) {
curCount++;
} else {
System.out.println(“i=” + i + “,curCount=” + curCount+ “,maxCount=” + maxCount + “,maxNumber=” + maxNumber);
if (curCount >maxCount) {
maxCount = curCount;
maxNumber = curNumber;
}
curCount = 1;
}
}
if (curCount >maxCount) {
maxCount = curCount;
//maxNumber = curNumber;
}
System.out.println(“curCount=” + curCount + “,maxCount=” + maxCount + “,maxNumber=” + maxNumber);
}
11、求两个数的公约数,M,N
int divisor =1;
for (int i = 2; i <= b; i++) {
if(a%i==0 && b%i==0){
divisor = i;
}
}
System.out.println(a+“和”+b+“的最大公约数是:”+divisor);
}
12、实现数组复制
public void fun8(){
int[] a = {1,2,3,4,56,7,8};
int[] b = (int[])a.clone();
Conica.print(a);
Conica.print(b);
b[0]=100;
Conica.print(a);
Conica.print(b);
}
13、冒泡排序的实现
public void fun9(){
int[] a = {1,5,2,6,8,74,1,25,69,8};
Conica.print(a);
for(int i=0; i
for(int j=0; j
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
Conica.print(a);
}
14、编程显示某一文件目录下的文件名
public void fun10(){
File file = new File(“G:�3月份”);
if(file.exists()){
if(file.isDirectory()){
String[] files = file.list();
Conica.println(files);
}
}
}
15、从键盘输入4个十进制数字字符,将其转换为4位时间之数并显示出来
16、编程实现统计文本文件中某个单词的出现频率,并输出统计结果
用HashMap来解决
假设单词不存在跨行的,每个单词用,. ;分割
public static void countNum() throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(“c://file.txt”));
Map map = new HashMap();
for (String s = br.readLine(); s != null; s = br.readLine()) {
StringTokenizer st = new StringTokenizer(s, “,. ;”);
while (st.hasMoreTokens()) {
String temp = st.nextToken();
if (map.containsKey(temp)) {
map.put(temp, new Integer((Integer)map.get(temp) + 1));
} else {
map.put(temp, new Integer(1));
}
}
}
for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
System.out.println(entry.getKey() + “-->” + entry.getValue()
+ “times”);
}
} finally {
br.close();
}
}
17、编程模仿DOS下的dir命令,列出某个目录下的内容
18、编程说明String和StringBuffer字符串的区别
19、编程计算N!的程序,一个使用递归方法,一个不用递归方法
递归 :
long fuction(int n){
if (n==0) return 1;
else
return n* fuction(n-1);
}
不递 :
long s=1;
for(int i=2;i<=n;i++)
{
s*=i;
}
20、编程实现ASCII码和Unicode码之间的转换
21.用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求: “4 ”不能在第三位, “3 ”与 “5 ”不能相连.
此题具体算法及程序可参考:
topic.csdn.net/u/0114/14/1170e023-e8f0-4331-8bd8-516c6f1e40da.html
22。一个字符串中可能包含a~z中的多个字符,如有重复,如String data=“aavzcadfdsfsdhshgWasdfasdf”,求出现次数最多的那个字母及次数,如有多个重复的则都求出。〔金山公司面试题〕
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;
public class FindRepeatChar {
public static void doString(String strInput) {
char[] chars = strInput.toCharArray();
ArrayList lists = new ArrayList();
TreeSet set = new TreeSet();
for (int i = 0; i < chars.length; i++) {
lists.add(String.valueOf(chars[i]));
set.add(String.valueOf(chars[i]));
}
System.out.println(set);
Collections.sort(lists);
System.out.println(lists);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < lists.size(); i++) {
sb.append(lists.get(i));
}
strInput = sb.toString();
System.out.println(strInput);
int max = 0;
String maxString = “”;
ArrayList maxList = new ArrayList();
for (Iterator its = set.iterator(); its.hasNext();) {
String s = (String) its.next();
int begin = strInput.indexOf(os);
int end = strInput.lastIndexOf(os);
int value = end - begin + 1;
if (value >max && value >1) {
max = value;
maxString = os;
maxList.add(os);
} else if (value == max) {
maxList.add(os);
}
}
int index = 0;
for (int i = 0; i < maxList.size(); i++) {
if (maxList.get(i).equals(maxString)) {
index = i;
break;
}
}
System.out.println(“出现最多的字符为:”);
for (int i = 0; i < maxList.size(); i++) {
System.out.println(maxList.get(i) + “”);
}
System.out.println();
System.out.println(“出现最多的次数为:” + max);
}
public static void main(String[] args) {
String strInput = new String(“aavzcadfdsfsdhshgWasdfasdf”);
doString(strInput);
}
}
23.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
package test.money;
import java.text.NumberFormat;
import java.util.HashMap;
public class SimpleMoneyFormat {
public static final String EMPTY = “”;
public static final String ZERO = “零”;
public static final String NE = “壹”;
public static final String TWO = “贰”;
public static final String THREE = “叁”;
public static final String FOUR = “肆”;
public static final String FIVE = “伍”;
public static final String SIX = “陆”;
public static final String SEVEN = “柒”;
public static final String EIGHT = “捌”;
public static final String NINE = “玖”;
public static final String TEN = “拾”;
public static final String HUNDRED = “佰”;
public static final String THOUSAND = “仟”;
public static final String TEN_THOUSAND = “万”;
public static final String HUNDRED_MILLION = “亿”;
public static final String YUAN = “元”;
public static final String JIAO = “角”;
public static final String FEN = “分”;
public static final String DOT = “.”;
private static SimpleMoneyFormat formatter = null;
private HashMap chineseNumberMap = new HashMap();
private HashMap chineseMoneyPattern = new HashMap();
private NumberFormat numberFormat = NumberFormat.getInstance();
private SimpleMoneyFormat() {
numberFormat.setMaximumFractionDigits(4);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setGroupingUsed(false);
chineseNumberMap.put(“0”, ZERO);
chineseNumberMap.put(“1”, ONE);
chineseNumberMap.put(“2”, TWO);
chineseNumberMap.put(“3”, THREE);
chineseNumberMap.put(“4”, FOUR);
chineseNumberMap.put(“5”, FIVE);
chineseNumberMap.put(“6”, SIX);
chineseNumberMap.put(“7”, SEVEN);
chineseNumberMap.put(“8”, EIGHT);
chineseNumberMap.put(“9”, NINE);
chineseNumberMap.put(DOT, DOT);
chineseMoneyPattern.put(“1”, TEN);
chineseMoneyPattern.put(“2”, HUNDRED);
chineseMoneyPattern.put(“3”, THOUSAND);
chineseMoneyPattern.put(“4”, TEN_THOUSAND);
chineseMoneyPattern.put(“5”, TEN);
chineseMoneyPattern.put(“6”, HUNDRED);
chineseMoneyPattern.put(“7”, THOUSAND);
chineseMoneyPattern.put(“8”, HUNDRED_MILLION);
}
public synchronized static SimpleMoneyFormat getInstance() {
if (formatter == null)
formatter = new SimpleMoneyFormat();
return formatter;
}
public String format(String moneyStr) {
checkPrecision(moneyStr);
String result;
result = convertToChineseNumber(moneyStr);
result = addUnitsToChineseMoneyString(result);
return result;
}
public String format(double moneyDouble) {
return format(numberFormat.format(moneyDouble));
}
public String format(int moneyInt) {
return format(numberFormat.format(moneyInt));
}
public String format(long moneyLong) {
return format(numberFormat.format(moneyLong));
}
public String format(Number moneyNum) {
return format(numberFormat.format(moneyNum));
}
private String convertToChineseNumber(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer();
for (int i = 0; i < moneyStr.length(); i++) {//123363
cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(
i, i + 1)));
}
// 拾佰仟万亿等都是汉字里面才有的单位,加上它们
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
int moneyPatternCursor = 1;
for (int i = indexOfDot - 1; i >0; i--) {
cMoneyStringBuffer.(i, chineseMoneyPattern.get(EMPTY
+ moneyPatternCursor));
moneyPatternCursor = moneyPatternCursor == 8 ? 1
: moneyPatternCursor + 1;
}
String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer
.indexOf(“.”));
cMoneyStringBuffer.(cMoneyStringBuffer.indexOf(“.”),
cMoneyStringBuffer.length());
while (cMoneyStringBuffer.indexOf(“零拾”) != -1) {//inclusive. exclusive.
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零拾”),
cMoneyStringBuffer.indexOf(“零拾”) + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf(“零佰”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零佰”),
cMoneyStringBuffer.indexOf(“零佰”) + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf(“零仟”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零仟”),
cMoneyStringBuffer.indexOf(“零仟”) + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf(“零万”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零万”),
cMoneyStringBuffer.indexOf(“零万”) + 2, TEN_THOUSAND);
}
while (cMoneyStringBuffer.indexOf(“零亿”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零亿”),
cMoneyStringBuffer.indexOf(“零亿”) + 2, HUNDRED_MILLION);
}
while (cMoneyStringBuffer.indexOf(“零零”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零零”),
cMoneyStringBuffer.indexOf(“零零”) + 2, ZERO);
}
if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1)
cMoneyStringBuffer.(cMoneyStringBuffer.length() - 1,
cMoneyStringBuffer.length());
cMoneyStringBuffer.append(fractionPart);
result = cMoneyStringBuffer.toString();
return result;
}
private String addUnitsToChineseMoneyString(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);
cMoneyStringBuffer.(cMoneyStringBuffer.length() - 1, JIAO);
cMoneyStringBuffer.(cMoneyStringBuffer.length(), FEN);
if (cMoneyStringBuffer.indexOf(“零角零分”) != -1)// 没有零头,加整
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零角零分”),
cMoneyStringBuffer.length(), “整”);
else if (cMoneyStringBuffer.indexOf(“零分”) != -1)// 没有零分,加整
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零分”),
cMoneyStringBuffer.length(), “整”);
else {
if (cMoneyStringBuffer.indexOf(“零角”) != -1)
cMoneyStringBuffer.(cMoneyStringBuffer.indexOf(“零角”),
cMoneyStringBuffer.indexOf(“零角”) + 2);
// tmpBuffer.append(“整”);
}
result = cMoneyStringBuffer.toString();
return result;
}
private void checkPrecision(String moneyStr) {//5336.53663 10-5-1
int fractionDigits = moneyStr.length() - moneyStr.indexOf(DOT) - 1;
if (fractionDigits >2)
throw new RuntimeException(“金额” + moneyStr + “的小数位多于两位。”); // 精度不能比分低
}
public static void main(String[] args) {
System.out.println(getInstance().format(new Double(8951.11)));
}
}
7.Java程序员面试 篇七
第一,谈谈final,finally,finalize的区别。
Fanal 修饰符 可以修饰类,属性和方法。被修饰的类不可以派生子类,不能被作为父类被继承。它修饰的属性和方法必须在声明的时候给定初值,以后不能修改。
Fanaly 在捕获异常的时候最后执行的语句,可以不写。
Fanalize 是Object类中定义的,所以所有的类都继承了它,这个方法是垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
第二,Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类,也可以实现其他接口。匿名内部类在swing中比较常见。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
静态内部类,普通的内部类
静态内部类是不能直接调用外部的类,可以通过外部类的引用来调用
非静态类inner class 可以自由的引用外部类的属性和方法,但是它与一个实例绑定在了一起,不可以定义静态的属性、方法。
第四,&和&&的区别。
&和&&都是java中的逻辑运算符
&两边的表达式的结果都是true的,整个的运算结果才是true,只要有任意一个是false,其结果就是false的
&&是短路与,既第一个表达式是false 就不用判断第二个表达式,结果就是false
第五,HashMap和Hashtable的区别。
它们实现了将key 映射到 value的对象,键和值都是对象,不能有重复的键,可以有重复的值
Hashtable是基于陈旧的Dictionary类的,HashMap是Map接口的一个实现 HashMap可以定义null key 和null 的value,而HashTable不可以
HashMap是线程不安全的,而HashTable线程安全,所以HashMap的效率比HashTable的要高些
第六,Collection 和 Collections的区别。
Collection是所有集合的父接口。
List 和set是Collection的子接口
Collections是操作有关集合的工具类。
第七,什么时候用assert.断言 Debug模式下才有效
第八,GC是什么? 为什么要有GC?
GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
第九,String s = new String(“xyz”);创建了几个String Object?
2个,一个是引用对象s 还有字符串对象xyz
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
-11 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
S1 =s1+1 会出错,因为1默认为int型。相加会出错。
S1+=1;虽然是一个意思,但是在jvm里面是不同的方法做的,是运算符重载,所以是不一样的。
第十二,sleep()和 wait()有什么区别?
Sleep()是线程的休眠,方法里边要有毫秒值。意思是过了多少毫秒后会执行一次。不释放系统资源
Wait()是线程的等待,必须唤醒notify才能够执行,不占用系统的资源
第十三,Java有没有goto?
没有,不过它是java语言中的保留字
第十四,数组有没有length()这个方法? String有没有length()这个方法?
数组中没有length()方法,有length属性。
String有length()方法,字符串的长度。
第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload是重载 重载的方法名字必须相同,参数表不同,可以改变返回类型
Override 是重写 重写是子类继承父类的虚方法重新定义参数表要相同,返回类型也要和父类相同。
Overloaded可以改变返回类型
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
set里的元素是不能重复的,用iterator()方法来区分重复与否。
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==用于比较引用和比较基本数据类型时具有不同的功能: 比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
第十八,error和exception有什么区别?
Error 是编辑时出现的错误,不能通过编译,也就是不能生成.class的文件
Exception是异常,异常是可以避免和捕获的,程序能够通过编译。第十九,List,Set,Map是否继承自Collection接口?
List set
是继承Collection 接口的。Map不是 第二十,abstract class和interface有什么区别?
abstract class是抽象类,可以定义普通方法,也可以定义只有方法名,没有实现的方法。抽象类是被继承的 interface是接口,所有的方法都是抽象方法。实现接口就是重写接口里的所有方法。
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
Abstract和method是不可以static的,因为抽象类是要被继承的。
native是映射本地方法,不存在被子类继承,所以也不能与abstract混用
抽象类没有具体的实现,觉得定义成synchronized是没有必要的,修饰具体的方法
才有意义
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口,extends
抽象类可以实现接口。
抽象类是可以继承实体类的,但实体类中要有明确的构造函数。第二十三,启动一个线程是用run()还是start()?
启动线程要是start()方法。
第二十四,构造器Constructor是否可被override?
构造器不能被重写的,可以重载。第二十五,是否可以继承String类?
不能,String是final的。
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
如果其他的方法不是同步的,是可以进去的。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
finally里的代码会执行,在return之前执行
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
2<<3 第十七,给我一个你最常见到的runtime exception.NullPointerException 空指针
ArrayIndexOutOfBoundException
数组下标越界
ClassCastException 造型异常 第二十九,两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这句话对不对?
这是对的,equals方法是比较两个值。而不是内存地址。
第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
第三十二,编程题: 写一个Singleton出来。
Public class Singleton{ Private static Singleton s = new Singleton();Private Singleton(){ } Public static Singleton getInstance(){ Return s;}
【Java面试通用技巧】推荐阅读:
志愿者通用面试问题06-17
面试自我介绍1分钟通用07-05
java面试题答案08-23
金华业Java面试题07-01
深圳平安java面试题08-14
java面试之葵花宝典09-12
java面试题大全带答案10-21
java软件工程师面试10-31
面试技巧:技巧:投送简历和面试小贴士07-16
面试问题英语面试技巧07-30