基於alpine的php,alpine 命令

本文目錄一覽:

幫我寫一篇關於世界盃的英文短文普通點的(250個字)

Tag: java技術

apache commons-fileupload 上傳組件1.0版,對臨時文件的刪除採用了deleteOnExit(),在jvm退出的時候刪除臨時文件。

如果一個應用有大量的文件上傳,而又很不幸,使用了fileupload1.0,那內存肯定會引起一些問題,還可能導致jvm crash,因為這些要被刪除的文件信息是保存在內存中的(Unix/Linux平台的jvm就是這種處理方式),至少它會引起java進程的內存佔用一直在漲(它們所在用的內存不在java heap,而是在native heap中),你卻找不出為什麼在漲,所以如果還在使用commons-fileupload1.0,升級吧,對了,commons-fileupload1.1需要commons-io包,在common-fileupload1.1中,臨時文件在它的File對象被收集的時候刪除,這就聰明多了,也避免了內存「泄漏」,呵呵。

希望對大家有些幫助,其實java的內存問題,如果是java heap泄漏,可以通過gc日誌看得到,最好不要內存一不正常,就只顧著檢查java heap中的對象,如果gc正常,那麼還是查查native code的問題吧,八成是由它引起來的,而且不好查。

又是好久沒有寫blog了,剛買了一本《Java Puzzlers》,好書,寫這blog的時候還在看,放不下了,看了這本書,才知道什麼東西都是學無止境,學吧那就,呵呵。

agilejava @ 01:55 | 閱讀全文 | 評論 0 | 引用 0 | 編輯

世界盃2006-06-24

Tag:

每四年一回的世界盃開了10多天了,對我最直接的影響就是累。工作上我得上夜班,以保證系統的穩定,好處就是可以很有理由地看比賽,巴西的比賽每場都看,呵呵。最愛巴西,有種預感,巴西這回又是冠軍。

上夜班也有點時間看書了,最近在看的書Ajax In Action 網站重構 Unix編程藝術,都是好書,呵呵。

今天休息,夜班上得我白天黑夜的亂過,現在還不困,鬱悶。

agilejava @ 02:26 | 閱讀全文 | 評論 2 | 引用 0 | 編輯

InetAddress.getLocalHost and InetAddress.getByName2006-06-02

Tag: java技術 Linux

可能許多習慣用java編程的程序員,想要獲取本地的地址,採用的方法多是InetAddress.getLocalHost()。

getLocalHost在java中的實現先是取得主機名,之對取得的主機名進行解析,sun的jdk里的源代碼可以看到:

String local = impl.getLocalHostName();

……….

InetAddress[] localAddrs;

……….

localAddrs = (InetAddress[]) InetAddress.getAddressFromNameService(local);

return localAddrs[0];

最近的問題是這樣子的:一台Linux,它的主機名不知道誰給設置成了40.201這種名字,而在/etc/hosts里也沒有它的配置。在調用InetAddress.getLocalHost()返回的地址竟然是40.0.0.201,這當然不是我想要的。

在我的Windows2000上測試一下(使用和Linux相同的jdk版本,sun jdk1.4.2_08),因為公司的主機名改了會有問題,就用下面的方法調用測試

InetAddress in =InetAddress.getByName(“40.201”);其原理是一樣的,結果就拋出了異常:

java.net.UnknownHostException: 40.201: 40.201

at java.net.InetAddress.getAllByName0(InetAddress.java:1011)

at java.net.InetAddress.getAllByName0(InetAddress.java:981)

at java.net.InetAddress.getAllByName(InetAddress.java:975)

同樣的jdk,在不同的操作系統上反應完全不一樣,研究了兩天,今天想通了些了,試著解釋一下:

1.4版的InetAddress.getByName發現輸入的參數是ip地址的時候,會先試著解析,如查發現它不是合法的ipv4地址,那麼會把調用gethostbyname這一系統調用,關鍵就在於Linux和Windwos2000的gethostbyname的實現上有差別。

在Linux上用c寫一個程序,調用gethostbyname(“41.201”)返回的結果是40.0.0.201;而在windows2000上返回了41.201,前者還算是一個合法的ip地址,後者就絕對不是了。這樣在windows2000上的測試就拋出異常。

而在jdk1.5中,已經在java類庫里做了一些必要的工作,統一了在不同平台上的行為,都返回了40.0.0.201,也不知道這是好還是壞。因為按常理來講,40.201應該拋出一個異常,要不查問題都不好查了,呵呵。

教訓就是,Linux的主機名可別用ip來做,要用也得用自己的真實ip,否則得到的結果想都想不到。

JDK1.5K K ,如果是一個ip地址,可別指望用InetAddress來驗證它是否正確,是否可,因為它不會析這個ip地址的,在jdk1.5中,InetAddress.getByName(“2222”)返回了0.0.8.174,和在Linux平台上完全一樣。

我也就理解這麼多了,更深的東西還需要再學習。

一點建議:在做網路編程的時候,如果建立一個連接,最好是根據實際情況用setConnectionTimeout設置一個連接超時,否則系統默認的時間會很長(不同的操作系統默認值是不一樣的),肯定會影響到系統的性能。

最近在學校開了一門計算機安全技術與實踐,挺感興趣,好好學習,呵呵。

agilejava @ 18:30 | 閱讀全文 | 評論 1 | 引用 0 | 編輯

Tapestry4.0中的session2006-05-11

Tag: Tapestry JavaScript j2ee

Tapestry4之前在Page類中訪問HttpSession或HttpRequest是很方便的,這樣子就可以了IRequestCycle.getRequestContext().getSession(),昨天看了一下它的源代碼,竟然有這樣子的注釋「

/**

* Returns the {@link RequestContext}. This is provided to ease the upgrade from Tapestry 3.0.

*

* @deprecated To be removed in 4.1.

*/

在4.1的時候會被刪除,雖然我現在用得還是4.0,考慮到以後的升級還是決定不這樣做了。

那隻好這樣子用了

/**注入Request*/

@InjectObject(“infrastructure:request”)

public abstract WebRequest getRequest();

public void login(IRequestCycle cycle) {

this.getRequest().getSession(true).setAttribute(“user”, getName());

}

上面的方法能夠在session中保存對象,可想刪除怎麼辦呢? this.getRequest().getSession(true)這樣子得到的對象是Tapestry包裝的WebSession,當中竟然沒有removeAttribute這個方法,鬱悶。看看Api中是怎麼說的,attribute the new value for the attribute, or null to delete the attribute entirely.

找到答案了,把屬性設為null就從session中刪除這個對象了。

this.getRequest().getSession(true).setAttribute(“user”, null);

用了一段時間Tapestry覺得在開發的時候最好看看它的源代碼,有些問題文檔上沒有,看源代碼就很明白了。

最近在做新的項目,竟然把以前一想就頭大的javascript用了不少,第一次發現原來javascript可以這樣寫,在寫之前看了些Prototype的東西,在寫我們自己的項目的一些頁面功能時,參照著Prototype的方法來做,竟然也有點面向對象編程的感覺。

剛過完五一,工作起來狀態恢復得慢,今天才差不多有些感覺了,繼續努力工作,好好學習:)

agilejava @ 00:30 | 閱讀全文 | 評論 1 | 引用 0 | 編輯

Hibernate POJO 是真正的POJO嗎?2006-04-05

Tag: Hibernate Groovy

今天晚上改一個程序,發現了一個很奇怪的問題,hibernate所說的POJO並不像其宣稱的那樣,可以當做普通的java對象使用,至少有時不注意的時候會出問題,在寫程序的時候,千萬要注意這種情況。

晚上遇到的問題是這樣子的,有一個對象Document,用Spring的HibernateTemplate load之後,我設置了這個對象的一個屬性,例如一個叫做md5的屬性,代碼如下:

…開始事務

Document doc = hTemplate.load(new Interger(documenId),Document.class);

String content = doc.getContent();

String md5 = MD5.get(content);//計算文檔內容的md5值

doc.setMd5(md5);

/*

getDocumentByMd5 的定義 :select doc.id from Document doc where doc.md5=:md5

在查詢之前,資料庫里的md5是惟一的,沒有md5碼相同的Document

*/

List list = hTemplate.getHibernateTemplate().findByNamedQueryAndNamedParam(“getDocumentByMd5”,

“md5”, md5);

….結束事務

返回的list結果的里按照我的思維應該是空的,但是結果是返回的list的第一個元素的值就是doc的對象id。

按理講程序的事務還沒有提交,doc也沒有被update,怎麼就會查出結果了呢?太奇怪了。

研究了一下Hibernate2.17c的SessionImpl源代碼,發現下面的注釋,在作查詢前,Hibernate要先檢測在查詢語句中出現的表涉及的對象是否被修改過,如果被修改過,那麼先提交這些修改,之後再查詢。這也解釋了為什麼剛修改過的對象,還沒有提交修改,就在查詢結果出查出來了。

/**

* detect in-memory changes, determine if the changes are to tables

* named in the query and, if so, complete execution the flush

*/

private boolean autoFlushIfRequired(Set querySpaces)

我就在想,這樣的POJO是真正的POJO嗎?而這些細節一般很難被注意到,反正我以後是不敢再這樣子用了,在用Hibernate的時候,從它那兒得到的POJO對象小心使用,它可不是「真正的POJO」。

今天剛發現Groovy有vim的插件,很好用,語法加亮顯示,下午在公司把它裝上後,工作效率明顯提高,不在滿屏白字了,呵呵,從這裡可以下載到這個插件,安裝很方便。

Groovy目前竟然不支持java標準的for (int i=0;i10;i++) 循環,別的樣式的for循環倒是有好幾種,鬱悶中。

註:上面說到的Hibernate的問題可以通過session.setFlushMode(FlushMode.COMMIT)設置提交來解決,abside的指點很正確,非常感謝。

Hibernate有四種FlushMode:NEVER,COMMIT,AUTO,ALWAYS,默認是AUTO,工作還需要再細心些。

(2006.06.07)

agilejava @ 00:33 | 閱讀全文 | 評論 1 | 引用 0 | 編輯

JDK1.4 讀文件的陷井2006-03-29

Tag: java技術 Linux

最近在工作遇到一個問題,too many open files異常,這個異常最終的結果導致Resin停止響應。

在我們的系統中是發現把一個目錄當作文件來讀取,而JDK1.4對這種情況雖然拋出了異常,但是已經打開的文件句柄沒有及時的釋放,最終超出了系統的限制,在Linxu下,可以用ulimit -a查看每個進程允許打開的文件個數,我們的是1024.

下面的代碼解釋了這種問題的發生,運行環境:JDK1.4

import java.io.*;

public class TestFile

{

public static void main(String[] args) throws Exception{

read(“/opt/”);

Thread.sleep(10000);

}

public static String read( String file )

{

String ret = null;

File f = null;

BufferedInputStream result = null;

ByteArrayOutputStream baos = null;

try{

f = new File( file );

if(!f.exists())

{

System.out.println(“file:”+file+” does not exist”);

return ret;

}

/*

在這裡加上對是否是文件的判斷

else if(!f.isFile()){

return null;

}

*/

result = new BufferedInputStream( new FileInputStream(f) );//這裡會拋出異常

baos = new ByteArrayOutputStream();

………

ret = new String(baos.toByteArray());

}catch(Exception e){

e.printStackTrace();

}finally {

try

{

if( result!=null ) result.close();

if( baos!=null ) baos.close();

f = null;

}catch(Exception e) {

e.printStackTrace();

}

}

return ret;

}

}

執行java TestFile之後,在線程等待的時候,用lsof -p 查看該java進程所打開的文件句柄,得到類似下面的結果:

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

java 7535 agile cwd DIR 8,1 4096 326402 /opt

可以看到,雖然讀取/opt的時候會有異常拋出,但是文件的句柄並沒有被釋放,累積的結果就是too many open files.

剛才在jdk 1.5上做了測試,這個問題已經解決了,它的提示更友好:

java.io.FileNotFoundException: /opt (Is a directory)

而用lsof -p 查看的時候也沒有發現有”/opt”

建議在jdk1.4上做開發的朋友,在讀文件的時候一定要多加小心。

BTW:今天在機子上裝了一個vmware,順便裝了一個Ubuntu5.10,感覺好極了,中文的支持也很好,這個BLOG就是在Ubuntu中的FIREFOX上寫得,下面就是我的桌面。

agilejava @ 00:11 | 閱讀全文 | 評論 0 | 引用 1 | 編輯

groovy的異常處理2006-03-27

Tag: Groovy

在Groovy中處理異常和在java中一樣,原來一直想不通Groovy如何處理異常,原來它可以使用和java中一樣的try/catch就行了.

try{

i = Integer.parseInt(“abc”)

}catch(Exception e){

print “catch:”+e

}

再仔細地看了一下Groovy網站上的介紹:

Groovy is an agile dynamic language for the Java Platform that has many of the features that people like so much in languages like Python, Ruby and Smalltalk, making them available to Java developers using a Java-like syntax.

終於明白Groovy是一種動態的java,它可以更有效地使用java編程,在java中可以使用的語法同樣地在Groovy中基本上也可以使用,Groovy的語法更靈活。

下午寫了一個Eclipse的插件,和以前一樣,界面部分耗費了大約2/3的時間,需要一個設計器了,老這樣子很累。有一個網站相當得好,,因為不常使用SWT/JFace,所以寫界面的時候很費勁,從這個網站上學了不少東西,感謝。

從昨天開始下載Ubuntu 5.10,目前為止還是沒有下載下來,晚上不關電腦,明天應該能回來安裝了。

agilejava @ 01:34 | 閱讀全文 | 評論 0 | 引用 1 | 編輯

Groovy嵌入java程序中緩存class2006-03-25

Tag: Groovy java技術

今天繼續Groovy,下午使用Groovy遇到了一個,寫了一個大約有90行的Groovy腳本,在一個jsp里做了一下測試,執行時間竟然要到1~2秒,經過測試發現95%的時間花在了編譯上面,而我們的腳本可以隨時需要修改,這可不能滿足需要,看了一會兒Groovy的文件,發現它把每一個腳本均是編譯成一個class之後構造一個GroovyObject調用其中的run方法,這麼一來,可以緩存編譯後的class來避免每次編譯,時間不等人啊。

現在的策略是:

1.先看緩存中有沒有與腳本對應的class,有則檢查腳本的修改時間是否大於緩存中所記錄的時間戳,如果大於,則重新編譯,之後再緩存;如前述的條件均不滿足,從緩存中取class

2.檢查過緩存之後,根據得到的class構造出一個GroovyObject

3.調用groovyObject.setProperty將需要的參數綁定

4.調用run方法,取得返回結果

再運行測試的jsp,5毫秒,快了很多,能夠滿足系統現在的要求了。

而Groovy網站上講的例子是很簡單,但在生產環境下根本不能那麼用,建議有用Groovy嵌入到java的項目,最好還是把class緩存起來,提高腳本執行的效率。

晚上把這個功能介紹給同事,讓他們試用一下,效果非常好。

Groovy提供了一種有效的擴展系統的功能,還要繼續挖掘它的潛力。

明天去上課,周末準備寫一個eclipse 插件,看時間了。

agilejava @ 00:04 | 閱讀全文 | 評論 1 | 引用 2 | 編輯

改名2006-03-23

Tag:

今天才注意到我的博客名叫agile sungny,sungny這個傢伙好幾年沒到這裡來了,以前還發個文章,估計都把這兒忘記了,正好我獨佔這裡了,因此我決定改名,呵呵。

晚上搞了一下網頁消重的工作,測試了一下,效果還不錯,主要的演算法是從上面學來的,明天下班後想想如何改進。

今天頭兒有一個新的需求,世界盃就要來了,有些需求在現有中系統比較難以辦到,昨天做的Groovy功能正好派上用處了,下班的時候試了一下效果,還是滿意。

原來是想把每個Groovy腳本在第一次執行的時候編譯成class後緩存起來,但是現有系統的內存佔用簡直是驚人,再搞這麼多的class進去,肯定不行,所以只能犧牲一些效率了。

剛才在網上亂看,發現了一個博客價值評估工具 ,評估了一下我的博客,

agile sungny 評估價值:14,395 RMB

有1萬多啊,呵呵,不知道他們是怎麼搞出來的,透露一下就好了。

最近學習的時間少了許多,晚上睡覺前要看一個英文短文再睡,要不老師下回上課又要提問我了,統計了一下,第二次課我讓提問了一回,第三次一回,第四課三回,還不會答,必須改變這種狀況。

介紹一下「阿爾派」音響

在持續追求MobileEntertainment之後,隨之而來的當然就是影像。Alpine率先注意到影像媒體的必要性,並以此確立了ALPINEINTELLI-GENTNETWORKSYSTEM這種通稱為AI-NET系統的高速、高容量BUS系統。其對應範圍不僅僅只是停留在與多媒體間的系統結合,更遍及到防盜用的保安系統中,甚至連龐大的DVD資料都能夠處理。在自由自在地組合喜歡的系統的基礎上,其操作性能亦非常出色,是能夠構築出最尖端畫質、音質的靈敏系統。確立重低音的播放技術,調和整體的聲音平衡Alpine在追求理想聲音方面已取得的成果就是高效率、低失真並立的DDDrive方式揚聲器(重低間揚聲器)以及在實質電壓下可將能力發揮到最大限度的V12功率放大器。2000年機種的主題就是高品質的重低音播放。

讓汽車音響迷們可充分地享受到不會被隨車而來的發動機聲和行車聲所掩蓋住的、強力而又乾脆的低音。從形成聲音的主控單元開始,一直到放大器、揚聲器,以這種思考方式使整個系統發出您未曾體驗過的重低音效果。使穩定的高保真再現的STARCircuit製作出可最大限度地引發出BassEngine之特色的功率放大器也是Alpine2000年機種的主題。基於此概念Alpine開發出了2聲道規格的MRV-T707與T407兩個機種。另外還開發了STARCircuit,防止了音質劣化,使穩定的高保真再現成為可能。

alpine鏡像密碼有效期

alpine鏡像密碼有效期是30天。

alpine鏡像在構建鏡像過程中作為基礎鏡像佔比越來越高,下面是alpine鏡像中包管理工具apk使用相關示例:

1、apk-help命令查看完整的包管理命令。

2、apk update:從遠程鏡像源中更新本地鏡像源索引。

3、apk add:安裝PACKAGES並自動解決依賴關係,也可以從第三方倉庫添加軟體包。

Alpine 操作系統是一個面向安全的輕型 Linux 發行版。它不同於通常 Linux 發行版,Alpine 採用了 musl libc 和 busybox 以減小系統的體積和運行時資源消耗,但功能上比 busybox 又完善的多,因此得到開源社區越來越多的青睞。

在保持瘦身的同時,Alpine 還提供了自己的包管理工具 apk,可以通過網站上查詢包信息,也可以直接通過 apk 命令直接查詢和安裝各種軟體。

總結如下:

Alpine Linux Docker鏡像基於Alpine Linux操作系統,後者是一個面向安全的輕型Linux發行版。不同於通常Linux發行版,Alpine Linux採用了musl libc和busybox以減小系統的體積和運行時資源消耗。在保持瘦身的同時。

Alpine Linux還提供了自己的包管理工具apk,可以在其網站上查詢,或者直接通過apk命令查詢和安裝。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/156568.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-18 01:56
下一篇 2024-11-18 01:56

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python命令大全及說明

    Python是一種高級編程語言,由Guido van Rossum於1989年底發明。它具有良好的語法結構和面向對象的編程思想,具有簡潔、易讀、易學的特點,是初學者以及專業開發人員…

    編程 2025-04-29
  • Git config命令用法介紹:用正確的郵箱保障開發工作

    本文將詳細介紹如何使用git config命令配置Git的全局和本地用戶信息,特別是如何正確使用用戶郵箱,保障Git操作的正常進行。 一、git config命令介紹 Git中的每…

    編程 2025-04-29
  • Python SSH 遠程執行命令

    Python SSH 遠程執行命令是指在一個伺服器上執行遠程另一個伺服器上命令。如果你需要在本地機器上執行命令,或者在遠程機器上執行本地命令,你都可以使用 SSH。在 Python…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • 剖析命令執行函數

    在編程開發過程中,命令執行函數是非常常見的一個概念。它是指接受一個命令字元串,並將其解析執行,返回相應的結果或錯誤信息的函數。本文將從多個方面對命令執行函數進行詳細的闡述,包括其定…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python中獲取用戶輸入命令的方法解析

    本文將從多個角度,分別介紹Python中獲取用戶輸入命令的方法,希望能夠對初學者有所幫助。 一、使用input()函數獲取用戶輸入命令 input()是Python中用於獲取用戶輸…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27

發表回復

登錄後才能評論