
Java面试题
阿发你好
全套Java/C语言系列教程
展开
-
Java Struts2 技术要点
下面介绍一下Struts2,虽然是入门技术,但是在开发中掌握这些也差不多够用了。OverviewStruts2是Apache下的一个Project,建立于JSP / Servlet / Filter 技术之上。其MVC的设计构想可以把业务和展现部分分离,总体上是不错的思想,有助于Web Project的开发调试以及组员之间的分工协作。为什么说其是建立在Servlet / F原创 2012-07-03 17:42:50 · 1216 阅读 · 0 评论 -
WebRoot下哪些文件可以被客户端访问?哪些不可以访问?
( Java面试题 | Java学习指南 )默认的,tomcat允许浏览器访问webroot下的所有文件,但除了WEB-INF目录之外。为什么呢?因为约定WEB-INF目录用于存储程序和配置,如lib,classes,xml配置。显然,这些东西不应该让客户端下载。但是,我们也可以通过servlet和filter技术,来改变这个默认行为。例如,我们可以专门servlet,让客...原创 2019-08-18 21:48:15 · 702 阅读 · 0 评论 -
一个文本文件,如何知道它是GBK编码、还是UTF-8编码?BOM是什么东西?
( Java面试题 | Java学习指南 )我们平时看到的文本文件,虽然都是文本,但有的是GBK编码,有的UTF-8编码。那么,对于一个阅读器,它在读取一个文本文件时如何知道它是GBK还是UTF-8呢?奥秘在于文件头部的几个字节。规定如下:当以UTF16或UTF-8编码存储时,头部需要添加几个字节作为标识。称为BOMUTF8:头部3个字节EF BB BFUTF16...原创 2019-08-18 21:50:19 · 7400 阅读 · 0 评论 -
interface里可以定义属性吗?
( Java面试题 | Java学习指南 )本质上不可以。如果强行在interface里加一个属性,则该属性自动变成public static。显然,这不算是个属性。例如,public interface Listener{ int number;}虽然number没加static,但是编译会自动把它按public static处理。为什么这样呢?因为接口...原创 2019-08-18 21:54:56 · 8379 阅读 · 2 评论 -
java里的对象有几种创建方式?所有的对象都得new出来吗?
1 new用new是最常见的方式,new可以创建一个对象如Student s1 = new Student()注意:Student s2 = s1;这里没有new,所以并没有创建新的对象,s2, s1指向了同一对象2字面常量对象如String s = "afanihao";则s指向了一个常量对象,这里并没有new,但是右侧有一个对象再比如...原创 2019-08-15 11:25:46 · 1736 阅读 · 0 评论 -
在 Java Web 里,为什么写 Servlet , Filter 的时候不需要 main() 方法,却可以运行?
在 Java Web开发时看不到 main() ,因为 Tomcat程序本身就是一个 Java程序, main()方法在 Tomcat程序里。实际上,Tomcat本身就是一个框架,它会加载APP,读取 WEB-INF\web.xml下的配置,从中读取相应的Filter和 Servlet。所以,当我们写好 Filter, Servlet后,只需要把 web.xml里配置好。...原创 2019-08-15 11:30:33 · 1085 阅读 · 0 评论 -
Java怎么把一张图片直接存到数据库里?
( Java面试题 )通常,应该把文件放在文件系统(硬盘)上,在数据库里只存储图片文件的路径 。但是,如果想 图文文件直接存在数据库里,怎么实现呢?由于图片数据较大,在MySQL中直接存储的话,应该选则 BLOB 类型的字段。(以下假设图片的大小为 100K以下 ,太大的不适合 )1将字段类型设为mediumtext此字段可用于存储 <16MB 的文本...原创 2019-08-16 10:19:08 · 4586 阅读 · 0 评论 -
在 Java 里,怎么复制一个对象?
(Java面试题)其实,Java里一般没有必要复制对象。一般都是多个引用,指向同一个对象。注意不要套用C/C++的思想。比如,Rectangle a = new Rectangle ( 0, 0, 100, 40);Rectangle b = a;这里并没有复制对象,b和a指向的是同一个对象。那么,如果想根据a复制一个新的对象,该怎么做呢?(注:这里的 Recta...原创 2019-08-16 15:33:56 · 606 阅读 · 0 评论 -
两台IP地址相同的主机,能够互相网络通讯吗?
(Java面试题)在网络通讯时,IP地址表示一个主机。你和隔壁小王都在家里用QQ上网聊天,你发现你的IP是192.168.1.101,小明的IP也是192.168.1.101。请问:为什么两台IP地址相同的主机可以通讯?实际上,全国有几百万台家庭电脑的IP都是192.168.1.XXX,但是,却不妨碍大家互相QQ聊天。比如,你的电脑A192.168.1.101你家路由器...原创 2019-08-16 15:37:25 · 6487 阅读 · 0 评论 -
在Java里,equals() 与 == 有什么区别?
此问题在 《快速入门篇》11.6节里已经详细分析过。※==用于判断两个对象是否相同 (同一个对象)比如,Student a = new Student( ... )Student b = a;则 a, b其实指向同一个对象。if ( a == b ){}这个是成立的。※equals用于判断两个对象是否相等(内容相等)举个例子:你...原创 2019-08-16 17:00:54 · 213 阅读 · 0 评论 -
在网盘上传大文件,一个G的文件有可能几秒中就上传完了。称为极速秒传,请问它是怎么做到的?
( Java面试题 )这个涉及到 MD5码,具体原理参考《项目应用篇》之"数据的校验"章节。每个文件都要以生成一个MD5码,用公式表示为: output = MD5 ( input File )其中,输入input为文件数据,输出MD5码是一个16字节的数组 byte[16]需要注意以下两条结论:(1)无论输入数据有多大,是10K还是10G,输出都是16字节...原创 2019-08-16 17:02:21 · 3519 阅读 · 1 评论 -
Thread 与 Runnable 有什么区别和联系?
( Java面试题 / Java学习指南 )其实 Thread和 Runable没太大联系。※ RunnableRunnable则是一个接口,一个通用的接口。什么叫通用接口?就是在你要自定义一个接口时,如果想不到合适的名字,则可以直接用Runnable。比如,在Swing高级篇里,我们经常要自定义接口。比如,定义一个public inter...原创 2019-08-16 17:54:46 · 858 阅读 · 0 评论 -
怎样理解优秀代码的三个标准:可读性,可重用性,可扩展性?
※可读性,Readable指一份代码干净清爽,容易读懂。简单地讲,能让别人1秒读懂的,就别让人花2秒!多加点注释就好了吗?错错错!代码如果写得好,一句注释都可以没有。因为代码即“文章”,它自身就可以表示意思和逻辑。-怎么样增加可读性? 合理的架构设计 名字起得好 多留点空白,不要挤在一起 一行代码不要嵌套多层函数 不是代码越简洁越好,而是越容易懂越好!代码短...原创 2019-08-16 17:56:43 · 4037 阅读 · 0 评论 -
什么叫反编译?你把java程序(jar)交给别人,会被人看到源码吗?
( Java面试题 | Java学习指南 )※编译 Compile将一个 *.java文件编译成 *.class文件的过程,称为编译。比如,HelloWorld.java被编译后得到 HelloWorld.class※反编译 Decompile在.class文件里包含了完全的信息,包含类名、方法、属性、注解,除了注释文字之外的所有信息。所以从.class文件可...原创 2019-08-16 19:27:36 · 7670 阅读 · 1 评论 -
HTTP GET与POST的区别什么? HTTP GET可以用来执行增删改操作吗?
HTTP GET和 POST的区别,很容易,也很明显,只要你用Wireshark抓包看过,就能很直观地看到区别。GET: HTTP头部第一行为GET,参数放在URL里上传,通常没有HTTP内容体。POST: HTTP头部第一行为POST字样,参数放在HTTP内容区。这个区别,在 《网站入门篇》里有详细演示,相信学过的同学都是知道的。那么,下面的问题是,可以在响应HTTP GE...原创 2019-08-16 19:29:14 · 2769 阅读 · 0 评论 -
什么叫系统后门?后门与漏洞有什么区别?
( Java面试题 | Java学习指南 )什么叫系统后门?后门与漏洞有什么区别?近年爆发的勒索病毒案例中,被黑客利用的是Windows的后门、还是漏洞?后门,是一个系统的作者故意留下的、只有作者自己知道的机关。比如,一个洞府看起来是铜墙铁壁,但是若在它前面前念一声"芝麻开门!"便会在墙壁上凭空打开一个门。这便是一个后门,这是系统的作者故意留下的机关。再比如,打开手机拨号键...原创 2019-08-16 19:52:51 · 13770 阅读 · 0 评论 -
如何理解开发效率和运行效率,哪个更重要?
效率分两种语义:开发效率,运行效率。开发效率,是指用最短的把代码写好,功能实现。运行效率,是指程序的性能,运行的越快,所耗费的CPU越好,内存越少越好。简单的说,开发效率是节省人的时间,而运行效率是节省机器的时间。那么,是人的时间重要、还是机器的时间更重要呢?结论似乎显而意见。从老板角度看 : 如果要提高运行效率,那么就得雇佣薪资更高的程序员,花更多的开发时间,,,...原创 2019-08-18 16:45:58 · 2810 阅读 · 0 评论 -
浏览器里输入 http://afanihao.cn/abc.jpg ,可以打开显示一张图片。那么是否意味着服务器后台里有一个名为abc.jpg的图片文件?
不一定。后台可能存在这个文件,也可能是一个伪静态实现。关于伪静态技术,参考『网站中级篇』。比如,创建一个Servlet,映射路径设置为"/abc.jpg",返回一个图片的内容即可。Content-Type设置为"image/jpeg"。在客户端浏览器看来,它得到的是一个图片的内容。它语法区分这个图片是来自一个静态文件,还是来自一个Servlet的输出。...原创 2019-08-18 16:43:50 · 2121 阅读 · 0 评论 -
Java - 传值还是传引用?
只学Java的人自然是不会想到什么值和引用的问题的。但是每个从C++过来的人,都会问这个问题。那么Java倒底是传值还是传引用呢?网上众说纷纭,但大多是扯淡。答案是:(1) 当参数为 boolean, byte,short, int, long等非Class类型时,以值传递。【注】String类型是一个例外,它虽然是Class,但却是按值传递的。从这一点上可以说,Java的作者的逻原创 2012-06-29 11:12:40 · 1022 阅读 · 1 评论 -
Java - 处理unsigned类型
Java没有unsigned类型,作者一定很后悔,现在加还来得及。没有unsigned类型,使得java在编解码方面成为残疾。这主要是作者在开始时只是把Java定位为一种脚本语言,要求不是太高。好吧,在Java里把整数分为byte short intlong四种类型,是没有unsigned类型的。那么在处理序列化数据时该怎么办呢?字面整型常量默认为int型例如:long a =原创 2012-06-29 11:04:55 · 8794 阅读 · 0 评论 -
struts2 - Overview
官网http://struts.apache.org/OverviewPremier - 初学者 http://struts.apache.org/primer.htmlHome - Struts Home http://struts.apache.org/2.x/docs/home.html Tutorials -原创 2014-03-20 09:55:55 · 620 阅读 · 0 评论 -
Action中获取Request的参数
Action中获取Request的参数这个过程是strut2自动完成的,当提供一个表单时,表单参数放在HttpRequest的Parameter列表里,当Action并调用时,struts框架会根据Action的setter自动对Action的成员变量赋值。例如:form提交的url为 htp://localhost/login.jsp?username=john原创 2014-03-20 09:56:36 · 2715 阅读 · 0 评论 -
Action中读写Session
Action中读写Session这在struts2的官网上有说明,让Action实现SessionAware 接口即可,然后直接操作成员变量userSession对象即可。例如,用Map的put函数放入一个属性,则会影响当前HttpSession。http://struts.apache.org/2.x/docs/http-session.htmlimport java.util.原创 2014-03-20 09:57:16 · 1411 阅读 · 0 评论 -
struct2 - 中文支持
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/原创 2014-03-20 09:59:24 · 1065 阅读 · 0 评论 -
struct2 tags - Getting Started
Getting Started1. VIEW要引入taglib然后加入以下内容 这表示在此显示Action中的一个叫status的变量的值2. Actionpublic class TestAction extends ActionSupport{ Integer status; public String execute() {原创 2014-03-20 10:00:16 · 816 阅读 · 0 评论 -
struts2 tags - Tag Syntax
Tag Syntaxhttp://struts.apache.org/2.x/docs/tag-syntax.html1. 结构其中 s: - Struts Tag Lib的前缀,在中指定 textfield - Tag名字 name - Tag参数列表一般来说,所有的Tag都会带若干参数2. value参数的值多数Tag有一个参数叫value原创 2014-03-20 10:00:50 · 671 阅读 · 0 评论 -
struts2 tags - Message Resource Files (i18n)
Message Resource Files (i18n)http://struts.apache.org/2.x/docs/message-resource-files.html1. - 基本使用 -1.1 建立同名文件 TestAction.propertiesTestAction_zh.properties放于Action相同位置struts2框架会自动加载这些r原创 2014-03-20 10:01:36 · 1144 阅读 · 0 评论 -
struts2 tags - s:property 显示变量
1. 在VIEW中显示Action的成员变量的值s:property 显示变量 表示显示Action中的一个叫status的变量的值,调用该变量的toString()函数,把结果显示在输出到网页里。public class TestAction extends ActionSupport{ Integer status; public Integer getS原创 2014-03-20 10:19:04 · 2769 阅读 · 0 评论 -
struts2 tags - s:iterator 遍例Collection型变量
s:iterator 遍例Collection型变量http://struts.apache.org/2.x/docs/iterator.html 其中,nameList是Action的变量名,row表示每一行指向的对象名,在后面可以用#row来引用这一行的变量。注意,s:iterator只能用于访问Collection型变量public cl原创 2014-03-20 10:19:56 · 1438 阅读 · 0 评论 -
s:if 流程控制
s:if 流程控制假设Action中一个Integer型变量status,则 enter if ... enter else ... 其中, test参数指定了测试条件,而该条件表达式可以像普通的java代码一样写 例如 test = "something != null"原创 2014-03-20 10:20:43 · 870 阅读 · 0 评论 -
struts2 - View页面中获取Action的成员变量
View页面中获取Action的成员变量按照Struts的设计,在Action处理完后,把结果数据保存在自己的成员变量里,然后跳至result指定的页面(VIEW页面)。VIEW页面负责展现处理结果,那VIEW中如何获取Action的数据呢?方法一:Struts2 Property Tag / OGNLhttp://struts.apache.org/2.x/docs/using-原创 2014-03-20 09:57:48 · 2264 阅读 · 0 评论 -
网站开发中,什么是过滤器,什么是拦截器,有什么区别?
Java Web有3种自带机制,Servlet,Filter,Listener。其中,Filter称为过滤器,也可翻译为拦截器。它们是同一个东西。原创 2019-08-18 16:41:08 · 1051 阅读 · 0 评论 -
一个中文字符对应几个字节?
这个和字符编码有关。所谓字符编码,就是规定了如何将字符串转成byte[]。同一个汉字,在不同的字符编码下,得到的结果也不同。例如,"中国"GBK编码:D6 D0 B9 FAUTF-8编码:E4 B8 AD E5 9B BD以GBK编码时,一个汉字得到2个字节。以UTF-8编码时,一个汉字得到2~3个字节。...原创 2019-08-18 16:42:23 · 7955 阅读 · 0 评论 -
网站后台如何判断客户端是来自手机、还是来自电脑?
( Java面试题 | Java学习指南 )在浏览器打开一个网址时,此时浏览器为客户端,你的网站后台tomcat为服务器,客户端向服务器传了一个HTTP请求。在HTTP请求的头部,有一个字段 User-Agent,用于表示客户端浏览器的类型、及操作系统的类型。以下是一 以个真实的HTTP请求抓包(客户端:小米浏览器)GET /qianwen/ HTTP/1.1Host:1...原创 2019-08-18 16:39:50 · 3040 阅读 · 0 评论