javaSE、javaEE、Android知识点总结
曾经上学时候的一些学习总结,如有错误请大家指出,共同学习。
1. 什么是WebView?
WebView是一个使用WebKit引擎的浏览器组件,用来加载网页。
2. WebView中加载网页的两种方式?
loadUrl(url) 通过url地址加载互联网或本地网页
如:loadUrl("http://www.baidu.com");
loadUrl("file:///android_asset/html/index.html");
loadData(data,type,encoding) 直接加载网页内容,容易乱码,一般用 loadDataWithBaseURL代替
3. WebView的三个辅助类是什么?
WebSettings、WebViewClient、WebChromeClient
4. WebSettings的作用是什么?
设置WebView的一些属性、状态等,例如允许使用javascript,允许使用缓存,允许使用内置的缩放组件
setJavaScriptEnabled(true); 设置支持js
5. WebViewClient的作用是什么?
主要帮助WebView处理各种通知、请求事件(例如,点击链接时候如何显示界面,页面开始加载,加载完毕之后有何动作等)
shouldOverrideUrlLoading() onPageStarted() onPageFinished()
6. WebChromeClient的作用是什么?
辅助WebView处理Javascript的对话框、网站图标、网站Title、加载进度等
核心方法有onJsAlert() onJsConfirm() onJsPrompt() onProgressChanged() onReceivedIcon()
onReceivedTitle()
7. WebViewClient中shouldOverrideUrlLoading方法作用
shouldOverrideUrlLoading方法控制超连接是否在当前WebView中打开。
8. android中如何调用js中的方法?
loadUrl("javascript:test()");
9. 页面js中调用android客户端的方法实现步骤?
1,添加javascript支持( webSettings.setJavaScriptEnabled(true);)
2,暴露一个java对象给js,使得js可以直接调用该实例中的公有方法,
(webview.addJavascriptInterface(object,"name");)
3,加载页面( webview.loadUrl(url);}
4,页面可以通过别名使用(window.name.方法名)
10. Socket编程的两种协议?
TCP (Transmission Control Protocol ) 传输控制协议
UDP (User Datagram Protocol) 用户数据报协议
11. TCP与UDP的区别。
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务,传输数据前经过“三次握手”建立连接,保证数据传输的可靠性,但效率比较低。一般用于对于数据传输安全性较高的场合。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议,面向无连接。UDP不提供可靠性,数据传输可能发生错序,丢包,但效率较高。一般用于对于实时性要求较高的场合。
12. Http编程的两种实现方式?( 网络互连的两种实现方式?)
HttpURLConnection(java.net.*) , HttpClient (org.apache.http.*)
13. HttpClient实现移动通信的步骤?
get请求是将请求参数直接追加在url后面,可以省略掉3,4步骤
1. 生成请求对象(HttpGet get,HttpPost post)
2. 设置连接参数,连接超时,读取超时(HttpParams , BasicHttpParams, HttpConnectionParams)
3. 构建请求参数列表 (NameValuePair,BasicNameValuePair, List<NameValuePair>)
4. 将请求参数列表封装成HttpEntity,并将其设置给请求对象 (UrlEncodedFormEntity, post.setEntity(reqEntity))
5. 生成客户端对象,并设置连接参数 HttpClient client = new DefaultHttpClient(connParams)
6. 执行请求接收响应,判断响应码,正常则接收响应数据
HttpResponse response = client.execute(post)
HttpEntity entity = response.getEntity()
7. 得到数据流,或文本数据
InputStream inputStream = entity.getContent();
String text = EntityUtils.toString(entity, "utf-8");
8. try--catch捕获异常,并分门别类处理,并给用户合理的异常提示
9. 关闭连接
14. 什么是ANR
ANR:Application Not Responding(应用程序无响应).当在某个应用主线程出现下列情况时,就会显示ANR对话框了:用户在进行了一种操作后5秒钟没有响应,BroadcastReceiver所进行的操作在10秒内没有完成,Service在20秒内没返回结果。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR,比如访问网络,SD卡读写, Sqlite数据库增删改查等。
15. 如何避免ANR (线程间通讯的两种方式是什么)
1. AsyncTask,其中doInBackground()和onPostExecute(Result)两个方法非常重要
doInBackground() 这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如访问网络。该方法必须重载。
onPostExecute(Result) 这个方法运行于UI主线程,在doInBackground(Params…)方法执行后调用,该方法用于接收后台任务执行后返回的结果,刷新UI显示。
2. 子线程 + handler
在子线程中需要刷新UI时通过handler.sendMessage()发消息给主线程, 然后在主线程Handler中的handleMessage()方法中执行刷新UI操作
16. AsyncTask三个泛型类型是什么意思。
第一个泛型类型Params----规定doInBackground()方法的参数类型,也是执行异步任务excute()方法的参数类型
第二个泛型类型Progress----规定onProgressUpdate()方法的参数类型,一般为Integer,表示进度
第三个泛型参数类型Result---规定onPostExcute()方法的参数类型,也是doInBackground()方法的返回值类型。
17. 谈谈AsyncTask中两个最重要的方法是什么,运行的特点。
doInBackground() 这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如访问网络。该方法必须重写。
onPostExecute(Result) 这个方法运行于UI主线程,在doInBackground(Params…)方法执行后调用,该方法用于接收后台任务执行后返回的结果,刷新UI显示。
18. Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message之间的关系)
Handler主要用于线程间的通信。
一个Handler允许发送和处理Message和Runable对象,UI主线程会自动分配一个Looper(消息轮询器),每个Looper中封装着MessageQueue(消息队列),遵循先进先出原则。Looper负责不断的从自己的消息队列里取出队头的任务或消息执行。一般是在子线程执行完耗时操作之后,通过Handler的sendMessage或post方法将Message和Runable对象传递给MessageQueue,而且在这些对象离开MessageQueue时,Handler负责执行他们(用到handleMessage方法,主要执行刷新UI的代码)。
其中Message类就是定义了一个信息,这个信息中包含一个描述符和任意的数据对象,这个信息被用来传递给Handler.Message对象提供额外的两个int域和一个Object域。
19. 移动互联数据交互格式有哪些及其区别?(Json与xml的区别?)
移动互联数据交互格式有XML和JSON
1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
20. XML解析有哪几种方式?
基本的解析方式有三种: DOM,SAX,Pull
21. XML解析各种方式的优缺点?
dom解析:解析器读入整个文档,然后构建一个驻留内存的树结构,然后就可以使用 DOM 接口来操作这个树结构。优点是对文档增删改查比较方便,缺点占用内存比较大。
sax解析:基于事件驱动型,优点占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的增删改,不能中途停止。
pull解析:同样基于事件驱动型,android 官方API提供,可随时终止,调用next() 方法提取它们(主动提取事件)
22. android官方推荐使用的解析XML的方式是?
PULL解析
23. PULL解析的5个事件类型是什么(eventType)
START_DOCUMENT END_DOCUMENT START_TAG END_TAG TEXT
24. SAX解析的5个方法是什么
startDocument endDocument startElement endElement characters
25. JSON的结构?
json是一种轻量级的数据交换格式,
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构
1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
26. 解析JSON的两种方式。
1,SDK提供JSONArray,JSONObject
2,google提供的 Gson
通过fromJson()实现对象的反序列化(即将json串转换为对象类型)
通过toJson()实现对象的序列化 (即将对象类型转换为json串)
27. 通过google提供的Gson解析json时,定义JavaBean的规则是什么?
1). 实现序列化 Serializable
2). 属性私有化,并提供get,set方法
3). 提供无参构造
4). 属性名必须与json串中属性名保持一致 (因为Gson解析json串底层用到了反射机制)
28. ListView优化策略?
主要是针对自定义BaseAdapter中getView()方法的优化
1)、convertView复用,对convetView进行判空,当convertView不为空时重复使用,为空则初始化,从而减少了很多不必要的View的创建
2)定义一个ViewHolder,封装Listview Item条目中所有的组件,将convetView的tag设置为ViewHolder,不为空时通过ViewHolder的属性获取对应组件即可
3)、当ListView加载数据量较大时可以采用分页加载和图片异步加载
29. ListView实现图片异步加载思路?
可定义图片异步加载工具类,核心方式实现思路如下:
1.先从内存缓存(Map<String,SoftReference<Bitmap>>中获取图片显示
2.获取不到的话从本地SD卡里获取并显示
3.都获取不到的话通过子线程从网络加载图片并保存到内存及SD卡中并通过handler显示
30.ListView实现分页加载思路?
ListView分页加载通常有两种实现方式:一种是ListView底部设置一个按钮,用户点击即加载;另一种是当用户滑动到底部时自动加载。
在此说一下第一种方式点击底部按钮即加载的实现思路 :
通过addFooterView()方法为listview底部加入一个“加载更多”按钮和加载进度的视图,默认按钮显示,加载进度为gone。当用户点击“加载更多”按钮时,按钮设置为gone,加载进度显示,并开启子线程从网络上加载下一页数据,加载完毕,发消息给handler,再handler的handleMessage()方法中通过adapter的notifyDataSetChanged方法通知listview刷新,显示刚加入的数据,并恢复按钮显示,加载进度隐藏。
31. webService有什么优点
Webservice就是为应用提供数据的Web服务。它的优点有:
1,基于标准 2,独立于语言及平台(即跨平台和语言) 3,松耦合
32. webService中SOAP是指什么
SOAP是web service的标准通信协议,SOAP为simple object access protocol的缩写,简单对象访问协议. 它是一种轻量的、简单的、基于 XML 的协议即一种标准化的传输消息的XML消息格式
33. webService中WSDL是指什么
WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。其主要目的在于web service的提供者将自己的web服务的所有相关内容,如所提供的服务的传输方式,服务方法接口,接口参数,服务路径等,生成相应的完全文档,发布给使用者。
34. webService中UDDI是指什么
UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。UDDI,英文为 "Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”。
35. WebService中传输的数据什么格式?
目前大部分WebService通过xml格式组织数据,而json格式可能成为将来WebService传输数据的一种趋势。
36. GPS定位与网络定位有何区别?
GPS定位需设置权限android.permission.ACCESS_LOCATION_FINE
网络定位需设置权限android.permission.ACCESS_LOCATION_COARSE
即GPS定位比网络定位在精确度方面更精准,但在速度方面稍差一些,而且GPS定位适合在室外环境下使用,网络定位在室内,室外都可以。
37. 百度定位的主要过程是?
1,实例化定位客户端对象(LocationClient)
2,注册监听(registerLocationListener(BDLocationListener))
3,设置定位参数(LocationClientOption)
4,请求定位(requestLocation())
5,在监听类中处理结果(监听类的onReceiveLocation方法会接收到BDLocation结果)
38. 使用百度地图的过程
1,注册百度开发者账号
2,申请Key (2.1.3版本前后申请key的方式不一样)
3,从开发者中心官网上下载相关的jar包so文件和demo(百度地图与定位采用分离的sdk)
4,在自己工程中导入相关的jar包和so文件。
5,加入地图相关的权限
6,按照百度地图API的规则书写代码
39. 展示百度地图基本图层涉及到的核心类有哪些?
BMapManager 地图引擎管理类
MapView 显示地图的View
40. 百度地图中搜索功能最重要的类和接口是
MKSearch MKSearchListener
41. 解释一下正向地理编码和反向地理编码(地址解析和逆地址解析)
正向地理编码是指将通过地址检索地理坐标点,即经纬度
反向地理编码是指通过坐标点检索详细地址
42. 介绍一下百度地图中常用的覆盖图层
我的位置图层(MyLocationOverlay):用于显示用户当前位置的图层(支持自定义位置图标)
Poi搜索结果图层(PoiOverlay):用于显示兴趣点搜索结果的图层;
自定义图层(ItemizedOverlay):可将一个或多个兴趣点绘制到地图上,且支持自定义图标(支持动态更新Item位置、图标)
注:如果需要给覆盖图层添加点击事件,可重写对应覆盖图层的onTap() 方法
43. 解释一下NDK
NDK 是 Native Development Kit 的简称。它是一个工具集,集成了 Android 的交叉编译环境,并提供了一套比较方便的 Makefile ,可以帮助开发者快速开发 C 或是 C++ 的动态库,并自动的将 so 和 java 程序打包成 apk ,在 Android 上运行。Android 上,应用程序的开发,大部分基于 Java 语言来实现。要使用 c 或是 c++ 的程序或库,就需要使用 NDK 来实现。
44. 解释一下JNI
JNI是Java Native Interface的缩写,中文为JAVA本地调用,即在Java代码中可以调用C或C++本地代码,在java中通过native关键字声明本地接口。
45. NDK开发过程中,编程生成so库的命令式什么?
ndk-build
注:cygwin工具可以在windows平台上模拟Linux运行环境
(深度扩展,42-44不作为考核点: NDK开发环境搭建(R7); NDK开发流程(native, javah, jni,android.mk,ndk-build, .so, armeabi))
46. 编码规范:
1)正确的缩进 (全选,ctrl +i)
2)合理的命名:所有命名要体现出其具体用途,使用英文命名,避免使用拼音
包名全部小写,清晰明确的包结构(entity, util, adapter...)
类名所有单词首字母大写
方法名第一个单词首字母小写后续单词首字母大写
成员变量: 1)非public, 非static的成员变量用m开头
2)非public, static的成员变量用s开头
3)public, static, final (常量)的成员变量全部大写,并且用单词之间用下划线隔开。其它的成员变量都用小写单词开头。
**********************************************************
简单来说,
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
**********************************************************
**********************************************************
- 什么是Servlet以及作用
Servlet是个接口。Servlet是Server applet,它可以运行在服务端的java小程序。Servlet 可以接受客户端发出的请求,并生成响应。还可以交互式的访问浏览器,修改数据,生 成动态页面。新建一个类继承GenericServlet类通常会实现service()方法;
- GenericServlet和HttpServlet的区别
GenericServlet和HttpServlet都是抽象类,都具有servlet功能;
GenericServlet它是一个与请求协议无关的类,而HttpServlet是请求的是Http协议;
继承GenericServlet它的类都要实现service()方法,继承HttpServlet它的类都要重写 doGet()和doPost()方法
HttpServlet是继承的GenericServlet类
- 怎么理解动态网页
动态网页可能在不同时间,不同人,不同的地点看到的数据可能都不一样;
它可以实现用户交互功能,数据实时更新
- Servlet生命周期
Servlet生命周期分为加载,实例化,初始化(init),执行(service),销毁(destroy)
在Tomcat启动之中会加载并解析web.xml,web.xml称之为核心文件,在web.xml文件 中进行配对servlet标签,在servlet标签中写servlet—class标签,在这对标签写包名+ 类名;把servlet加载到内存中,通过java里学过的反射找到这个类(Class.forName 方 法);接下来就是浏览器Http发出请求,显示new一个,紧接着就是调用init()方法, 如果请求servlet,则直接调用service()方法,最后就是调用destroy(),只有在重 新部署项目或是web.xml重新被加载才会调用destroy()方法进行servlet销毁
- Init()什么时候会被调用。
就是客户端发出请求去访问servlet的时候,init()方法会被调用,紧接着service() 被调用。
就是在我的web.xml中配置<load-on-startup></load-on-startup>
- 怎么理解Service()方法
首先service()是servlet接口的一个方法,它的主要作用接收客户端请求,处理,生成响应。在GenericServlet中service是一个抽象的方法,在HttpServlet中service()方法已经被开发人员重写,我们用的时候不需要重写此方法,但要重写doGet()
或者doPost()
- Servlet的配置(标签以及初始化参数)
<servlet>
<servlet-name>DemoSrevlet</servlet-name>
<servlet-class>com.bawei.demo.servlet.DemoSrevlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>张三</param-value>
</init-param>
<init-param>
<param-name>pass</param-name>
<param-value>111</param-value>
</init-param>
</servlet>
- Form表单两种提交方式的区别
Form表单两种提交方式get和post
Form表单默认的提交方式是get,get方式提交会把form表单的数据拼接到url的后面, 这样是不安全的,因为所有参数在url地址栏都能够看到
Get方式用的是西欧字符集(iso-8859-1)这样会出现乱码,如果有中文就需要转码,而 post提交方式不会出现乱码
Get的方式传递有限度最大255字节
- HttpServletRequest的常用方法
1.setCharacterEncoding("utf-8"); 设置请求的编码方式
2.getParameter(); 获取表单或者是url后面拼接的数据
3.getParameterValues(); 获取复选框的值,返回是String[]
4.getSession(); 获取httpsession
5.get/setAttribute(); 获取/设置值
6.getRequestDispatcher().forward(request,response); 转发
7.getReuqestURI(); 获取项目名和资源名
8.getContextPath(); 获取项目名
- HttpServletResponse的常用方法
1.setCharacterEncoding("utf-8"); 设置响应的编码方式
2.setContentType("text/html;charset=utf-8"); 设置响应的内容类型
3.setHeader("Refresh","3;url=index.jsp"); 刷新,在设定的时间进行跳转
4.setStatus(200); 设置状态码,200为正常
5.sendRedirect(); 重定向
6.getWriter(); 获得输出流
7.encodeRedirctURL(); URL重写
- 怎么使用监听器
什么是监听器:在javaEE中监听器可以实现对HttpServletRequest,HttpSession, HttpServletContext等对象进行监听其创建以及值得变化。
监听器:实现在线人数统计,网站访问次数
怎么用:实现HttpSessionListener(create,destory) HttpSessionBindingListener(valuebound,valueunbound)(唯一一个不需要在web.xml中配置)。
- 怎么使用过滤器
- 过滤器就是阻止非法登陆。非法登陆就是未登陆直接在地址栏中填写所要请求的资源。
- 有两种情况是不阻止的:
- 请求的资源为登陆页面
- 地址栏中填写的是登陆的资源。
- 获取web.xml中配置的编码格式:getInitParameter();
- 过滤字符集:在web.xml中配置filter标签。Filter标签下有filter_name,里面一般为类名;filter_class里面是包名和类名;init_param下有param_name和param_value;param_value中的值是编码格式。
- 获取工程的项目名和资源名:getRequestURI();
- 获取工程的项目名:getContextPath();
- 字符串截取:subString();
- Session和Cookie的区别
a) Cookie是客户端建立的,保存在客户端的硬盘上,有些数据(比如说用户名或者密 码)我们可以通过找到相应的Cookie文件找到值,这样的话,容易泄漏个人信息。
b)session是由服务端创建,用于维护整个会话过程中数据的保存。
c) session的唯一标识是通过其id进行标识的,在客户端这个id保存在Cookie中。
- URL重写
response.encodeRedirectURL("success.jsp");
response.sendRedirect("");
- 什么是Session?
Session可以理解成会话,就是用户与服务器进行一系列交互的整个过程
- Session的作用域,以及常用方法
Session的作用域:
session是由服务端创建,用于维护整个会话过程中数据的保存。
session的唯一标识是通过其id进行标识的,在客户端这个id保存在Cookie中
session常用方法
1.set/getAttribute(); 设置/获得session值
2.removeAttribute(); 移除session对象
3.getId(); 获取sessionId
4.setMaxInactiveInterval(); 设置session活跃时间
5.invalidate(); 销毁session
6.getServletContext();
7.isNew()
- Session失效的几种方法
a) session.invalidate(); // 销毁
b) session.setMaxInactiveInterval(300000);//毫秒 session默认存在时间为30分钟 设置 session的最大活跃时间
c) 在web.xml中配置<session-config> 单位为分钟
<session-timeout>10</session-timeout>
d) 关闭浏览器(不考虑缓存)
e) 重启服务器
- Page,Request,session,application 作用域
page 的作用域最小,只是在当前页面有效;
request 的作用域比page 大,一次请求,一次响应,也就完了
session 的作用域存在于整个会话,只要会话存在,session的作用域就在
application的作用域最大;只要服务器不关,它就存在
- 转发和重定向的区别
1. 转发: request.getRequestDispatcher().forward(); //在服务端完成
重定向: response.sendRedirect(); //在客户端完成的
2. 地址栏发生变化:
转发:地址栏还是原来的请求的url (registerServlet)
重定向:地址栏发生变化,是重定向的资源名(login.jsp)
3.请求次数不同:
转发:一次请求一次响应
重定向:二次请求,二次响应。第一次响应是临时响应,状态码为300,用户看不到 任何变化,此时系统会再次发出请求到重定向的资源上,然后响应。
4.作用域不同:
转发:可以取到放到request中的值,而重定向不可以。
- Properties文件有什么用
把一些经常用的代码放到Properties文件里,方便使用
jdbc
- ServletConfig和ServletContext使用
ServletConfig 它存储的信息只能被当前的Servlet调用,信息不能被其他servlet共享
ServletContext这个对象存放context-param中的值,而servletConfig对象存放servlet标签的下的 init-param的值
获得servletContext这个对象,我们用 ServletConfig.getServletContext()方法。
取值的方式和servlet一样。
区别:ServletConfig和ServletContext
1. 这个对象存放context-param中的值,而servletConfig对象存放servlet标签的下的init-param的值
2. ServletContext的值可以被所有的Servlet共享,而ServletConfig里面的值只能被它自己使用。
- Jsp的运行过程
Java Server Pager 是动态网页的一种,运行在服务端的页面
a) 服务器接收到请求页面,首先把该页面转换成servlet实例,生成java文件
b) 编译java文件,生成class文件
c) 运行类文件,生成响应。
- Jsp的指令元素有哪些
Page指令 include指令 taglib指令
- Jsp内置对象
out 类型 JSPWiter
request HttpServletRequest
response
session HttpSession
application ServletContext
config ServletConfig
page Object
exception Throwable
pageContext PageContext
- EL表达式
EL(expression language)表达式语言
EL它可以减少代码量,省去类型强制转换
EL的语法是${}组成
EL的常用内置对象:
pagescope requestScope sessionScope applicationScope
EL是从小到大拿值的
- JSTL的常用标签使用
表达式标签:set(相当于session.setAttribute(“”),(“”))
Out(相当于out.println())
Remove(相当于session.remove Attribute(“”))
流程控制标签:if choose when otherwise
循环控制标签:for:Each for:Tokens
- 实现购物车的思路
- 注册登录(判断用户是管理员还是普通用户)
- 商品的上架、下架和修改
- 登录后查看个人信息,查看购物车信息
- 添加购物车。(同种商品只在数量上增加)
- 结账
- 注销
- Ajax有什么好处
1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。
2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力
3、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。
4.ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造 成的负担
- 怎么解决项目的乱码问题
- 乱码会出现在Jsp页面。
1.可能造成的原因是Jsp页面没有改编码格式,应该把pageEncoding的值改为utf-8。
2.servlet未设置响应编码格式。用response.setCharacterEncoding()来设置响应的编码格式。
- 乱码会出现在servlet中。可能是未设置请求的编码格式。如果是超链接或form表单提交,它的默认提交方式是get。Get提交的默认编码格式是ISO-8859-1。若是有中文则需要转码。而post方式不用,也不会出现。
- 乱码会出现在数据库中。数据库的字符集编码格式和请求的编码格式不一致。
**********************************************************
- 在JAVA中“==”和 equals方法都是用来做比较,请问二者有何不同?
“==”等于符号在JAVA中用来比较内存地址,两个字符串对象,尽管内容一模一样,但内存地址是不同的,当你拿==做比较时,得到的结果必然是false。因此若要比较这两个字符串对象内容是否相等的话,应该使用equals方法,对于自定义的类,两个对象如果想通过equals方法来比较内容,必须要重写Object类的equals方法。
- 请简述JAVA中方法重载和方法重写的区别
子类继承父类时,同时会继承父类方法,但有时父类方法无法满足需要,所以子类可以重写父类的方法以满足子类的需求。而方法重载则是在一个类中,定义多个名字相同的方法,同时使用参数的不同来区分这些方法。
- 请简要说明构造方法的作用?以及它的特点
构造方法用来创建对象,它不可随意调用,要配合new关键字来使用,它没有返回值类型,方法名称必须和类名完全相同,也不可以使用static、final等修饰符来修饰。
- String类型的变量在赋值时,可以用“abc”字符串常量赋值,也可以用new关键字赋值,请问二者有什么区别?
在JAVA中String类创建对象有两种方式,通过new关键字创建对象,我们称之为显式的创建对象,使用“abc”常量赋值,我们称之为隐式创建,实际上,在隐式创建的时候,编译器同样会帮我们加上new关键字,但这种创建对象的方式跟显式略有不同,它首先会去堆内存的字符串常量池里面寻找是否已经存在内容为"abc"的对象,如果存在,就把对象的地址赋给该引用,而不会创建的新的对象出来,这是JAVA为了节省内存空间而特意设计的。因此,使用new关键字每次都会创建新的对象出来,而使用常量赋值,如果字符串内容相同的话,所有的引用都会指向同一个对象。
- 泛型的好处??
泛型的好处是在编译的时候检查数据类型,防止类型转换错误,同时减少手动类型转换的次数
- SQL预编译的好处?
提前把SQL语句载入内存缓冲区,提高运行效率。并且可以有效的防止SQL注入!
- 运行时异常与一般异常有何异同?
java编译器要求必须对非运行时异常进行try-catch处理,如果不处理,就要在方法后声明可能抛出的异常,而对于RuntimeException则没有强制要求进行异常处理。
- final, finally, finalize的区别?
final 用于声明属性,方法和类,分别表示属性不可变,方法不可重写,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法
- 请写出你最常见到的5个runtime exception。
NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、
NumberFormatException、ArithmeticException
- 什么情况下调用doGet()和doPost()?
当使用Get方式请求服务器的时候,调用doGet方法
当使用Post方式请求服务器的时候,调用doPost方法
- 简述设置Session失效的几种方法
在tomcat的web.xml文件中进行设置
在WEB项目的的web.xml文件中进行设置
使用session.setMaxInActiveInterval(9000);
- 简述线程的生命周期
当创建完成一个线程对象时,调用start方法,线程进入就绪状态,当操作系统将CPU分配给该线程时,线程进入运行状态,如果在运行过程中,线程遇到阻塞条件,则进入阻塞状态,当阻塞条件解除时,线程恢复到就绪状态,当线程对象的run方法执行结束时,线程进入死亡状态。
- 简述List,set,Map有什么区别?
List和Set都属于Collection集合,也就是继承自Collectin接口。而Map集合跟Collection并列为JAVA当中的两大集合接口。Map集合的特点是以键值对的方式来存储数据。
- 说说对面向对象的三大特性的理解
封装:对于私有化的属性或方法,我们通过公有的方法让外界来访问,在公有的方法中,我们可以做一些相应的权限控制。这是封装的第一大好处。第二大好处是隐藏细节,将一段复杂的逻辑隐藏起来,对外提供一个简单的接口来调用。
继承:子类继承父类的属性和方法,同时添加自己的属性和方法以扩展父类的功能
多态:两种表现形式,一种叫方法重载,一种叫方法重写。
- 简述转发和重定向的区别
转发指的是在服务器内部,一个Serlvet/Jsp转向另外一个Servlet/Jsp,这个过程对客户端(浏览器)是不可见的,因此对客户端来讲,只发送了一次请求。转发的特点是:在服务器内部Servlet进行转向时,request和response对象在转发的过程中,所有Servlet/Jsp中是共享的。
重定向是指客户端发起第一次请求,服务器响应客户端,并通知客户端按照指定的地址再次向服务器发起第二次请求。
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法(原因)?
举例:当线程X进入某对象的同步方法A时,其它线程此时不能再执行该对象的A方法,因为对象的锁已经被X占用了。并且,此刻该对象的所有同步方法,都是不能被访问的。
如果该对象还拥有其它的非同步方法B,那么B方法是可以随时被其它线程访问的,因为访问非同步方法根本不需要去获得对象锁。
- 简述GenericServlet和HttpServlet的区别
GenericServlet提供了对Servlet接口的基本实现,但没有实现service方法,HttpSerlvet扩展(继承)了GenericServlet的功能,重写了service方法,提供了针对HTTP协议的具体实现。
- JSON数据和XML数据的区别?
相比较XML,Json是一种轻量级的数据格式。因为它编写简单,易于阅读,占用空间小,网络传输速度快,解析速度也比较快,尽管Json有着诸多的好处,但它仍然不能完全替代XML。因为在扩展性上,XML要远远高于Json。因此对于任何一种数据,XML都可以更完整更清晰将数据进行描述。例如webservice技术当中使用的远程传输soap协议,为了能更完整清晰表达数据包的内容,仍然采用XML的形式来传输数据。json之所以在web开发中有着如此高的地位,本质原因还是因为javascript的支持,因为JS解析和生成json对象是如此的简单。因此如何选择使用哪种格式来表示数据,要取决于多种因素,不同的场景和需求下,JSON和XML会表现出不同的优势。
- Collection和Collections的区别?
Collection是List集合和Set集合的父接口,Collections是一个类,它提供了包括排序,复制,反转,搜索等操作集合的各种方法。
- error和exception有什么区别
error代表与代码无关的,无法处理的严重错误,例如内存溢出等,程序员不需要手动处理,exception是一种错误消息,代表了系统内置的或者自定义的程序异常状况。可以由程序员手动去拦截消息,并作出相应处理。
- List,Set,Map是否继承自Collection接口
List和Set都继承自Collection接口,Map不是
- ArrayList和LinkedList区别?
ArrayList为数组存储结构,LinkedList为链表存储结构。由于有下标的存在,ArrayList集合访问速度比较快,但集包含元素过多时,插入或删除元素效率会比较低。相反,LinkedList集合访问速度较慢,但插入删除比较快。
- 请解释什么叫同步,什么叫异步
同步指的是按步骤按顺序,同步访问也就是挨个排队访问,异步指的是同时,异步访问也就是同时访问。
- JAVA实现多线程有几种方法?
继承Thread类并重写run方法或实现Runnable接口
- 什么叫做case穿透现象?
如果case语句后面没有break,当case条件满足时,将会执行当前case语句包括后面的所有语句
- break和continue的区别是什么?
break代表终止当前整个循环体,continue代表跳过循环体的本次循环,直接进入下一次循环
- String和StringBuffer的区别?
String是不可变字符串,StringBuffer是带缓冲的可变字符串,所以字符串对象在频繁修改内容的时候,使用String是效率不高的,应该使用StringBuffer
- 线程阻塞状态和就绪状态有什么区别?
阻塞状态指的是,线程遇到某种阻塞条件,而放弃CPU。暂时停止运行。
当一个线程被标记为阻塞状态时,JVM会将其放入相应的阻塞区域(等待、同步锁)
当该线程的阻塞状态取消时,JVM将其放入可运行区域。此时线程才有可能获得CPU,我们将其成为就绪状态。
- 解释什么叫死锁?
所谓死锁,是指两个或多个线程因为抢夺资源而各自进入了一种无法解除的阻塞状态,我们将这种现象称之为死锁。死锁是无法完全避免的,因此在程序设计当中,我们应尽力避免多个线程之间相互抢占对方需要的资源,从而最大限度的减少死锁的发生。
- DOM解析和SAX解析在性能上有什么优劣?
由于dom解析的方式是将整个XML文件一次读到内存中,因此不太适合处理大型的XML文件。SAX为逐行读取逐行解析。API相对简单,易于编写。
- TCP协议和UDP协议的区别?
TCP叫做传输控制协议。是一种比较可靠的通信协议,在每一次通信之前,需要先以三次握手的方式建立连接,通信过程中每一次发送数据,都需要得到对方回复确认,否则会重复发送消息,直到对方确认回复。这样就确保了每一个数据包都能正确的送达对方那里。
UDP叫做用户数据报协议。是一种不可靠的通信协议,发送消息时,不需要建立连接,也不需要对方回复,难以保证数据可以正确的送达。
- 简述JDBC编程步骤?
- 使用Class.forName加载驱动
- 通过DriverManager获取Connection连接对象
- 通过Connection创建Statement对象
- 使用Statement对象执行sql语句
- 如果是查询的话,使用ResultSet获取结果集
- 遍历结果集获取数据
- 关闭连接
- 简述AJAX编程步骤
- 创建XMLHttpRequest对象
- 使用open方法设置请求参数(get/post,url,syn)
- 给onreadystatechange事件添加回调函数,处理返回的数据
- 使用send方法进行提交
- 简述编写Servlet的步骤
- 编写一个类,继承HttpServlet
- 重写doGet、doPost方法
- 修改web.xml文件,配置访问路径
- 请简述Servlet生命周期
当第一次访问Servlet程序时,程序会创建该Serlvet的一个实例对象,并调用init方法对其进行初始化,以后每次访问Servlet都会调用该对象的service方法,当服务器要销毁一个Servlet对象时,调用它的destory方法。
- 简述JAVA跨平台的原理
JAVA之所以能跨平台,得益于JAVA虚拟机,在任何操作系统下,都有相应版本的虚拟机,我们把编译好的class文件,放在任何一台虚拟机上,都可以正常运行。这样我们就利用虚拟机屏蔽了操作系统的不同,即达到了一次编写处处运行的效果。
- HashMap和HashTable的区别是什么?
HashTable是一个线程安全的集合,并且HashTable不允许key-value为null
以流的方式来读写一个JAVA对象,就叫做JAVA的序列化,要想实现序列化,对象的类必须实现一个简单接口,叫做Serializable
- JDK、JRE、JVM分别是什么?有什么区别?
JVM:虚拟机 JRE:JAVA运行时环境 JDK:JAVA开发工具包
JVM+基本类库=JRE JRE+编译工具=JDK
- static方法能否访问非static方法,为什么?
当然不能,静态方法属于类,非静态方法属于对象,当你调用一个静态方法时,无法保证已经存在该对象。(因为静态方法也可以通过类名来调用)。非静态方法也叫做成员方法,是属于对象的,在成员方法中,可以调用任何静态资源(属性和方法),因为静态资源是所有对象共享的。