• 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 (常量)的成员变量全部大写,并且用单词之间用下划线隔开。其它的成员变量都用小写单词开头。

    **********************************************************

     

    1.抽象类与接口的区别(abstract与interface的 
    简单来说,
    接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,

    另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

    还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
    2.简述掌握侧滑菜单的实现步骤
        要实现ViewPager+Fragment的滑动效果,必须继承FragmentActivity,同时要
    给ViewPager设置Adapter。由于ViewPager上面要加载Fragment(需要继承Fragment
    类),所以不是重载PagerAdapter,而是重写FragmentPagerAdapter类
      写好了adapter,在主函数的onCreate()函数里面初始化ViewPager,同时给
    它配置adapter和设置滑动事件监听(这需要实现OnPageChangeListener接口)
      接下来要做的就是在onCreate()里面初始化RadioButton,并给它设置
    OnClickListener监听点击事件
    最后就是实现侧滑出左边页面的效果,这里使用了开源组件SlidingMenu,
    SlidingMenu组件重写了Activity、FragmentActivity、RelativeLayout等,要实现侧滑
    效果,可以把主函数继承的FragmentActivity改成SlidingFragmentActivity,也可以
    去在xml布局文件里面直接设置
    3.JAVA中单例模式的俩种实现方式写代码?
       懒汉式:
      public class Singleton {
       private static Singleton singleton;
       // 构造方法私有化,保证在类的外部无法实例化该类的对象
       private Singleton() {
       }
       public static synchronized Singleton getSingletonInstance() 
    {
       if (singleton == null) {
       singleton = new Singleton();
       }
       return singleton;
       }
      
      }
     
      饿汉式:
           类加载的时候就实例化该类的对象
      public class Singleton {
       private static Singleton singleton = new Singleton();
      
       // 构造方法私有化,保证在类的外部无法实例化该类的对象
       private Singleton() {
       }
       public static Singleton getSingletonInstance() {
       return singleton;
       }
      }
    4.Android中如何实现一键退出?
    答:定义一个类继承Application,定义一个集合存放所有的activity, 定义一个添
    加的方法,再写一个退出的方法,使用for循环集合,集合中的每个元素调用finish方法,然后在每个Activity的onCreate方法中调用自定义类
    里的添加方法,然后在需要使用一键退出的地方调用类中的退出方法即可。
    5.:Intent的原理,作用,可以传递哪些类型的参数?
    答:intent是连接Activity, Service, BroadcastReceiver, ContentProvider四大组件的信使,,可以传递八种基本数据类型以及string, 
    Bundle类型,以及实现了Serializable或者Parcelable的类型。
    Intent可以划分成显式意图和隐式意图。 
    显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。 
    隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。
    6.比较String,StringBuffer,StringBuilder区别?
    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,
    即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个
    StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以
    使用StringBuffer。
    StringBuilder与StringBuffer的区别。
    StringBuffer
     1,一个类似于 String 的字符串缓冲区,对它的修改的不会像String那样重创建对
    象。
     2,使用append()方法修改Stringbuffer的值,使用toString()方法转换为字符串。
     Stringbuild是jdk1.5后用来替换stringBuffer的一个类,大多数时候可以替换
    StringBuffer。和StringBuffer的区别在于Stringbuild是一个单线程使用的类,不值
    执行线程同步所以比StringBuffer的速度快,效率高。是线程非安全的。
    7.谈谈MVC在Android中的应用?
    Android中界面部分也采用了当前比较流行的MVC框架。
    在Android中: 
    1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方
    便的引入。也可以使用JavaScript+HTML等的方式作为View层,通过WebView组
    件加载,同时可以实现Java和JavaScript之间的通信。 
    2) 控制层(Controller):这句话也就暗含了不要在Acitivity中写代码,要通过Activity
    交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity的响
    应时间是5s,如果耗时的操作放在这里,Android的控制层的重任通常落在了众多
    的Acitvity的肩上,程序就很容易被回收掉。
    3)模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,
    当然对业务计算等操作也是必须放在的该层的。
    在Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据。在控制层上将数据按照视图模型的要求(也就是Android SDK中的Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定。比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就在ListView中显示。
    8.SQLite主要通过那两个类实现其功能的?
    答:SQLiteOpenHelper:这个类是数据库的帮助类;用来进行数据库的创建;表的创建,以及版本的更新
    SQLiteDatabase: 这个类里 封装了对表的具体的操作的方法,比如 增删改查的方法。
    9.创建线程的两种方式以及区别?
    创建线程的第一种方式:继承Thread类
    创建线程的第二种方式:实现Runable接口
    两种方式区别:
    继承Thread: 线程代码存放Thread子类run方法中。
    实现Runnable,线程代码存在接口的子类的run方法。
    实现Runnable接口相对于继承Thread类来说,有如下的显著优势:
       1.适合多个相同代码的线程去处理同一个资源的情况
       2.可以避免由于java的单继承特性带来的局限
       3.增强了程序的健壮性,代码能够被多个线程共享,代码与数据时独立的。
    所以在定义线程时,建议使用实现方式。
    10.ViewPager、ViewFlipper与ViewFlow之间的差异?(20分)
    1.答:ViewPager与ViewFlow都能够使用适配器(ViewPager--PagerAdapter;
    ViewFlow--BaseAdapter)进行大量数据的适配,并且ViewFlow也带有原点和标题的位置提示,二者比较相像;
    2、ViewFlipper
    使用时主要在有限的少数页面切换中比较合适,并且能够自定义每一个切换动画,
    用于一个应用间的画面切换比较合适,类似于ActvityGroup;
    3、ViewFlow由于提供源码,所以在扩展上更强,可根据需要自行定制,比如加入
    循环播放等。
    11.谈谈UI中, Padding和Margin有什么区别,gravity与layout_gravity的区别?
    Padding 用来指定组件内的内容距离组件边界的距离;
        Margin用来指定控件与控件之间的距离
    Gravity用来指定组件内的内容相对于组件本身的位置
    Layout_gravity用来指定组件相对于其父组件的位置

    **********************************************************

    1·什么是类? 
    具有属性,行为的一组对象的模版或集合。
    ----------------------------------------
    2·什么是对象?
    对象是类的实例。
    ----------------------------------------
    3·数据类型
    基本数据类型(8个)、引用数据类型(除基本数据类型都是引用数据类型如数组、集合、枚举等)
    --------------------------------------------------------------------------------------
    4·内部类和匿名内部类
    匿名内部类是没有名字的内部类,不能继承其他类,但一个内部类可以作为一个接口,由另一个内部类实现。
    static 可以修饰内部类,不能修饰外部类。
    不能从一个静态内部类的对象访问一个外部类的对象。
    ---------------------------------------------------------------------------------------
    5·&和&&的区别
     
    &是按位“与”,&&是逻辑“与”也叫“短路与”。
    一个运行程序中如果有错,&会走完程序在报错,&&会走到错的地方就停止
    ------------------------------------------------------------
    6·Connection和Connections的区别
    Connection是集合类的上级接口,继承他的接口主要有set和list。
    Connections是针对集合类的一个帮助类他提供一些静态方法实现对各种集合的搜索、排序线程安全化等操作。
    ----------------------------------------------------------------------------------------
    7·什么时候用assert(断言)
    断言是软件开发中的一种常用的调试方式,很多语言开发中都支持这种机制。
    ----------------------------------------------------------------------------------------
    8·接口可以继承接口用extends,抽象类可以实现接口,抽象类可以继承实体类。
    java是单继承,接口弥补了java单继承的缺点,一个类可以实现多个接口。
    -------------------------------------------------------------
    9·switch的参数
    int、short、char、byte、string可以传递,long不可以。
    -------------------------------------------------------------
    10·HashMap和HashTable有什么区别?
    HashTable是基于陈旧的Dictionary类,HashMap是引用Map接口的一个实现
    HashMap不是同步的,是线程不安全的。HashTable是同步的,线程安全
    --------------------------------------------------------------
    11·char变量中能不能储存一个汉字?
    char是采用Unicode编码的,Unicode中包含了汉字,当然能储存汉字,Unicode占两个字节。
    ----------------------------------------------------------------------------
    12·java异常处理机制
    try、catch、finally、throw、throws
    try里捕获有问题的语句,由catch解决问题,
    throw抛出语句异常,throws抛出方法异常。
    ---------------------------------------
    13·静态变量和实例变量的区别?
    语法定义上区别:静态变量前要加上static关键字,实例变量不加。
    程序运行上区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用。
    静态变量只占一个内存空间,实例变量有多少个实力,就有多少个内存空间。
    静态变量比实例变量先分配内存。
    ----------------------------------------------------------------------------------------------
    14·preparedstatement和statement有什么区别?
    性能提高,可以防止sql注入。
    preparedStatement 进行预编译,下次执行相同的sql语句时,数据库端不会再进行编译了,而直接用数据库的缓冲区,
    提高数据访问的效率.而statement没有预编译功能。
    -----------------------------------------
    15·String和StringBuffer和StringBuilder的区别?
    String的长度是不可变的StringBuffer和StringBuilder的长度是可以变的
    StringBuilder是安全的,StringBuffer是不安全的。
    ------------------------------------------------
    16·抽象类于接口的区别?
    abstract可以修饰抽象方法,而一个类只要有一个抽象方法就必须用abstract定义该类,即抽象类,抽象类被继承,实现他的方法,可以只有普通方法
    interface修饰的类里面都是抽象方法不能被实例化,因此定义接口的时候不加修饰符。
     
    ------------------------------------------------------------------------------------------------
    17·线程有几种状态?
    新建状态(new)新创建了一个线程对象。
    就绪状态(runnable)创建完成后其他线程调用了start()该状态处于可运行池中,等待获取CPU使用权。 
    运行状态(running)就绪状态的线程获得了CPU,执行了run()方法。
    阻塞状态(blocked)阻塞状态是因为线程的某种原因放弃CPU使用权,wait()join()yelid()sleep()。
    死亡状态(dead)java执行完了或因异常退出了run()方法,结束了线程的生命周期。
    ------------------------------------------------------------------------------------------------
    18·如何实现多线程,这两种方式的区别?
    多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
    java是一个单继承的语言,如果通过继承Thread类实现了多线程,那么此类就不能继承其他类;如果通过实现Runnable接口来实现多线程,
    那么此类还可以继承其他类。Runnable接口能够实现资源共享。
    ------------------------------------------------------------------------------------------------
    19·final和finally和finanlize的区别?
    final用于声明属性、方法和类。修饰的属性不可变,修饰的方法不可被覆盖(重写),修饰的类不能被继承。
    finally是异常处理语句结构的一部分,表示总被执行。
    finanlize是object类的一个方法,在垃圾收集器执行的时候会调用被收回对象的方法,可以覆盖方法提供垃圾收集时的其他资源回收。
    -------------------------------------------------------------------------------------------------
    20·转发和重定向的区别
    转发: request.getRequestDispatcher().forward(); //在服务端完成
    重定向: response.sendRedirect(); //在客户端完成的
    地址栏发生变化:
      转发:地址栏还是原来的请求的url (registerServlet)
      重定向:地址栏发生变化,是重定向的资源名(login.jsp)
    请求次数不同:
      转发:一次请求一次响应
      重定向:二次请求,二次响应。第一次响应是临时响应,状态码为300,用户看不到 任何变化,此时系统会再次发出请求到重定向的资源上,然后响应。
    作用域不同:
      转发:可以取到放到request中的值,而重定向不可以。
    ----------------------------------------------------------------------------------------------------
    21·Jsp的运行过程
    Java Server Pager 是动态网页的一种,运行在服务端的页面
    a) 服务器接收到请求页面,首先把该页面转换成servlet实例,生成java文件
    b) 编译java文件,生成class文件
    c) 运行类文件,生成响应。
    ----------------------------------------------------------------------
    22·什么是servelt?servlet的作用?
    java语言编写运行在web服务器的一个java类。
    通过客户的请求做出判断,生成一个响应,在返回给客户。
    -----------------------------------------------------
    23·jsp和servlet区别
    jsp经编译后就变成了Servlet.JSP的本质就是Servlet,
    jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
    Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,
    由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
    Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
    -------------------------------------------------------------------------------------------------------
    24·java泛型的好处
    java语言引入泛型的好处是安全和简单,泛型的好处是在编译的时候检查类型安全,
    并且所有强制类型转换都是自动的,提高代码的重用率。
    ------------------------------------------------------------------------
    25·tcp和udp的区别
    TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务;
    TCP具有 高可靠性,确保传输数据的正确性,不出现丢失或乱序;
    UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,
    所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;
    IP是网际协议
    HTTP即超文本传输协议。.
    --------------------------------------------------------------------------
    26·ArrayList和LinkedList的区别
    ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
    LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引但是缺点就是查找非常麻烦要丛第一个索引开始
    -----------------------------------------------------------------------------------------------------------
    27·==和equals的区别
    总之,"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.
    或者说,,"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.
    ----------------------------------------------------------------------------
    28·error和exception
    Error
    动态链接失败,虚拟机错误等,通常Java程序不应该捕获这类异常,也不会抛出这种异常。
    Exception
    运行时异常
    继承于RuntimeException。Java编译器允许程序不对它们做出处理。
    非运行时异常
    除了运行时异常之外的其他由Exception继承来的异常类。Java编译器要求程序必须捕获或者声明抛出这种异常
    -----------------------------------------------------------------------------------------------------------
    29·数组跟集合的区别
    一:数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。
    二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。
    三:数组是一种可读/可写数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方 
     只读方式来使用集合。该方法将返回一个集合的只读版本。
    -------------------------------------------------------------------------------------------
    30·Servlet生命周期
    先实例化Servlet调用init方法进行初始化,之后一次或多次调用service方法,最后调用destroy方法销毁。
    -------------------------------------------------------------------------------------------
    31·静态方法能不能访问非静态方法?
    不能,静态方法是属于类的,类存在这个方法就存在,而非静态方法是属于对象的,必须实例化对象来调用
    --------------------------------------------------------------------------------------------
    32·MVC原理
    模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
    视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
    控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
    android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:
    1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如果你对android了解的比较的多了话,就一定可以想到在android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通信,幸运的是,android提供了它们之间非常方便的通信实现。
    2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
    3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

    **********************************************************

     

    1. 什么是Servlet以及作用

           Servlet是个接口。Servlet是Server applet,它可以运行在服务端的java小程序。Servlet 可以接受客户端发出的请求,并生成响应。还可以交互式的访问浏览器,修改数据,生       成动态页面。新建一个类继承GenericServlet类通常会实现service()方法;

     

    1. GenericServletHttpServlet的区别

    GenericServlet和HttpServlet都是抽象类,都具有servlet功能;

    GenericServlet它是一个与请求协议无关的类,而HttpServlet是请求的是Http协议;

    继承GenericServlet它的类都要实现service()方法,继承HttpServlet它的类都要重写                 doGet()和doPost()方法

    HttpServlet是继承的GenericServlet类

     

    1. 怎么理解动态网页

    动态网页可能在不同时间,不同人,不同的地点看到的数据可能都不一样;

    它可以实现用户交互功能,数据实时更新

     

    1. 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销毁

     

    1. Init()什么时候会被调用。

    就是客户端发出请求去访问servlet的时候,init()方法会被调用,紧接着service()          被调用。

    就是在我的web.xml中配置<load-on-startup></load-on-startup>

     

    1. 怎么理解Service()方法

    首先service()是servlet接口的一个方法,它的主要作用接收客户端请求,处理,生成响应。在GenericServlet中service是一个抽象的方法,在HttpServlet中service()方法已经被开发人员重写,我们用的时候不需要重写此方法,但要重写doGet()

    或者doPost()

     

    1. 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>

     

    1. Form表单两种提交方式的区别

    Form表单两种提交方式get和post

    Form表单默认的提交方式是get,get方式提交会把form表单的数据拼接到url的后面,          这样是不安全的,因为所有参数在url地址栏都能够看到

    Get方式用的是西欧字符集(iso-8859-1)这样会出现乱码,如果有中文就需要转码,而        post提交方式不会出现乱码

    Get的方式传递有限度最大255字节

     

    1. 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();  获取项目名

     

    1. 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重写

     

    1. 怎么使用监听器

    什么是监听器:在javaEE中监听器可以实现对HttpServletRequest,HttpSession,                              HttpServletContext等对象进行监听其创建以及值得变化。

    监听器:实现在线人数统计,网站访问次数

    怎么用:实现HttpSessionListener(create,destory) HttpSessionBindingListener(valuebound,valueunbound)(唯一一个不需要在web.xml中配置)。

     

    1. 怎么使用过滤器
      1. 过滤器就是阻止非法登陆。非法登陆就是未登陆直接在地址栏中填写所要请求的资源。
      2. 有两种情况是不阻止的:
        1. 请求的资源为登陆页面
        2. 地址栏中填写的是登陆的资源。
      3. 获取web.xml中配置的编码格式:getInitParameter();
      4. 过滤字符集:在web.xml中配置filter标签。Filter标签下有filter_name,里面一般为类名;filter_class里面是包名和类名;init_param下有param_name和param_value;param_value中的值是编码格式。
      5. 获取工程的项目名和资源名:getRequestURI();
      6. 获取工程的项目名:getContextPath();
      7. 字符串截取:subString();

     

    1. SessionCookie的区别

           a) Cookie是客户端建立的,保存在客户端的硬盘上,有些数据(比如说用户名或者密                 码)我们可以通过找到相应的Cookie文件找到值,这样的话,容易泄漏个人信息。

           b)session是由服务端创建,用于维护整个会话过程中数据的保存。

           c) session的唯一标识是通过其id进行标识的,在客户端这个id保存在Cookie中。

     

    1. URL重写

           response.encodeRedirectURL("success.jsp");

           response.sendRedirect("");

     

    1. 什么是Session

    Session可以理解成会话,就是用户与服务器进行一系列交互的整个过程

     

    1. 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()

     

    1. Session失效的几种方法

           a) session.invalidate(); // 销毁

           b) session.setMaxInactiveInterval(300000);//毫秒  session默认存在时间为30分钟 设置           session的最大活跃时间

        c) 在web.xml中配置<session-config>  单位为分钟

          <session-timeout>10</session-timeout>

        d) 关闭浏览器(不考虑缓存)

        e) 重启服务器

     

    1. Page,Request,session,application 作用域

      page 的作用域最小,只是在当前页面有效;

      request 的作用域比page 大,一次请求,一次响应,也就完了

      session 的作用域存在于整个会话,只要会话存在,session的作用域就在 

      application的作用域最大;只要服务器不关,它就存在

     

    1. 转发和重定向的区别

           1. 转发: request.getRequestDispatcher().forward();  //在服务端完成

          重定向: response.sendRedirect();                  //在客户端完成的

        2. 地址栏发生变化:

           转发:地址栏还是原来的请求的url  (registerServlet)

           重定向:地址栏发生变化,是重定向的资源名(login.jsp)

        3.请求次数不同:

          转发:一次请求一次响应

          重定向:二次请求,二次响应。第一次响应是临时响应,状态码为300,用户看不到                 任何变化,此时系统会再次发出请求到重定向的资源上,然后响应。

         4.作用域不同:

           转发:可以取到放到request中的值,而重定向不可以。

     

    1. Properties文件有什么用

    把一些经常用的代码放到Properties文件里,方便使用

    jdbc

    1. ServletConfigServletContext使用

    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里面的值只能被它自己使用。

     

    1. Jsp的运行过程

    Java Server Pager  是动态网页的一种,运行在服务端的页面

    a) 服务器接收到请求页面,首先把该页面转换成servlet实例,生成java文件

    b) 编译java文件,生成class文件

    c) 运行类文件,生成响应。

     

    1. Jsp的指令元素有哪些

    Page指令              include指令                 taglib指令

     

    1. Jsp内置对象

    out                         类型                            JSPWiter

    request                                                      HttpServletRequest

    response

    session                                                      HttpSession

    application                                                 ServletContext

    config                                                       ServletConfig

    page                                                          Object

    exception                                                   Throwable

       pageContext                                               PageContext

     

    1. EL表达式

    EL(expression language)表达式语言

    EL它可以减少代码量,省去类型强制转换

    EL的语法是${}组成

    EL的常用内置对象:

    pagescope        requestScope          sessionScope                 applicationScope

    EL是从小到大拿值的

     

    1. JSTL的常用标签使用

    表达式标签:set(相当于session.setAttribute(“”),(“”))         

                      Out(相当于out.println())       

                      Remove(相当于session.remove Attribute(“”))

    流程控制标签:if   choose   when    otherwise

    循环控制标签:for:Each     for:Tokens

     

    1. 实现购物车的思路
      1. 注册登录(判断用户是管理员还是普通用户)
      2. 商品的上架、下架和修改
      3. 登录后查看个人信息,查看购物车信息
      4. 添加购物车。(同种商品只在数量上增加)
      5. 结账
      6. 注销

     

    1. Ajax有什么好处

    1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。

    2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力

    3、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

    4.ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造     成的负担

     

    1. 怎么解决项目的乱码问题
      1. 乱码会出现在Jsp页面。

    1.可能造成的原因是Jsp页面没有改编码格式,应该把pageEncoding的值改为utf-8。

    2.servlet未设置响应编码格式。用response.setCharacterEncoding()来设置响应的编码格式。

      1. 乱码会出现在servlet中。可能是未设置请求的编码格式。如果是超链接或form表单提交,它的默认提交方式是get。Get提交的默认编码格式是ISO-8859-1。若是有中文则需要转码。而post方式不用,也不会出现。
      2. 乱码会出现在数据库中。数据库的字符集编码格式和请求的编码格式不一致。

     

    **********************************************************

     

    1. JAVA中“==”和 equals方法都是用来做比较,请问二者有何不同?

    “==”等于符号在JAVA中用来比较内存地址,两个字符串对象,尽管内容一模一样,但内存地址是不同的,当你拿==做比较时,得到的结果必然是false。因此若要比较这两个字符串对象内容是否相等的话,应该使用equals方法,对于自定义的类,两个对象如果想通过equals方法来比较内容,必须要重写Object类的equals方法。

    1. 请简述JAVA中方法重载和方法重写的区别

    子类继承父类时,同时会继承父类方法,但有时父类方法无法满足需要,所以子类可以重写父类的方法以满足子类的需求。而方法重载则是在一个类中,定义多个名字相同的方法,同时使用参数的不同来区分这些方法。

    1. 请简要说明构造方法的作用?以及它的特点

    构造方法用来创建对象,它不可随意调用,要配合new关键字来使用,它没有返回值类型,方法名称必须和类名完全相同,也不可以使用static、final等修饰符来修饰。

    1. String类型的变量在赋值时,可以用“abc”字符串常量赋值,也可以用new关键字赋值,请问二者有什么区别?

    JAVA中String类创建对象有两种方式,通过new关键字创建对象,我们称之为显式的创建对象,使用“abc”常量赋值,我们称之为隐式创建,实际上,在隐式创建的时候,编译器同样会帮我们加上new关键字,但这种创建对象的方式跟显式略有不同,它首先会去堆内存的字符串常量池里面寻找是否已经存在内容为"abc"的对象,如果存在,就把对象的地址赋给该引用,而不会创建的新的对象出来,这是JAVA为了节省内存空间而特意设计的。因此,使用new关键字每次都会创建新的对象出来,而使用常量赋值,如果字符串内容相同的话,所有的引用都会指向同一个对象。

    1. 泛型的好处??

    泛型的好处是在编译的时候检查数据类型,防止类型转换错误,同时减少手动类型转换的次数

    1. SQL预编译的好处?

    提前把SQL语句载入内存缓冲区,提高运行效率。并且可以有效的防止SQL注入!

    1. 运行时异常与一般异常有何异同?

    java编译器要求必须对非运行时异常进行try-catch处理,如果不处理,就要在方法后声明可能抛出的异常,而对于RuntimeException则没有强制要求进行异常处理。

    1. final, finally, finalize的区别?

    final 用于声明属性,方法和类,分别表示属性不可变,方法不可重写,类不可继承。
    finally是异常处理语句结构的一部分,表示总是执行。
    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法

    1. 请写出你最常见到的5个runtime exception。

    NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、

    NumberFormatException、ArithmeticException

    1. 什么情况下调用doGet()和doPost()?

    当使用Get方式请求服务器的时候,调用doGet方法

    当使用Post方式请求服务器的时候,调用doPost方法

    1. 简述设置Session失效的几种方法

    tomcat的web.xml文件中进行设置

    WEB项目的的web.xml文件中进行设置

    使用session.setMaxInActiveInterval(9000);

    1. 简述线程的生命周期

    当创建完成一个线程对象时,调用start方法,线程进入就绪状态,当操作系统将CPU分配给该线程时,线程进入运行状态,如果在运行过程中,线程遇到阻塞条件,则进入阻塞状态,当阻塞条件解除时,线程恢复到就绪状态,当线程对象的run方法执行结束时,线程进入死亡状态。

    1. 简述List,set,Map有什么区别?

    List和Set都属于Collection集合,也就是继承自Collectin接口。而Map集合跟Collection并列为JAVA当中的两大集合接口。Map集合的特点是以键值对的方式来存储数据。

    1. 说说对面向对象的三大特性的理解

    封装:对于私有化的属性或方法,我们通过公有的方法让外界来访问,在公有的方法中,我们可以做一些相应的权限控制。这是封装的第一大好处。第二大好处是隐藏细节,将一段复杂的逻辑隐藏起来,对外提供一个简单的接口来调用。

    继承:子类继承父类的属性和方法,同时添加自己的属性和方法以扩展父类的功能

    多态:两种表现形式,一种叫方法重载,一种叫方法重写。

    1. 简述转发和重定向的区别

    转发指的是在服务器内部,一个Serlvet/Jsp转向另外一个Servlet/Jsp,这个过程对客户端(浏览器)是不可见的,因此对客户端来讲,只发送了一次请求。转发的特点是:在服务器内部Servlet进行转向时,request和response对象在转发的过程中,所有Servlet/Jsp中是共享的。

    重定向是指客户端发起第一次请求,服务器响应客户端,并通知客户端按照指定的地址再次向服务器发起第二次请求。

    1. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法(原因)?

    举例:当线程X进入某对象的同步方法A时,其它线程此时不能再执行该对象的A方法,因为对象的锁已经被X占用了。并且,此刻该对象的所有同步方法,都是不能被访问的。

    如果该对象还拥有其它的非同步方法B,那么B方法是可以随时被其它线程访问的,因为访问非同步方法根本不需要去获得对象锁。

    1. 简述GenericServlet和HttpServlet的区别

    GenericServlet提供了对Servlet接口的基本实现,但没有实现service方法,HttpSerlvet扩展(继承)了GenericServlet的功能,重写了service方法,提供了针对HTTP协议的具体实现。

    1. JSON数据和XML数据的区别?

    相比较XML,Json是一种轻量级的数据格式。因为它编写简单,易于阅读,占用空间小,网络传输速度快,解析速度也比较快,尽管Json有着诸多的好处,但它仍然不能完全替代XML。因为在扩展性上,XML要远远高于Json。因此对于任何一种数据,XML都可以更完整更清晰将数据进行描述。例如webservice技术当中使用的远程传输soap协议,为了能更完整清晰表达数据包的内容,仍然采用XML的形式来传输数据。json之所以在web开发中有着如此高的地位,本质原因还是因为javascript的支持,因为JS解析和生成json对象是如此的简单。因此如何选择使用哪种格式来表示数据,要取决于多种因素,不同的场景和需求下,JSON和XML会表现出不同的优势。

    1. CollectionCollections的区别?

    Collection是List集合和Set集合的父接口,Collections是一个类,它提供了包括排序,复制,反转,搜索等操作集合的各种方法。

    1. errorexception有什么区别

    error代表与代码无关的,无法处理的严重错误,例如内存溢出等,程序员不需要手动处理,exception是一种错误消息,代表了系统内置的或者自定义的程序异常状况。可以由程序员手动去拦截消息,并作出相应处理。

    1. List,Set,Map是否继承自Collection接口

    List和Set都继承自Collection接口,Map不是

    1. ArrayList和LinkedList区别?

    ArrayList为数组存储结构,LinkedList为链表存储结构。由于有下标的存在,ArrayList集合访问速度比较快,但集包含元素过多时,插入或删除元素效率会比较低。相反,LinkedList集合访问速度较慢,但插入删除比较快。

    1. 请解释什么叫同步,什么叫异步

    同步指的是按步骤按顺序,同步访问也就是挨个排队访问,异步指的是同时,异步访问也就是同时访问。

    1. JAVA实现多线程有几种方法?

    继承Thread类并重写run方法或实现Runnable接口

    1. 什么叫做case穿透现象?

    如果case语句后面没有break,当case条件满足时,将会执行当前case语句包括后面的所有语句

    1. break和continue的区别是什么?

    break代表终止当前整个循环体,continue代表跳过循环体的本次循环,直接进入下一次循环

    1. String和StringBuffer的区别?

    String是不可变字符串,StringBuffer是带缓冲的可变字符串,所以字符串对象在频繁修改内容的时候,使用String是效率不高的,应该使用StringBuffer

    1. 线程阻塞状态和就绪状态有什么区别?

    阻塞状态指的是,线程遇到某种阻塞条件,而放弃CPU。暂时停止运行。

    当一个线程被标记为阻塞状态时,JVM会将其放入相应的阻塞区域(等待、同步锁)

    当该线程的阻塞状态取消时,JVM将其放入可运行区域。此时线程才有可能获得CPU,我们将其成为就绪状态。

    1. 解释什么叫死锁?

    所谓死锁,是指两个或多个线程因为抢夺资源而各自进入了一种无法解除的阻塞状态,我们将这种现象称之为死锁。死锁是无法完全避免的,因此在程序设计当中,我们应尽力避免多个线程之间相互抢占对方需要的资源,从而最大限度的减少死锁的发生。

    1. DOM解析和SAX解析在性能上有什么优劣?

    由于dom解析的方式是将整个XML文件一次读到内存中,因此不太适合处理大型的XML文件。SAX为逐行读取逐行解析。API相对简单,易于编写。

    1. TCP协议和UDP协议的区别?

    TCP叫做传输控制协议。是一种比较可靠的通信协议,在每一次通信之前,需要先以三次握手的方式建立连接,通信过程中每一次发送数据,都需要得到对方回复确认,否则会重复发送消息,直到对方确认回复。这样就确保了每一个数据包都能正确的送达对方那里。

    UDP叫做用户数据报协议。是一种不可靠的通信协议,发送消息时,不需要建立连接,也不需要对方回复,难以保证数据可以正确的送达。

    1. 简述JDBC编程步骤?
    1. 使用Class.forName加载驱动
    2. 通过DriverManager获取Connection连接对象
    3. 通过Connection创建Statement对象
    4. 使用Statement对象执行sql语句
    5. 如果是查询的话,使用ResultSet获取结果集
    6. 遍历结果集获取数据
    7. 关闭连接
    1. 简述AJAX编程步骤
    1. 创建XMLHttpRequest对象
    2. 使用open方法设置请求参数(get/post,url,syn)
    3. onreadystatechange事件添加回调函数,处理返回的数据
    4. 使用send方法进行提交
    1. 简述编写Servlet的步骤
    1. 编写一个类,继承HttpServlet
    2. 重写doGet、doPost方法
    3. 修改web.xml文件,配置访问路径
    1. 请简述Servlet生命周期

    当第一次访问Servlet程序时,程序会创建该Serlvet的一个实例对象,并调用init方法对其进行初始化,以后每次访问Servlet都会调用该对象的service方法,当服务器要销毁一个Servlet对象时,调用它的destory方法。

    1. 简述JAVA跨平台的原理

    JAVA之所以能跨平台,得益于JAVA虚拟机,在任何操作系统下,都有相应版本的虚拟机,我们把编译好的class文件,放在任何一台虚拟机上,都可以正常运行。这样我们就利用虚拟机屏蔽了操作系统的不同,即达到了一次编写处处运行的效果。

    1. HashMap和HashTable的区别是什么?

    HashTable是一个线程安全的集合,并且HashTable不允许key-value为null

    1. 什么是java序列化,如何实现java序列化?

    以流的方式来读写一个JAVA对象,就叫做JAVA的序列化,要想实现序列化,对象的类必须实现一个简单接口,叫做Serializable

    1. JDK、JRE、JVM分别是什么?有什么区别?

    JVM:虚拟机       JRE:JAVA运行时环境      JDK:JAVA开发工具包

    JVM+基本类库=JRE      JRE+编译工具=JDK

    1. static方法能否访问非static方法,为什么?

    当然不能,静态方法属于类,非静态方法属于对象,当你调用一个静态方法时,无法保证已经存在该对象。(因为静态方法也可以通过类名来调用)。非静态方法也叫做成员方法,是属于对象的,在成员方法中,可以调用任何静态资源(属性和方法),因为静态资源是所有对象共享的。

     

  • 相关阅读:
    5.电影搜索之 自动填充,也叫autocomplete、搜索建议!
    4.电影搜索之如何把视频播放器嵌入网页 百度影音+快播
    3.电影搜索之采集
    2.电影搜索之整体结构
    软件工程期末考试复习
    python数据库连接池DBUtils
    python实现定时发送系列
    flask高阶
    python对象转字典
    flask中的蓝图与红图
  • 原文地址:https://www.cnblogs.com/liyan-blogs/p/5475394.html
Copyright © 2020-2023  润新知