日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2018java基础面试题(我自己用的,面试好多家公司基本会问到的问题和技术)

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018java基础面试题(我自己用的,面试好多家公司基本会问到的问题和技术) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,webservice是什么?

webservice是一種跨編程語言和跨操作系統的遠程調用技術,遵循SOPA/WSDL規范。

2,springCloud是什么?

springcloud是一個微服務框架,并提供全套分布式系統解決方案。支持配置管理,熔斷機制,leader選舉,服務治理,分布式session,微代理,控制總線,智能路由,一次性token。


Java中堆和棧有什么不同?

每個線程都有自己的棧內存,用于存儲本地變量,方法參數和棧調用,一個線程中存儲的變量對其它線程是不可見的。而堆是所有線程共享的一片公用內存區域。對象都在堆里創建,為了提升效率線程會從堆中弄一個緩存到自己的棧,如果多個線程使用該變量就可能引發問題,這時volatile 變量就可以發揮作用了,它要求線程從主存中讀取變量的值。



堆:(對象)

引用類型的變量,其內存分配在堆上或者常量池(字符串常量、基本數據類型常量),需要通過new等方式來創建。

堆內存主要作用是存放運行時創建(new)的對象。

(主要用于存放對象,存取速度慢,可以運行時動態分配內存,生存期不需要提前確定)



棧:(基本數據類型變量、對象的引用變量)

基本數據類型的變量(int、short、long、byte、float、double、boolean、char等)以及對象的引用變量,其內存分配在棧上,變量出了作用域就會自動釋放。



Spring的Scope有以下幾種,通過@Scope注解來實現:

  (1)Singleton:一個Spring容器中只有一個Bean的實例,此為Spring的默認配置,全容器共享一個實例。

  (2)Prototype:每次調用新建一個Bean實例。

  (3)Request:Web項目中,給每一個 http request 新建一個Bean實例。

  (4)Session:Web項目中,給每一個 http session 新建一個Bean實例。

  (5)GlobalSession:這個只在portal應用中有用,給每一個 global http session 新建一個Bean實例。



Spring事務傳播行為

? ? ? 所謂事務的傳播行為是指,如果在開始當前事務之前,一個事務上下文已經存在,此時有若干選項可以指定一個事務性方法的執行行為。在TransactionDefinition定義中包括了如下幾個表示傳播行為的常量:

  • TransactionDefinition.PROPAGATION_REQUIRED:如果當前存在事務,則加入該事務;如果當前沒有事務,則創建一個新的事務。這是默認值。
  • TransactionDefinition.PROPAGATION_REQUIRES_NEW:創建一個新的事務,如果當前存在事務,則把當前事務掛起。
  • TransactionDefinition.PROPAGATION_SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續運行。
  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式運行,如果當前存在事務,則把當前事務掛起。
  • TransactionDefinition.PROPAGATION_NEVER:以非事務方式運行,如果當前存在事務,則拋出異常。
  • TransactionDefinition.PROPAGATION_MANDATORY:如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。
  • TransactionDefinition.PROPAGATION_NESTED:如果當前存在事務,則創建一個事務作為當前事務的嵌套事務來運行;如果當前沒有事務,則該取值等價于TransactionDefinition.PROPAGATION_REQUIRED。


Spring的聲明式事務管理力度是什么級別?

Struts2是類級別的,Spring是方法級別的

spring事務可以分為編程式事務和聲明式事務



spring?MVC與struts2的區別:

? ? 參考:??http://blog.csdn.net/chenleixing/article/details/44570681

? ?1、Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截

? ?2、SpringMVC的方法之間基本上獨立的,獨享request response數據

??3、由于Struts2需要針對每個request進行封裝,把request,session等servlet生命周期的變量封裝成一個一個

Map,供給每個Action使用,并保證線程安全,所以在原則上,是比較耗費內存的

? ?4、攔截器實現機制上,Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式

? ?5、SpringMVC的入口是servlet,而Struts2是filter

? 6、SpringMVC集成了Ajax

? 7、SpringMVC驗證支持JSR303,處理起來相對更加靈活方便,而Struts2驗證比較繁瑣,感覺太煩亂

? 8、Spring MVC和Spring是無縫的。從這個項目的管理和安全上也比Struts2高

? ?9、Struts2更加符合OOP的編程思想, SpringMVC就比較謹慎,在servlet上擴展

? 10、SpringMVC開發效率和性能高于Struts2

? 11、SpringMVC可以認為已經100%零配置


Spring框架中的核心思想包括什么?

主要思想是IOC控制反轉,DI依賴注入,AOP面向切面


ArrayList和LinkedList的大致區別如下:

1.ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。?
2.對于隨機訪問get和set,ArrayList覺得優于LinkedList,因為LinkedList要移動指針。?

3.對于新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。

ArrayList,Vector主要區別為以下幾點:?
(1):Vector是線程安全的,源碼中有很多的synchronized可以看出,而ArrayList不是。導致Vector效率無法和ArrayList相比;?

(2):ArrayList和Vector都采用線性連續存儲空間,當存儲空間不足的時候,ArrayList默認增加為原來的50%,Vector默認增加為原來的一倍;?



HashSet與HashMap的區別:

HashMapHashSet
實現了Map接口實現Set接口
存儲鍵值對僅存儲對象
調用put()向map中添加元素調用add()方法向Set中添加元素
HashMap使用鍵(Key)計算Hashcode

HashSet使用成員對象來計算hashcode值,

對于兩個對象來說hashcode可能相同,

所以equals()方法用來判斷對象的相等性,

如果兩個對象不同的話,那么返回false

HashMap相對于HashSet較快,因為它是使用唯一的鍵獲取對象HashSet較HashMap來說比較慢



HashMap和Hashtable的區別:

HashMap和Hashtable都實現了Map接口,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區別有:線程安全性,同步(synchronization),以及速度。

  • HashMap幾乎可以等價于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受為null的鍵值(key)和值(value),而Hashtable則不行)。
  • HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是線程安全的,多個線程可以共享一個Hashtable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。
  • 另一個區別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程改變了HashMap的結構(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這并不是一個一定發生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區別。
  • 由于Hashtable是線程安全的也是synchronized,所以在單線程環境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過Hashtable。
  • HashMap不能保證隨著時間的推移Map中的元素次序是不變的。
  • 線程安全是什么?線程不安全是什么?

    線程安全就是多線程訪問時,采用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。(Vector,HashTable)?
    線程不安全就是不提供數據訪問保護,有可能出現多個線程先后更改數據造成所得到的數據是臟數據。(ArrayList,LinkedList,HashMap等)


    線程和進程的區別?

    ? ? ? ?進程和線程都是一個時間段的描述,是CPU工作時間段的描述,不過是顆粒大小不同;

    ? ? ? ?(1)進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元 ? ?? ?????(2)同一個進程中可以包括多個線程,并且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進行至少包括一個線程。 ? ? ? ? ? (3)進程的創建調用fork或者vfork,而線程的創建調用pthread_create,進程結束后它擁有的所有線程都將銷毀,而線程的結束不會影響同個進程中的其他線程的結束 ? ? ? ? ? (4)線程是輕兩級的進程,它的創建和銷毀所需要的時間比進程小很多,所有操作系統中的執行功能都是創建線程去完成的 ? ? ? ? ? (5)線程中執行時一般都要進行同步和互斥,因為他們共享同一進程的所有資源 ? ? ? ? ? (6)線程有自己的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有自己的私有屬性進程控制塊PCB,這些私有屬性是不被共享的,用來標示一個進程或一個線程的標志



    黑盒測試、灰盒測試、白盒測試、單元測試有什么區別?

    黑盒測試關注程序的功能是否正確,面向實際用戶;

    白盒測試關注程序源代碼的內部邏輯結構是否正確,面向編程人員;

    灰盒測試是介于白盒測試與黑盒測試之間的一種測試。

    單元測試(Unit Testing)是對軟件基本組成單元進行的測試,如函數或是一個類的方法。這里的單元,就是軟件設計的最小單位。


    怎么對數據庫百萬級數據進行優化?

    使用讀寫分離技術(

    讓主數據庫(master)處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數據庫(slave)處理SELECT查詢操作


    Spring Bean的生命周期:

    • Bean的建立, 由BeanFactory讀取Bean定義文件,并生成各個實例
    • Setter注入,執行Bean的屬性依賴注入
    • BeanNameAware的setBeanName(), 如果實現該接口,則執行其setBeanName方法
    • BeanFactoryAware的setBeanFactory(),如果實現該接口,則執行其setBeanFactory方法
    • BeanPostProcessor的processBeforeInitialization(),如果有關聯的processor,則在Bean初始化之前都會執行這個實例的processBeforeInitialization()方法
    • InitializingBean的afterPropertiesSet(),如果實現了該接口,則執行其afterPropertiesSet()方法
    • Bean定義文件中定義init-method
    • BeanPostProcessors的processAfterInitialization(),如果有關聯的processor,則在Bean初始化之前都會執行這個實例的processAfterInitialization()方法
    • DisposableBean的destroy(),在容器關閉時,如果Bean類實現了該接口,則執行它的destroy()方法
    • Bean定義文件中定義destroy-method,在容器關閉時,可以在Bean定義文件中使用“destory-method”定義的方法

    ? ?

    簡單回答springbean生命周期:

    (1)實例化(必須的)構造函數構造對象

    (2)裝配(可選的)為屬性賦值

    (3)回調(可選的)(容器-控制類和組件-回調類)

    (4)初始化(init-method=" ")

    (5)就緒

    (6)銷毀(destroy-method=" ") springmvc生命周期:

    1A)客戶端發出http請求,只要請求形式符合web.xml
    文件中配置的*.action的話,就由DispatcherServlet
    來處理。

    1B)DispatcherServlet再將http請求委托給映射器
    的對象來將http請求交給對應的Action來處理

    2)映射器根據客戶的http請求,再對比<bean name="/hello.action
    如果匹配正確,再將http請求交給程序員寫的Action

    3)執行Action中的業務方法,最終返回一個名叫ModelAndView
    的對象,其中封裝了向視圖發送的數據和視圖的邏輯名

    4)ModelAndView對象隨著響應到到DispatcherServlet中了


    5)這時DispatcherServlet收到了ModelAndView對象,
    它也不知道視圖邏輯名是何意,又得委托一個名叫
    視圖解析器的對象去具體解析ModelAndView對象
    中的內容

    6)將視圖解析器解析后的內容,再次交由DispatcherServlet
    核心控制器,這時核心控制器再將請求轉發到具體的
    視圖頁面,取出數據,再顯示給用戶


    servlet生命周期?

    • Servlet 通過調用?init ()?方法進行初始化。
    • Servlet 調用?service()?方法來處理客戶端的請求。
    • Servlet 通過調用?destroy()?方法終止(結束)。
    • 最后,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的


    ajax怎么解決跨域?

    ? ? 參考:http://blog.csdn.net/u014727260/article/details/72793459

    ? ? 1,代理(通過后臺操作)

    ? ? 2,JSONP(添加響應頭,允許跨域?

    ??????????????addHeader(‘Access-Control-Allow-Origin:*’);//允許所有來源訪問?

    ????????????? ?addHeader(‘Access-Control-Allow-Method:POST,GET’);//允許訪問的方式

    ? ? 3,在ajax的dataType方式改為“jsonp”

    Mysql數據類型:

    ????1.普通索引
    ????2.唯一索引
    ????3.主鍵索引
    ????4.組合索引

    ????5.全文索引

    ? ? 參考:https://www.cnblogs.com/luyucheng/p/6289714.html

    Eureka和zookeeper的區別?

    1,做分布式下的服務發現還是使用eureka更好,也就是AP特性的分布式協調工具(zookeeper因為網絡故障就無法返回可用的主機

    2,zookeeper技術更加成熟,資料更多

    3,Eureka。是spring cloud之下一個專門負責微服務服務注冊和發現的組件,Eureka就是為了服務發現而設計的

    4,Zookeeper。是用來保證分布式一致性的一個軟件。不是為了服務發現注冊而設計的,只不過它的特性也可以被二次開發成服務發現注冊中心罷了


    SpringCloud都有哪些組件?

    ? ? ??Spring Cloud為微服務架構開發涉及的配置管理,服務治理,熔斷機制,智能路由,微代理,控制總線,一次性token,全局一致性鎖,leader選舉,分布式session,集群狀態管理等操作提供了一種簡單的開發方式。

    ? ? 組件列:

    • Spring Cloud Config:配置管理工具,支持使用Git存儲配置內容,支持應用配置的外部化存儲,支持客戶端配置信息刷新、加解密配置內容等
    • Spring Cloud Bus:事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。
    • Spring Cloud Netflix:針對多種Netflix組件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
    • ? ? ? ? ? ? ? ? ? ? ? Netflix Eureka:一個基于rest服務的服務治理組件,包括服務注冊中心、服務注冊與服務發現機制的實現,實現了云端負載均衡和中間層服務器的故障轉移。
    • ? ? ? ? ? ? ? ? ? ? ? Netflix Hystrix:容錯管理工具,實現斷路器模式,通過控制服務的節點,從而對延遲和故障提供更強大的容錯能力。
    • ? ? ? ? ? ? ? ? ? ? ? Netflix Ribbon:客戶端負載均衡的服務調用組件。
    • ? ? ? ? ? ? ? ? ? ? ? Netflix Feign:基于Ribbon和Hystrix的聲明式服務調用組件。
    • ? ? ? ? ? ? ? ? ? ? ? Netflix Zuul:微服務網關,提供動態路由,訪問過濾等服務。
    • ? ? ? ? ? ? ? ? ? ? ? Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調機制等功能。
    • Spring Cloud for Cloud Foundry:通過Oauth2協議綁定服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS云平臺。
    • Spring Cloud Sleuth:日志收集工具包,封裝了Dapper,Zipkin和HTrace操作。
    • Spring Cloud Data Flow:大數據操作工具,通過命令行方式操作數據流。
    • Spring Cloud Security:安全工具包,為你的應用程序添加安全控制,主要是指OAuth2。
    • Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫集成。
    • Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服務注冊和發現。
    • Spring Cloud Stream:數據流操作開發包,封裝了與Redis,Rabbit、Kafka等發送接收消息。
    • Spring Cloud CLI:基于 Spring Boot CLI,可以讓你以命令行方式快速建立云組件

    Hibernate的三種狀態是什么?怎么將游離狀態轉換為持久化狀態?

    transient(瞬時狀態),persistent(持久化狀態)以及detached(離線狀態)

    轉換:update()? ? saveOrUpdate()? ? ? ?lock()



    總結

    以上是生活随笔為你收集整理的2018java基础面试题(我自己用的,面试好多家公司基本会问到的问题和技术)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。