1. java 技術要求
第一個是基礎。
比如對集合類,並發包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深入了解,最好是看過源碼了解底層的設計。比如一般面試都會問ConcurrentHashMap,CopyOnWrite,線程池,CAS,AQS,虛擬機優化等知識點,因為這些對互聯網的企業是絕對重要的。
而且一般人這關都過不了,還發鬧騷說這些沒什麼用,為什麼要面試。舉一例子,在使用線程池時候,因為使用了無界隊列,在遠程服務異常情況下導致內層飆升,怎麼去解決?你要是連線程池都不清楚,你怎麼去玩?再舉一例,由於對ThreadLocal理解出錯,使用它做線程安全的控制,導致沒能實現真的線程安全。所以作為一個拿三萬的JAVA程序員這點基礎是要有的。
第二你需要有全面的互聯網主流技術相關知識。
從底層說起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問需要了解到什麼程度,我可以給你說個大慨。首先對於MySQL,你要知道常見的參數設置,存儲引擎怎麼去選擇,還需要了解常見的索引引擎,知道怎麼去選擇。知道怎麼去設計表,怎麼優化sql,怎麼根據執行計劃去調優。
高級的你需要去做分庫分表的設計和優化,一般互聯網企業的資料庫都是讀寫分離,還會垂直與水平拆分,所以這個也有經驗的成分在裡面。然後redis,mongodb都是需要了解原理,需要會調整參數的,而nginx和tomcat幾乎都是Java互聯網方面必配,其實很阿里的技術棧選擇有點關系。至於rpc相關的就多的去,必須各種網路協議,序列化技術,SOA等等你要有一個深入的理解。
現在應用比較廣的rpc框架,在國內就是bbo了,可以自行搜索。至於jms相關的起碼得了解原理吧,一般情況下不是專門開發中間件系統和支撐系統的不需要了解太多細節,國內企業常用的主要是activeMQ和kafka。你能對我說的都研究的比較深入,阿里p7都不是太大問題的,當然這個還需要看你的架構能力方面的面試表現了。
第三就是編程能力,編程思想,演算法能力,架構能力。
首先30K程序員對演算法的要求還是比較低,再高級也最多紅黑樹吧,但是排序和查詢的基本演算法得會。編程思想是必須的,問你個AOP和IOC你起碼的清清楚楚,設計模式不說每種都用過,但也能了解個幾種吧。
編程能力這個並不好去評價,但是拿一個2000W用戶根據姓名年齡排序這種題目也能信手拈來。最後就是架構能力,這種不是說要你設計個多牛逼多高並發的系統,起碼讓你做一個秒殺系統,防重請求的設計能快速搞定而沒有坑吧。
技術的突破需要依賴業務場景的需求和自身刻意的規劃學習,二者缺一不可。但前者是機會,往往不是自己能完全把控的,如果在工作中沒有實踐場景,最好的辦法就是系統的學習與梳理,待機會來臨時才能一展身手。
2. Java要學到什麼程度才能有公司要去實習
對於實習生而言,其實很多公司要求都不是很高,畢竟對你的要求要對的起給你的工資水平,很多公司肯定都知道你本身的大體水平,不會期望太高,只是讓你邊學習邊工作,如果你足夠聰明伶俐,足夠好學,可能就多培養你一些。
不過不同水平的公司(BAT>TMD>其他優秀的互聯網公司>小型創業公司),肯定是對你的培養程度不同的,相應的對你實習的要求肯定是不同的。不要認為對你要求越高,得到的實習工資就會高,不是的,像騰訊阿里等公司對於實習生技術要求很高,但工資就在兩三千左右,但以後的發展卻是遠遠大於這個價值的。
一、BAT企業對實習生的要求(以阿里為代表):
java基礎非常重要,當然也要深入理解原理,什麼JVM,JMM,Classloader,還有一些常見類的源碼,自己可以試著分析一遍,現在讓你說出LinkedList的內部實現你能不能說出來,HashMap不用多說了,80%的面試都會問到。還有重要的,多線程,並發,網路,IO。這些都是要看看的!特別是spring的源碼要好好看看,裡面的架構設計得非常好!
需要掌握的技術知識具體總結如下:
1、操作系統。尤其是內存/線程/進程方面
2、計算機網路協議,重點關注 TCP/UDP/HTTP。
3、數據結構與演算法。
4、資料庫,知道mysql存儲引擎中索引的實現機制、資料庫事務的幾種粒度、行鎖,表鎖;樂觀鎖,悲觀鎖等
5、設計模式,熟悉常用的幾種設計模式就行。
6、Java語言基礎。熟悉java語言基礎,了解JVM、內存模型,重點考察 面向對象、集合框架(繼承關系,實現原理)、異常體系、IO體系、並發集合、多線程。熟悉多線程編程/並發/線程安全明顯可以加分。
7、J2EE,熟悉Spring/Spring MVC , ORM 什麼的吧。看過源碼,了解原理之類的也明顯可以加分。
8、Linux,熟悉基本的linux命令就行吧
9、如果有自己做過的實習項目會加分不少。
TMD企業對實習生的要求(以美團為代表):
1、精通Java/C++/golang程序開發(至少一種)
2、熟悉linux下後台服務開發、網路開發
3、熟悉zookeeper、redis等開源項目優先,
4、有分布式、服務一致性領域研發經驗優先
5、優秀的溝通協調能力以及項目推進落地能力
其他優秀的互聯網公司(以 網易為代表)
1、具備扎實的計算機專業基本功,資料庫、網路、操作系統等,深厚的Java的編程基礎
2、熟悉常見的設計模式具備扎實的計算機專業基本功,資料庫、網路、操作系統等,深厚的Java的編程基礎,熟悉常見的設計模式
3、熟練掌握主流的開源框架設計理念,對Spring、Mybatis等有深入的了解;
4、熟練掌握資料庫原理,基於Oracle或者Mysql的設計和開發
5、熟悉Linux操作系統,git,maven等工具
6、有較強的邏輯分析、數據分析、問題排查能力;
其他的一些小型的互聯網公司,依據自身的發展方向不同,對實習生的要求也是不同的,需要具體問題具體分析的,當然了不變的一點是:基礎知識一定要打好,一些計算機基礎什麼的該知道的要知道。
其實上面有些技能還是有點超綱的(對於實習生而言),不要有壓力,能有六七分的掌握就可以,不要被這些招聘要求嚇壞,很多都是要求偏高的,當然了如果你正好知道那也是你的優勢不是?
3. 怎麼用java實現mysql的復制資料庫里所有的表跟數據
樓主要考慮的不僅僅是標題的需求。
1、復制資料庫里所有的表和數據的目的是什麼。
a、假設樓主是要做資料庫備份的話,且通過程序來做的話,可以使用程序來執行dos命令
如java:Runtime.getRuntime().exec("e:\\MySQL\\bin\\mysqlmp -h localhost -uroot -p123 db_name")
b、假設樓主是要做庫與庫之間的同步的話,可以使用第三方客戶端進行,比如navicat,sqlyong等
c、假設樓主是要做庫與庫之間的同步且用程序進行的話,可以使用mysql中提供操作資料庫的api來做相對應的讀取工作和對比工作,然後寫入工作
4. java web開發為什麼使用的資料庫是Mysql而不是Sql Server
從應用場景上講:
MySQL。MySQL基本是生於互聯網,長於互聯網。其應用實例也大都集中於互聯網方向,MySQL的高並發存取能力並不比大型資料庫差,同時價格便宜,安裝使用簡便快捷,深受廣大互聯網公司的喜愛。並且由於MySQL的開源特性,針對一些對資料庫有特別要求的應用,可以通過修改代碼來實現定向優化,例如SNS、LBS等互聯網業務。一個典型的應用場景是:某互聯網公司,成立之初,僅有PC數台,通過LAMP架構迅速搭起網站框架。隨著業務擴張、市場擴大,迅速發展成為6台Dell小型機的中型網站。現在花了三年,終於成為垂直領域的最大網站,計劃中的數據中心,擁有Dell機架式伺服器40台,總預算20萬美金。
MS SQL Server。windows生態系統的產品,好處壞處都很分明。好處就是,高度集成化,微軟也提供了整套的軟體方案,基本上一套win系統裝下來就齊活了。因此,不那麼缺錢,但很缺IT人才的中小企業,會偏愛 MS SQL Server 。例如,自建ERP系統、商業智能、垂直領域零售商、餐飲、事業單位等等。1996年,Bill Gates親自出手,從Borland挖來了大牛Anders,搞定了C#語言。微軟02年搞定了http://ASP.NET。成熟的.NET、Silverlight技術,為 MS SQL Server贏得了部分互聯網市場,其中就有曾經的全球最大社交網站MySpace,其發展歷程很有代表性,可作為一個比較特別的例子【3】。其巔峰時有超過1.5億的注冊用戶及每月400億的訪問量。應該算是MS SQL Server支撐的最大的數據應用了。
從架構上講:
MySQL:最大的一個特色,就是自由選擇存儲引擎。每個表都是一個文件,都可以選擇合適的存儲引擎。常見的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由於這種開放插件式的存儲引擎,比如要求資料庫與引擎之間的松耦合關系。從而導致文件的一致性大大降低。在SQL執行優化方面,也就有著一些不可避免的瓶頸。在多表關聯、子查詢優化、統計函數等方面是軟肋,而且只支持極簡單的HINT。
SQL Server :數據架構基本是縱向劃分,分為:Protocol Layer(協議層), Relational Engine(關系引擎), Storage Engine(存儲引擎), SQLOS。SQL執行過程就是逐層解析的過程,其中Relational Engine中的優化器,是基於成本的(CBO),其工作過程跟Oracle是非常相似的。在成本之上也是支持很豐富的HINT,包括:連接提示、查詢提示、表提示。
5. 為什麼java要求越來越高
01首先,當前Java開發崗位的人才需求量還是比較大的,但是很多大廠對於Java開發人員的要求確實有所提升,原因主要集中在三個方面:
其一是當前大廠在不斷進行結構升級,構建自身的技術平台(生態)是非常重要的,所以大廠的Java開發崗位往往更關注應聘者的研發能力,而且對於新技術通常都比較敏感。
其二是Java語言本身是全場景編程語言,所以不少大廠都要求Java程序員具有全棧開發能力和多場景開發能力,這一點在雲計算時代有越來越明顯的體現。
對於初級程序員來說,當前如果想獲得較強的崗位競爭力,應該重視積極豐富自身的知識結構。
其三是當前Java程序員的群體比較龐大,要想進入大廠發展必然會面臨較大的競爭,而且在工業互聯網時代,Java語言依然有非常多的應用場景,所以當前主攻Java的大學生也比較多。
當前不論是計算機專業的本科生還是研究生,掌握Java編程的同學還是非常多的。
02從提升就業競爭力的角度來說,初學者在學習Java的過程中,應該選擇一個主攻方向,然後圍繞這個主攻方向來不斷豐富自身的知識結構。
在主攻方向的選擇上,一定要優先考慮發展前景比較好的方向,比如大數據方向就是一個不錯的選擇,不僅崗位需求潛力比較大,崗位附加值也相對比較高。
03
最後,Java開發崗位通常都非常重視應聘者的開發實踐能力,實踐能力越強則就業競爭力也就越強。
6. java.資料庫問題:ENGINE=InnoDB ,這個表示什麼意思
ENGINE=InnoDB 意思是資料庫採用innoDB引擎。如果你想使用外鍵,事務等功能,就需要innodb引擎。它是MySQL 上第一個提供外鍵約束的數據存儲引擎,除了提供事務處理外,InnoDB 還支持行鎖,提供和 Oracle 一樣的一致性的不加鎖讀取,能增加並發讀的用戶數量並提高性能,不會增加鎖的數量。InnoDB 的設計目標是處理大容量數據時最大化性能,它的 CPU 利用率是其他所有基於磁碟的關系資料庫引擎中最有效率的。
7. 在大學裡面自學過java,能找到工作嗎
學校不是企業,不會跟著技術的發展和市場的需求而制定教材。java語言所涉及的內容很多也很雜,實際商業環境下有很多技術都是屬於java領域的,但學校里是教不了的。很多商用技術連你們老師都未必了解,更遑論教你們了。
一般學校里教不了太多東西,框架更加不會是學校里會教的東西,框架是要結合實際的商用項目,去邊做邊了解的。
不過學校里有一點好處是理論課講得細,內容進度也不會太快,可以打好計算機方面的基礎,有了扎實的底子將來到了企業再學習企業里的技術不會太過艱難。
一、java學習路線
有完整的學習路線規劃,學習才不會漫無目的,東一榔頭西一棒槌。
8. JAVA+sql server做Web程序,和JAVA+mysql做Web程序影響速度很大嗎
最近在做mssql轉換成mysql的工作,總結了點經驗,跟大家分享一下。
同時這些也會在不斷更新。也希望大家補充。
1 mysql支持enum,和set類型,sql server不支持
2 mysql不支持nchar,nvarchar,ntext類型
3 mysql的遞增語句是AUTO_INCREMENT,而mssql是identity(1,1)
4 msms默認到處表創建語句的默認值表示是((0)),而在mysql裡面是不允許帶兩括弧的
5 mysql需要為表指定存儲類型
6 mssql識別符是[],[type]表示他區別於關鍵字,但是mysql卻是 `,也就是按鍵1左邊的那個符號
7 mssql支持getdate()方法獲取當前時間日期,但是mysql裡面可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是 now()函數
8 mssql不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法
9 mysql支持insert into table1 set t1 = 『』, t2 = 『』 ,但是mssql不支持這樣寫
10 mysql支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)
11 mssql不支持limit語句,是非常遺憾的,只能用top 取代limt 0,N,row_number() over()函數取代limit N,M
12 mysql在創建表時要為每個表指定一個存儲引擎類型,而mssql只支持一種存儲引擎
13 mysql不支持默認值為當前時間的datetime類型(mssql很容易做到),在mysql裡面是用timestamp類型
14 mssql裡面檢查是否有這個表再刪除,需要這樣:
if exists (select * from dbo.sysobjects where id = object_id(N'uc_newpm') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
但是在mysql裡面只需要 DROP TABLE IF EXISTS cdb_forums;
15 mysql支持無符號型的整數,那麼比不支持無符號型的mssql就能多出一倍的最大數存儲
16 mysql不支持在mssql裡面使用非常方便的varchar(max)類型,這個類型在mssql裡面既可做一般數據存儲,也可以做blob數據存儲
17 mysql創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder) 在mssql裡面必須要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers
(username asc,appid asc)
18 mysql text欄位類型不允許有默認值
19mysql的一個表的總共欄位長度不超過65XXX。
20一個很表面的區別就是mysql的安裝特別簡單,而且文件大小才110M(非安裝版),相比微軟這個龐然大物,安裝進度來說簡直就是.....
21mysql的管理工具有幾個比較好的,mysql_front,和官方那個套件,不過都沒有SSMS的使用方便,這是mysql很大的一個缺點。
22mysql的存儲過程只是出現在最新的版本中,穩定性和性能可能不如mssql。
23 同樣的負載壓力,mysql要消耗更少的CPU和內存,mssql的確是很耗資源。
24php連接mysql和mssql的方式都差不多,只需要將函數的mysql替換成mssql即可。
25mysql支持date,time,year類型,mssql到2008才支持date和time。