JAVA基礎(chǔ)面試總結(jié)
來(lái)源:易賢網(wǎng) 閱讀:1230 次 日期:2015-03-27 11:50:36
溫馨提示:易賢網(wǎng)小編為您整理了“JAVA基礎(chǔ)面試總結(jié)”,方便廣大網(wǎng)友查閱!

1.00 什么時(shí)候使用基于接口編程?

基于接口編程、Fascade層等等抽象封裝都是有開(kāi)發(fā)和維護(hù)的代價(jià)的,是否使用歸根結(jié)底還是要看團(tuán)隊(duì)人員的分工情況,技術(shù)方面確實(shí)需要時(shí),比如不同開(kāi)發(fā)語(yǔ)言下連接;手機(jī)app與服務(wù)系統(tǒng)連接等,自然就要用了。

1.01 Package是先分層還是先分模塊?

org.springside.模塊A.web 還是 org.springside.web.模塊A? 同上,還是看團(tuán)隊(duì)人員的分工情況。如果是每人從頭到尾負(fù)責(zé)一個(gè)獨(dú)立模塊的可以先分模塊,反之,按層進(jìn)行分工并注重層內(nèi)重用的,可以考慮先分層。

1.02 怎么處理日志問(wèn)題?有那些可行的方案?

首先要定義一個(gè)項(xiàng)目的異常處理類(lèi),然后所有需要處理異常的類(lèi)就用該類(lèi)來(lái)處理。日志的操作和處理就在該類(lèi)中操作;

方案一:在service層的try catch中設(shè)置錯(cuò)誤日志打?。?/p>

方案二:在filter攔截器中統(tǒng)一設(shè)置錯(cuò)誤日志

1.03 反射機(jī)制

反射機(jī)制,就是當(dāng)不確定類(lèi)的類(lèi)型時(shí),采用java.lang.reflect方式定義轉(zhuǎn)換類(lèi)的類(lèi)型;

反射的功能很強(qiáng)大,但是使用不當(dāng)可能會(huì)缺點(diǎn)大于優(yōu)點(diǎn),反射使代碼邏輯混亂,會(huì)帶來(lái)維護(hù)的問(wèn)題。眾所周知Java有個(gè)Object class,是所有Java classes的繼承根源。

1.04 面向?qū)ο罄斫?/p>

什么是OOP?什么是類(lèi)?請(qǐng)對(duì)比類(lèi)和對(duì)象實(shí)例之間的關(guān)系。OOP是面向?qū)ο缶幊炭s寫(xiě)。指的是用對(duì)象的觀點(diǎn)來(lái)組織與構(gòu)建系統(tǒng),它綜合了功能抽象和數(shù)據(jù)抽象,這樣可以減少數(shù)據(jù)之間的耦合性和代碼的出錯(cuò)幾率。使用面向?qū)ο缶幊碳夹g(shù)可以使得軟件開(kāi)發(fā)者按照現(xiàn)實(shí)世界里人們思考問(wèn)題的模式編寫(xiě)代碼,可以讓軟件開(kāi)發(fā)者更好地利用代碼直接表達(dá)現(xiàn)實(shí)中存在的對(duì)象;類(lèi)是同一類(lèi)對(duì)象實(shí)例的共性的抽象,對(duì)象是類(lèi)的實(shí)例化。對(duì)象通常作為計(jì)算機(jī)模擬思維,表示真實(shí)世界的抽象。類(lèi)是靜態(tài)的,對(duì)象是動(dòng)態(tài)的,類(lèi)負(fù)責(zé)產(chǎn)生對(duì)象,可以將類(lèi)當(dāng)成生產(chǎn)對(duì)象的工廠。

1.05 基本數(shù)據(jù)類(lèi)型

1、Java的數(shù)據(jù)類(lèi)型可以劃分為4大類(lèi):整數(shù),浮點(diǎn)數(shù),字符型,布爾型。其中整數(shù)可以劃分為:byte,short,int,long.浮點(diǎn)數(shù)可以劃分為float,double。

2、char型變量中能不能存貯一個(gè)中文漢字?為什么?

答:是能夠定義成為一個(gè)中文的,因?yàn)閖ava中以u(píng)nicode編碼,一個(gè)char占16個(gè)字節(jié),所以放一個(gè)中文是沒(méi)問(wèn)題的。

1.06 String與StringBuffer的區(qū)別。

String的長(zhǎng)度是不可變的,StringBuffer的長(zhǎng)度是可變的。如果你對(duì)字符串中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時(shí),那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。

1.07數(shù)據(jù)類(lèi)型大小及取值范圍

大小:byte 1個(gè)字節(jié)、short 2個(gè)字節(jié)、int 4個(gè)字節(jié)、long 8個(gè)字節(jié);char 2個(gè)字節(jié);float 4個(gè)字節(jié)、double 8個(gè)字節(jié);

取值范圍:

byte的取值范圍為-128~127,占用1個(gè)字節(jié)(-2的7次方到2的7次方-1)

short的取值范圍為-32768~32767,占用2個(gè)字節(jié)(-2的15次方到2的15次方-1)

int的取值范圍為(-2147483648~2147483647),占用4個(gè)字節(jié)(-2的31次方到2的31次方-1)

long的取值范圍為(-9223372036854774808~9223372036854774807),占用8個(gè)字節(jié)(-2的63次方到2的63次方-1)

可以看到byte和short的取值范圍比較小,而long的取值范圍太大,占用的空間多,基本上int可以滿(mǎn)足我們的日常的計(jì)算了,而且int也是使用的最多的整型類(lèi)型了。

1.08 public、protected、private和不寫(xiě)限定符有什么區(qū)別?

作用域

當(dāng)前類(lèi)

同一package

子孫類(lèi)

其他package

public

protected

×

friendly(不寫(xiě)時(shí)默認(rèn))

×

×

private

×

×

×

1.09 線程理解

1、請(qǐng)說(shuō)出你所知道的線程同步的方法。

wait():是線程交互時(shí),如果線程對(duì)一個(gè)同步對(duì)象x 發(fā)出一個(gè)wait()調(diào)用,該線程會(huì)暫停執(zhí)行,被調(diào)對(duì)象進(jìn)入等待狀態(tài),直到被喚醒或等待時(shí)間到。

sleep():是使線程停止一段時(shí)間的方法。在sleep 時(shí)間間隔期滿(mǎn)后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒(méi)有被調(diào)度為放棄執(zhí)行,除非(a)“醒來(lái)”的線程具有更高的優(yōu)先級(jí) (b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。

notify():?jiǎn)拘岩粋€(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。

Allnotity():?jiǎn)拘阉刑幦氲却隣顟B(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。

2、線程實(shí)現(xiàn)方法有哪些?

方法一:定義一個(gè)類(lèi)實(shí)現(xiàn)Runnable接口,重寫(xiě)接口中的run()方法。在run()方法中加入具體的任務(wù)代碼或處理邏輯。調(diào)用Thread對(duì)象的start()方法,啟動(dòng)線程,如:

方法二:定義一個(gè)類(lèi)去繼承Thread父類(lèi),重寫(xiě)父類(lèi)中的run()方法。在run()方法中加入具體的任務(wù)代碼或處理邏輯。調(diào)用start方法,線程t啟動(dòng),隱含的調(diào)用run()方法。如:

3、什么時(shí)候使用Thread,什么時(shí)候使用Runable

采用繼承Thread類(lèi)方式:

(1)優(yōu)點(diǎn):編寫(xiě)簡(jiǎn)單,如果需要訪問(wèn)當(dāng)前線程,無(wú)需使用Thread.currentThread()方法,直接使用this,即可獲得當(dāng)前線程。

(2)缺點(diǎn):因?yàn)榫€程類(lèi)已經(jīng)繼承了Thread類(lèi),所以不能再繼承其他的父類(lèi)。

采用實(shí)現(xiàn)Runnable接口方式:

(1)優(yōu)點(diǎn):線程類(lèi)只是實(shí)現(xiàn)了Runable接口,還可以繼承其他的類(lèi)。在這種方式下,可以多個(gè)線程共享同一個(gè)目標(biāo)對(duì)象,所以非常適合多個(gè)相同線程來(lái)處理同一份資源的情況,從而可以將CPU代碼和數(shù)據(jù)分開(kāi),形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?/p>

(2)缺點(diǎn):編程稍微復(fù)雜,如果需要訪問(wèn)當(dāng)前線程,必須使用Thread.currentThread()方法。

4、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?不能,一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問(wèn)。

5、多線程有哪些狀態(tài)?

新建、就緒(start方法調(diào)用后)、運(yùn)行、睡眠(sleep方法)、等待(wait方法)、掛起、恢復(fù)、阻塞、死亡。

1.10 各種集合理解(幾種常見(jiàn)數(shù)據(jù)結(jié)構(gòu))

1、HashMap和Hashtable的區(qū)別:

HashMap允許一個(gè)null鍵值而Hashtable不可以;Hashtable是線程安全的,同步的,因此要比HashMap運(yùn)行慢;

2、Collection 和 Collections的區(qū)別:

Collections是個(gè)java.util下的類(lèi),它包含有各種有關(guān)集合操作的靜態(tài)方法。Collection是個(gè)java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。

3、Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?

Set里的元素是不能重復(fù)的,那么用iterator()方法來(lái)區(qū)分重復(fù)與否。equals()是判讀兩個(gè)Set是否相等。

4、ArrayList和Vector的區(qū)別

同步性:Vector是線程安全的,也就是說(shuō)是同步的,而ArrayList是線程序不安全的,不是同步的;

數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)為原來(lái)一培,而ArrayList卻是原來(lái)的一半;

5、LinkList和ArrayList的區(qū)別,如果是在集合的開(kāi)頭插入一個(gè)對(duì)象,使用哪種效率高些,在集合的末尾插入一個(gè)對(duì)象,使用哪種效率高些,為什么?

ArrayList隨機(jī)訪問(wèn)的效率要比LinkList快,但是LinkList順序訪問(wèn)的效率則高過(guò)ArrayList,另外LinkList在對(duì)元素進(jìn)行插入和刪除操作時(shí)要比ArrayList的效率高,二者的最佳選擇方法是:首先選用ArrayList當(dāng)發(fā)現(xiàn)“向元素中插入和刪除操作太多時(shí)”引發(fā)性能問(wèn)題時(shí),換用LinkList,當(dāng)然處理固定元素還是選用數(shù)組.

LinkedList基于鏈表實(shí)現(xiàn),插入元素的性能會(huì)比ArrayList高.

ArrayList基于數(shù)組實(shí)現(xiàn),遍歷的性能高于LinkedList.

1.11 繼承、重寫(xiě)、重載、多態(tài)

繼承是子類(lèi)使用父類(lèi)的方法,

重寫(xiě)是繼承后重新實(shí)現(xiàn)父類(lèi)的方法。

重載是在一個(gè)類(lèi)里一系列參數(shù)不同名字相同的方法。

多態(tài)則是父類(lèi)使用子類(lèi)的方法。

子類(lèi)繼承父類(lèi)程序運(yùn)行執(zhí)行順序:

父類(lèi):

public class TestStatic {

public static String name="china";

{

System.out.println("========方法體========");

}

static{

name="England";

System.out.println("========靜態(tài)程序塊======");

}

TestStatic(){

System.out.println("=========構(gòu)造方法========");

}

public static void main(String[] args){

System.out.println("========主方法========"+name);

}

public void test(){

System.out.println("========測(cè)試方法=========");

}

}

子類(lèi):

public class TestExtendStatic extends TestStatic{

//public static String name="HUBEI";

{

System.out.println("========無(wú)名稱(chēng)方法體========");

}

static{

//name="SUIZHOU";

System.out.println("========子類(lèi)靜態(tài)程序塊======");

}

TestExtendStatic(){

System.out.println("=========子類(lèi)構(gòu)造方法========");

}

public void test(){

System.out.println("========子類(lèi)測(cè)試方法=========");

}

public static void main(String[] args){

System.out.println("========子類(lèi)主方法========"+name);

TestStatic ts = new TestExtendStatic();// 上轉(zhuǎn)型對(duì)象

ts.test();

}

}

輸出如下:

========靜態(tài)程序塊====== :父類(lèi)static程序塊

========子類(lèi)靜態(tài)程序塊====== :子類(lèi)static程序塊 【不是靜態(tài)方法】

========子類(lèi)主方法========England :子類(lèi)主方法

========方法體======== :父類(lèi)中非靜態(tài)代碼塊

=========構(gòu)造方法======== :父類(lèi)構(gòu)造方法

========無(wú)名稱(chēng)方法體======== :子類(lèi)中非靜態(tài)代碼塊

=========子類(lèi)構(gòu)造方法======== :子類(lèi)構(gòu)造方法

========子類(lèi)測(cè)試方法========= :子類(lèi)測(cè)試方法

執(zhí)行順序: 父類(lèi)靜態(tài)變量以及靜態(tài)程序塊 --- 子類(lèi)的靜態(tài)變量以及靜態(tài)程序塊 --- 父類(lèi)非靜態(tài)代碼塊 --- 父類(lèi)中構(gòu)造方法 --- 子類(lèi)中非靜態(tài)代碼塊 ---子類(lèi)中構(gòu)造方法 --- 接下來(lái)才是 對(duì)象調(diào)用的方法。

只要是用new 創(chuàng)建對(duì)象,分配了內(nèi)存空間,不管是將引用賦給上轉(zhuǎn)型對(duì)象,還是賦給子類(lèi)對(duì)象,上面方法都必須執(zhí)行。

即:TestStatic ts = new TestExtendStatic();// 上轉(zhuǎn)型對(duì)象

TestExtendStatic ts = new TestExtendStatic();// 子類(lèi)對(duì)象

上面加粗程序都會(huì)執(zhí)行。

上面程序中 ts.test(); ts作為上轉(zhuǎn)型對(duì)象調(diào)用的是 子類(lèi)繼承的父類(lèi)中的方法,因?yàn)閠est()在子類(lèi)中被重寫(xiě)了,所以輸出的為子類(lèi)中的語(yǔ)句。

如果將子類(lèi)中 main 方法該成如下:

public static void main(String[] args){

System.out.println("========子類(lèi)主方法========"+name);

TestStatic ts = new TestExtendStatic();

ts.test();

System.out.println("-------------------------");

ts = new TestExtendStatic();

ts.test();

}

輸出:

========靜態(tài)程序塊====== 父類(lèi)中靜態(tài)程序塊

========子類(lèi)靜態(tài)程序塊====== 子類(lèi)中靜態(tài)程序塊

========子類(lèi)主方法========England 子類(lèi)中主方法

========方法體======== 父類(lèi)中非靜態(tài)代碼塊

=========構(gòu)造方法======== 父類(lèi)中構(gòu)造方法

========無(wú)名稱(chēng)方法體======== 子類(lèi)中非靜態(tài)程序塊

=========子類(lèi)構(gòu)造方法======== 子類(lèi)中構(gòu)造方法

========子類(lèi)測(cè)試方法========= 對(duì)象具體調(diào)用的方法

------------------------- 靜態(tài)變量以及程序塊只執(zhí)行一次

========方法體======== 父類(lèi)中非靜態(tài)代碼塊

=========構(gòu)造方法======== 父類(lèi)中構(gòu)造方法

========無(wú)名稱(chēng)方法體======== 子類(lèi)中非靜態(tài)代碼塊

=========子類(lèi)構(gòu)造方法======== 子類(lèi)中構(gòu)造方法

========子類(lèi)測(cè)試方法=========

如果將子類(lèi)主方法 中更改為:

TestStatic ts = new TestStatic ();// 運(yùn)用父類(lèi)構(gòu)造方法創(chuàng)建

ts.test();

輸出為:

========靜態(tài)程序塊====== 父類(lèi)靜態(tài)程序塊

========子類(lèi)靜態(tài)程序塊====== 子類(lèi)靜態(tài)程序塊 【因?yàn)槌绦蛟谧宇?lèi)中運(yùn)行的,所以子類(lèi)的靜態(tài)程序塊必須運(yùn)行】

========方法體======== 父類(lèi)非靜態(tài)程序塊

=========構(gòu)造方法======== 父類(lèi)構(gòu)造方法

========測(cè)試方法========= 父類(lèi)具體方法test()

如果將上述代碼放到父類(lèi)中,就不會(huì)加載子類(lèi) 靜態(tài)程序塊了。

1.12關(guān)聯(lián)與依賴(lài)差別,聚合與組合差別

關(guān)聯(lián):一個(gè)類(lèi)受另外一個(gè)類(lèi)的影響,一個(gè)Driver類(lèi)里面只跟一個(gè)Car類(lèi)變量,如driver(Car),強(qiáng)耦合關(guān)系;

依賴(lài):一種使用關(guān)系,弱耦合,比如兩個(gè)方法driver(Car),driver(Plane);即重載;

聚合:是弱擁有關(guān)系,即A對(duì)象包含B對(duì)象,但B不是A的一部分;

組合:是一種強(qiáng)擁有關(guān)系,主要體現(xiàn)部分和整體的關(guān)系;

1.13 排序

1、java類(lèi)自帶排序:

組成int數(shù)組,再調(diào)用Arrays.sort(int[] a)實(shí)現(xiàn)升序;降序可從尾部開(kāi)始輸出;

2、方法二:重復(fù)for循環(huán)比較兩值大小存入ArrayList中;

1.14 JAVA序列化

序列化就是一種用來(lái)處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化??梢詫?duì)流化后的對(duì)象進(jìn)行讀寫(xiě)操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫(xiě)操作時(shí)所引發(fā)的問(wèn)題。

序 列化的實(shí)現(xiàn):將需要被序列化的類(lèi)實(shí)現(xiàn)Serializable接口,該接口沒(méi)有需要實(shí)現(xiàn)的方法,implements Serializable只是為了標(biāo)注該對(duì)象是可被序列化的,然后使用一個(gè)輸出流(如:FileOutputStream)來(lái)構(gòu)造一個(gè) ObjectOutputStream(對(duì)象流)對(duì)象,接著,使用ObjectOutputStream對(duì)象的writeObject(Object obj)方法就可以將參數(shù)為obj的對(duì)象寫(xiě)出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流。

1.15 面向?qū)ο蟮脑O(shè)計(jì)原則有那些?

LSP里氏替換原則:子類(lèi)與父類(lèi)對(duì)象間替換;

OCP開(kāi)閉原則:擴(kuò)展開(kāi)放,更改封閉;

SRP單一職責(zé)原則:依賴(lài)不同的具體類(lèi),不要將不相關(guān)的方法放到一個(gè)具體類(lèi)中,然后具體類(lèi)再關(guān)聯(lián)。

ISP接口隔離原則:具體類(lèi)不要實(shí)現(xiàn)無(wú)關(guān)接口中的方法,應(yīng)使用具體類(lèi)實(shí)現(xiàn)多個(gè)接口。

DIP依賴(lài)倒置原則:針對(duì)接口編程,不是針對(duì)實(shí)現(xiàn)編程

CARP組合/聚合復(fù)用原則:盡量使用組合/聚合,而不是使用繼承來(lái)達(dá)到復(fù)用目的

LoD迪米特法則:類(lèi)間最少通信原則,采用中間類(lèi)。

1.16 Java中的網(wǎng)絡(luò)通信有那些方式,有什么區(qū)別?

分別是TCP和UDP;

TCP是一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過(guò)TCP實(shí)現(xiàn)的傳輸,得到的是一個(gè)順序的無(wú)差錯(cuò)的數(shù)據(jù)流。發(fā)送方和接收方成對(duì)的兩個(gè)socket之間必須建立連接,以便在TCP的基礎(chǔ)上進(jìn)行通信, 而UDP是一種無(wú)連接的協(xié)議,每個(gè)數(shù)據(jù)都是一個(gè)獨(dú)立的信息,包括完整的源地址和目的地址 ,UDP是不可靠的。

1.17一個(gè)程序編譯完成后在內(nèi)存中是如何存儲(chǔ)的?

不存儲(chǔ)在內(nèi)存條上,存儲(chǔ)在硬盤(pán)上,當(dāng)需要程序運(yùn)行時(shí),程序被加載到內(nèi)存條上。

1.18 IO流

在java使用流的機(jī)制進(jìn)行數(shù)據(jù)的傳送,從文件到內(nèi)存是輸入流,從內(nèi)存到文件是輸出流,輸入流可以通過(guò) read讀取,輸出流以write或print寫(xiě)入,對(duì)于流可以是分為高層流和低層流,低層以一個(gè)字節(jié)或字符為單位進(jìn)行處理,高層流以一批數(shù)據(jù)為單位進(jìn)行處理。

FileInputStream(System.in)至InputSteamReader至BufferReader

OutputSteam(System.out)至printStream

FileReader至BufferedReader

FileWriter 至 PrintWriter或bufferWriter

分類(lèi):

字節(jié)(二進(jìn)制)

FileInputStream(低層輸入流)

FileOutputStream(低層輸出流)

PrintStream(高層流) System.out.println()

字符(一個(gè)char)

FileReader

FileWriter

在java.io包中還有許多其他的流,主要是為了提高性能和使用方便

1.19為什么重寫(xiě)equals()時(shí)也要重寫(xiě)hashCode()?兩者什么關(guān)系

因?yàn)檫@兩個(gè)函數(shù)都可以重寫(xiě);完全可以hashcode相等的對(duì)象而equals確返回false;重寫(xiě)hashCode是為了集合類(lèi)存儲(chǔ)這些對(duì)象的時(shí)候有個(gè)比較規(guī)則;比如Map不允許重復(fù)元素,就是通過(guò)hashCode來(lái)檢測(cè)的;但是hashcode的實(shí)現(xiàn),一般要滿(mǎn)足幾個(gè)特征,比如:自反性,傳遞性什么的。

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JAVA基礎(chǔ)面試總結(jié)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢(xún)關(guān)注公眾號(hào):hfpxwx
咨詢(xún)QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)