人妻系列无码专区av在线,国内精品久久久久久婷婷,久草视频在线播放,精品国产线拍大陆久久尤物

當(dāng)前位置:首頁 > 數(shù)據(jù)庫 > 正文

java遞歸簡單例子 java遞歸查詢所有子節(jié)點

java遞歸簡單例子 java遞歸查詢所有子節(jié)點

大家好,今天來為大家解答java遞歸簡單例子這個問題的一些問題點,包括java遞歸查詢所有子節(jié)點也一樣很多人還不知道,因此呢,今天就來為大家分析分析,現(xiàn)在讓我們一起來看...

大家好,今天來為大家解答java遞歸簡單例子這個問題的一些問題點,包括java遞歸查詢所有子節(jié)點也一樣很多人還不知道,因此呢,今天就來為大家分析分析,現(xiàn)在讓我們一起來看看吧!如果解決了您的問題,還望您關(guān)注下本站哦,謝謝~

如何用java打開一個本地文件

publicstaticvoidgetFileSize(Stringpath){

//傳入文件路徑

Filefile=newFile(path);

//測試此文件是否存在

if(file.exists()){

//如果是文件夾

//這里只檢測了文件夾中第一層如果有需要可以繼續(xù)遞歸檢測

if(file.isDirectory()){

intsize=0;

for(Filezf:file.listFiles()){

if(zf.isDirectory())continue;

size+=zf.length();

}

System.out.println("文件夾"+file.getName()+"Size:"+(size/1024f)+"kb");

}else{

System.out.println(file.getName()+"Size:"+(file.length()/1024f)+"kb");

}

//如果文件不存在

}else{

System.out.println("此文件不存在");

}

}

Java中的冒泡排序是如何實現(xiàn)的

謝邀。冒泡排序還是比較好理解的,主要是要理解其核心思想。如果從小到大排序,每一輪排序就找出未完成排序序列中的最大值,然后放在最后,直到排序完成為止。

(冒泡排序過程及結(jié)果展示)

一般而言,冒泡排序有以下步驟:

設(shè)數(shù)組長度為N,比較前后相鄰的兩個數(shù)據(jù),如果前值大于后值,就將這兩個值交換。

重復(fù)以上步驟,從第0個數(shù)據(jù)到N-1個數(shù)據(jù)進(jìn)行遍歷,最大值就會沉在下方。

以上就是冒泡排序的基本思想,按照這個定義很快就能寫出代碼:

測試代碼:

運行結(jié)果如下:

0,1,1,2,3,3,4,7,8,9,12,22,65

當(dāng)然,如果序列本身有一部分是有序序列,或者本來就排序已經(jīng)完成,那么遍歷會帶來不少開銷,可以設(shè)置一個布爾值進(jìn)行開關(guān)操作。如果已經(jīng)完成排序,那么中止遍歷,如果未完成,繼續(xù)遍歷。

如果你對學(xué)習(xí)人工智能和科技新聞感興趣,可以訂閱我的頭條號,我會在這里發(fā)布所有與算法、機器學(xué)習(xí)以及深度學(xué)習(xí)有關(guān)的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區(qū)回復(fù)和討論,看到即回。

(碼字不易,若文章對你幫助可點贊支持~)

如何才能成為java架構(gòu)師我為大家來分析一下

一:編程基礎(chǔ)

不管是C還是C++,不管是Java還是PHP,想成為一名合格的程序員,基本的數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)還是要有的。下面幾篇文章從思想到實現(xiàn),為你梳理出常用的數(shù)據(jù)結(jié)構(gòu)和經(jīng)典算法。

1-1常用數(shù)據(jù)結(jié)構(gòu)

數(shù)組、鏈表、堆、棧、隊列、Hash表、二叉樹等

1-2算法思想

算法時間復(fù)雜度和空間復(fù)雜度的分析計算

算法思想:遞推、遞歸、窮舉、貪心、分治、動態(tài)規(guī)劃、迭代、分枝界限

1-3經(jīng)典算法

經(jīng)典排序:插入排序、冒泡排序、快排(分劃交換排序)、直接選擇排序、堆排序、合并排序

經(jīng)典查找:順序查找、二分查找、二叉排序樹查找

1-4高級數(shù)據(jù)結(jié)構(gòu)

B+/B-數(shù)、紅黑樹、圖等

1-5高級算法

圖的深度優(yōu)先搜索、圖的廣度優(yōu)先搜索、拓?fù)渑判?、Dijkstra算法(單源最短路徑)、霍夫曼編碼、輾轉(zhuǎn)相除法、最小生成樹等

二:Java語言基礎(chǔ)

誕生不過二十余年的Java語言憑借其跨平臺、面向?qū)ο蟆⑦m合于分布式計算的特性,廣泛應(yīng)用于Web網(wǎng)站、移動設(shè)備、桌面應(yīng)用中,并且已經(jīng)連續(xù)多年穩(wěn)居TOBIE編程語言排行榜前列,最近更是登上冠軍寶座。Java有哪些優(yōu)秀而又與眾不同的地方首先一定要清楚。

2-1基礎(chǔ)語法

Java語法格式,常量和變量,變量的作用域,方法和方法的重載,運算符,程序流程控制,各種基本數(shù)據(jù)類型及包裝類

2-2重要:集合類

Collection以及各種List、Set、Queue、Map的實現(xiàn)以及集成關(guān)系,實現(xiàn)原理

Collections和Arrays

2-3其他JavaAPI

String和StringBuffer,System和Runtime類,Date和DateFomat類

java.lang包

java.util包(集合類體系、規(guī)則表達(dá)式、zip,以及時間、隨機數(shù)、屬性、資源和Timer等)

java.math包

java.net包

java.text包(各種格式化類等)

java.security包

2-4面向?qū)ο?、面向接?/p>

對象的三大特性:封裝、繼承和多態(tài),優(yōu)缺點

如何設(shè)計類,類的設(shè)計原則

this關(guān)鍵字,final關(guān)鍵字,static關(guān)鍵字

對象的實例化過程

方法的重寫和重載;方法和方法的參數(shù)傳遞過程

構(gòu)造函數(shù)

內(nèi)部類,抽象類,接口

對象的多態(tài)性(子類和父類之間的轉(zhuǎn)換、父類紙箱子類的引用),抽象類和接口在多態(tài)中的應(yīng)用

2-5JVM內(nèi)存模型、垃圾回收

2-6關(guān)于異常

Throwable/Error/Exception,CheckedExceptionvs.UncheckedException,異常的捕捉和拋出,異常捕捉的原則,finally的使用

2-7多線程

線程和進(jìn)程的概念

如何在程序中創(chuàng)建多線程,線程安全問題,線程之間的通訊

線程的同步

死鎖問題的剖析

線程池

2-8IO

java.io包,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合。

File及相關(guān)類,字節(jié)流InputStream和OutputStream,字符流Reader和Writer,以及相應(yīng)緩沖流和管道流,字節(jié)和字符的轉(zhuǎn)化流,包裝流,以及常用包裝類使用

分析IO性能

2-9XML

熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理;這幾種解析方法的原理

2-10一些高級特性

反射、代理、泛型、枚舉、Java正則表達(dá)式

2-11網(wǎng)絡(luò)編程

網(wǎng)絡(luò)通信協(xié)議原理及適用場景,Socket編程,WEB服務(wù)器的工作原理

2-11JDK1.5、JDK1.6、JDK1.7、JDK1.8每個版本都比前面一個版本添加了哪些新特性,進(jìn)行了哪些提升

三:數(shù)據(jù)庫相關(guān)

前面說到了數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫簡單來說就像是電子化的檔案柜,是按照一定的數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫。

3-1理論基礎(chǔ)

數(shù)據(jù)庫設(shè)計原則和范式

事務(wù)(ACID、工作原理、事務(wù)的隔離級別、鎖、事務(wù)的傳播機制)

3-2各種數(shù)據(jù)庫優(yōu)缺點、使用場景分析

MySQL/SQLServer/Oracle以及各種NoSQL(Redis、MongoDB、Memcached、HBase、CouchDB等)

3-2SQL語句

數(shù)據(jù)庫創(chuàng)建,權(quán)限分配,表的創(chuàng)建,增刪改查,連接,子查詢

觸發(fā)器、存儲過程、事務(wù)控制

3-3優(yōu)化

索引原理及適用,大表查詢優(yōu)化,多表連接查詢優(yōu)化,子查詢優(yōu)化等

3-4分庫、分表、備份、遷移

導(dǎo)入、導(dǎo)出,分庫、分表,冷備熱備,主從備份、雙機熱備、縱向擴(kuò)展、橫向擴(kuò)展

3-5JDBC

JDBCConnection、Statement、PreparedStatement、CallableStatement、ResultSet等不同類的使用

連接池(配置使用、實現(xiàn)原理)

ORM,DAO

四:JavaWeb核心技術(shù)(包括部分前端)

Html5/Css/JS原生/jQuery

Ajax(跨域等)

JSP/JavaBean/Servlet/EL/JSTL/TabLib

JSF

JSON

EJB

序列化和反序列化

規(guī)則引擎

搜索引擎

模板引擎

緩存

身份認(rèn)證

測試

集群

持久化

生成靜態(tài)頁技術(shù)

高性能

安全

事務(wù)JTA

其他需要了解的,如:管理JMX、安全JCCA/JAAS、集成JCA、通信JNDI/JMS/JavaMain/JAF、SSI技術(shù)

五、主流框架及工具

Struts1/Struts2

Spring(IoC、AOP等),SpringMVC

持久化:Hibernate/MyBatis

日志:Log4j

單元測試:JUnit

消息隊列:ActiveMQ、RabbitMQ等

負(fù)載均衡:Nginx/HaProxy

Web服務(wù)器:Tomcat、JBoss、Jetty、Resin、WebLogic、WebSphere等

通信:WebService(cxf的soap、restful協(xié)議)

緩存:Redis、Memcached

工作流:Activity、JBPM

搜索引擎:lucene,基于lucene封裝的solr

模板引擎:Velocity、FreeMaker

大數(shù)據(jù):Hadoop(HDFS和MapReduce)

構(gòu)建工具:Ant/Maven

六、JavaWeb系統(tǒng)設(shè)計與架構(gòu)

Java設(shè)計模式

JAVA與UML建模

面向服務(wù)架構(gòu):SOA/SCA/ESB/OSGI/EAI,微服務(wù)

工作2年還是只會增刪改查,Java程序員如何進(jìn)階

做JAVA開發(fā)的三年一個坎,你應(yīng)該慶幸你還有一年的時間可以用來提升,讓自己不要后悔!

不過話說回來,在平時的工作中其實90%的工作量都是增刪改查,或者是對增刪改查的改進(jìn),那些所謂的高并發(fā),多線程,高可用系統(tǒng),分布式系統(tǒng),負(fù)載均衡,緩存,數(shù)據(jù)庫讀寫分離,分庫分表等等全部都是圍繞增刪改查來做改進(jìn)的!

比如說緩存是因為數(shù)據(jù)庫的讀寫壓力大的時候,為增加讀寫效率而引進(jìn)的,使用緩存的內(nèi)存讀寫代替了數(shù)據(jù)庫的硬盤讀寫!

比如說數(shù)據(jù)庫的讀寫分離或者分庫分表都是在單點數(shù)據(jù)庫的壓力過大,性能低的時候引入的無論架構(gòu)怎么設(shè)計都是為了得到更好的讀寫效率!

再比如說,高可用,分布式都為了避免單點服務(wù)出現(xiàn)異常,導(dǎo)致讀寫服務(wù)不可用,從而引入的集群部署或者分布式部署!

由此可見,增刪改查是我們最核心的功能,只不過我們引入了其他的架構(gòu),完善我們的功能,讓我們的增刪改查更加的快速!

在實際的開發(fā)過程中,要多思考系統(tǒng)的瓶頸在哪?增刪改查的壓力在哪?怎么改進(jìn)?不要網(wǎng)上搜一堆亂七八糟的,覺得很屌的東西,學(xué)完之后發(fā)現(xiàn)他根本不知道是做什么的,一切的開發(fā)圍繞我們的業(yè)務(wù)來展開,然后才是增強體驗性,搭建快速穩(wěn)定的架構(gòu)!

那我們應(yīng)該怎么來進(jìn)階呢?

1,大局觀:不要只是盯著自己開發(fā)的功能,要知道整個系統(tǒng)的整個架構(gòu)是什么?使用什么技術(shù)?服務(wù)之間怎么通信?整個服務(wù)的性能怎么優(yōu)化?全面的來考慮,不然晉升的肯定不會是你!

2,不要一心撲在公司的工作上,要有自己的時間去學(xué)習(xí)最新的技術(shù),去拓寬自己的知識,明白別的公司用的是什么?主流開發(fā)技術(shù)開發(fā)是什么?

3,一定要多總結(jié),不管是平時的工作中或者學(xué)習(xí)中都能學(xué)到很多有用的東西,要把它轉(zhuǎn)化成demo記錄在自己的技術(shù)文檔里面,方便以后自己查閱和使用!不是做過就算了,一定要記錄下來!

我晚上加班的時候,除非有急事,不然都學(xué)習(xí)自己的!然后才能感覺自己有很大的提升!我自己記錄了很多做過的,學(xué)過的JAVA相關(guān)技術(shù),以后會一直分享,需要的話請關(guān)注!

如何將java中的遞歸與流相結(jié)合

沒懂你的意思

尾遞歸究竟是好是壞

無論什么遞歸,在實際工作都不建議使用。但是遞歸這種思想,在數(shù)據(jù)結(jié)構(gòu)與算法相關(guān)的課程中還是很重要的,尤其是可以優(yōu)化這個思想,解決一些迭代問題。

普通遞歸

大多數(shù)人了解普通遞歸,都是在計算機相關(guān)專業(yè)經(jīng)典本科書籍譚浩強的《C語言程序設(shè)計》中,但是求n!階乘其實用遞歸是不明智的,因為除了速度慢,使用遞歸還無法預(yù)測計算過程中內(nèi)存的使用情況,如果發(fā)生了OOM就會影響整個項目。

遞歸的百度百科解釋是程序調(diào)用自身的編程技巧,也就是說在程序中調(diào)用了自己,如下圖,可以看到在shi_er這個函數(shù)中,又調(diào)用shi_er自身,從而達(dá)到了十進(jìn)制轉(zhuǎn)換二進(jìn)制的目的。遞歸的能力在于用有限的語句來定義對象的無限集合。一般來說,構(gòu)成遞歸需具備的條件:

1.子問題須與原始問題為同樣的事,且更為簡單;

2.不能無限制地調(diào)用本身,須有個出口,化簡為非遞歸狀況處理。

但是,如果沒有滿足上述條件,又輕易調(diào)用遞歸,就會有無限死循環(huán)的風(fēng)險,這也是我么在實際工作中不推薦使用遞歸的的原因。

尾遞歸

從上面的代碼我們可以看到,普通遞歸是從初始狀態(tài)開始計算,而尾遞歸是從最后開始計算,函數(shù)調(diào)用是出現(xiàn)在函數(shù)的尾部,直接讓被調(diào)用的函數(shù)返回時越過調(diào)用者,返回到調(diào)用者的調(diào)用者去。尾遞歸是極其重要的,因為用尾遞歸的話,可以避免對函數(shù)對堆棧和內(nèi)存的無法估計的消耗,無須保存中間函數(shù)的堆棧。

再舉一個用尾遞歸實現(xiàn)斐波那契數(shù)列的例子

intFibonacciTailRecursive(intn,intret1,intret2)

{

if(n==0)

returnret1;

returnFibonacciTailRecursive(n-1,ret2,ret1+ret2);

}

綜上,尾遞歸能夠比普通遞歸更加安全,但是總的來說,基于我的經(jīng)驗,實際工作中并不推薦使用遞歸。如果能夠?qū)δ阌兴鶐椭?,歡迎點贊留言。

我是蘇蘇思量,來自BAT的Java開發(fā)工程師,每日分享科技類見聞,歡迎關(guān)注我,與我共同進(jìn)步。

END,本文到此結(jié)束,如果可以幫助到大家,還望關(guān)注本站哦!