于吉吉的技術(shù)博客

          建造高性能門戶網(wǎng)

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            65 隨筆 :: 6 文章 :: 149 評(píng)論 :: 0 Trackbacks

          #

               摘要: 一直以來(lái)似乎都有一個(gè)錯(cuò)覺,認(rèn)為map跟其他的集合類一樣繼承自Collection,其實(shí)不然,Map和Collection在結(jié)構(gòu)層次上是沒有任何關(guān)系的,通過(guò)查看源碼可以發(fā)現(xiàn)map所有操作都是基于key-value對(duì),而不是單獨(dú)的元素。

          下面以HashMap為例子,深入對(duì)Map的實(shí)現(xiàn)機(jī)制進(jìn)行了解,在這個(gè)過(guò)程中,請(qǐng)打開jdk源碼。

          Hash算法

          HashMap使用Hash算法,所以在解剖HashMap之間,需要先簡(jiǎn)單的了解Hash算法,Hash算法一般也成為散列算法,通過(guò)散列算法將任意的值轉(zhuǎn)化成固定的長(zhǎng)度輸出,該輸出就是散列值,這是一種壓縮映射,也就是,散列值的空間遠(yuǎn)遠(yuǎn)小于輸入的值空間。
          簡(jiǎn)單的說(shuō),hash算法的意義在于提供了一種快速存取數(shù)據(jù)的方法,它用一種算法建立鍵值與真實(shí)值之間的對(duì)應(yīng)關(guān)系,(每一個(gè)真實(shí)值只能有一個(gè)鍵值,但是一個(gè)鍵值可以對(duì)應(yīng)多個(gè)真實(shí)值),這樣可以快速在數(shù)組等里面存取數(shù)據(jù)。

          下面我們建立一個(gè)HashMap,然后往里面放入12對(duì)key-value,這個(gè)HashMap的默認(rèn)數(shù)組長(zhǎng)度為16,我們的key  閱讀全文
          posted @ 2011-02-15 19:18 陳于喆 閱讀(10179) | 評(píng)論 (6)編輯 收藏

               摘要: 以前的房產(chǎn)地圖一直都是使用有道地圖,雖然有道地圖是很好,但是為了更好,還是決定使用google地圖來(lái)重新開發(fā)^_^,下面是一個(gè)開發(fā)完畢的簡(jiǎn)單應(yīng)用http://xf.house.163.com/gz/map/000B.html

          1)整合Google Maps JavaScript API V3 與 Google Local Search API

          Google Maps JavaScript API V3
          地址 http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/

          Google Maps JavaScript API V3 文檔讀起來(lái)真的是很清晰,各種demo也很齊全,并且論壇的擁有巨大的論壇支持,對(duì)比了一下Google Maps JavaScript API V3 和 V2 的版本,雖然第3版的 Google Maps API 看上去跟第2版挺相識(shí),但在內(nèi)在機(jī)制上有了較大的變化,尤其在對(duì)移動(dòng)瀏覽器的支持上,專門針對(duì)iphone和android  閱讀全文
          posted @ 2011-02-12 15:57 陳于喆 閱讀(4969) | 評(píng)論 (6)編輯 收藏

               摘要: 對(duì)于進(jìn)程管理工具平時(shí)大多用的是ps,kill,top,sleep等等這些命令,平時(shí)linux的一些指令我都會(huì)做一些記錄,本著好記性不如爛博客的精神,也把進(jìn)程管理的命令做一點(diǎn)系統(tǒng)性的記錄,參考資料基本是鳥哥還有網(wǎng)上的一些文章。

          ps
          ps命令主要是查看系統(tǒng)進(jìn)程的狀態(tài),平時(shí)最常用的命令是ps aux,然后再使用管道導(dǎo)向到grep查找特定的進(jìn)程,然后進(jìn)此特定進(jìn)程進(jìn)行操作。
          要對(duì)進(jìn)程進(jìn)行操作必須先了解到當(dāng)前進(jìn)程的情況,ps命令體現(xiàn)了現(xiàn)實(shí)當(dāng)前運(yùn)行進(jìn)程的快照,ps和top和相似,但ps提供了更多的信息,可以確定哪些進(jìn)程正在運(yùn)行,哪些進(jìn)程被掛起,運(yùn)行了多長(zhǎng)時(shí)間,以及進(jìn)行使用的資源和進(jìn)程的優(yōu)先級(jí),這些信息對(duì)我們都有很重要的作用,當(dāng)我們使用ps aux可以獲得終端所有用戶的有關(guān)進(jìn)程信息。  閱讀全文
          posted @ 2011-01-21 17:56 陳于喆 閱讀(1102) | 評(píng)論 (0)編輯 收藏

          posted @ 2011-01-21 12:34 陳于喆 閱讀(599) | 評(píng)論 (0)編輯 收藏

               摘要: 問題是這樣的,有個(gè)腳本需要10秒鐘執(zhí)行一次,腳本具體功能就不細(xì)說(shuō),定時(shí)任務(wù)自然選用crontab,但是crontab最小的執(zhí)行時(shí)間為分鐘,最后決定選用死循環(huán)進(jìn)行實(shí)現(xiàn)。

          腳本
          vi hello.sh
          #!/bin/sh
          while :
          do
          echo `date` >> /home/chenyz/1 //這里是任務(wù)的實(shí)現(xiàn)
          sleep 10
          done

          這里的程序運(yùn)行時(shí)間間隔是10s,小心咯,如果沒有加sleep 10,你的機(jī)器很快就會(huì)耗盡資源,負(fù)載會(huì)狂飆。

          接著需要把腳本用后臺(tái)守護(hù)進(jìn)程來(lái)運(yùn)行,避免用戶退出而導(dǎo)致腳本失效  閱讀全文
          posted @ 2011-01-19 17:47 陳于喆 閱讀(2559) | 評(píng)論 (0)編輯 收藏

               摘要: 對(duì)于用戶管理工具平時(shí)大多用的是groupadd,useradd,usermod等等這些命令,平時(shí)linux的一些指令我都會(huì)做一些記錄,本著好記性不如爛博客的精神,也把用戶管理的命令做一點(diǎn)系統(tǒng)性的記錄,參考資料基本是鳥哥還有網(wǎng)上的一些文章。

          用戶組的管理
          linux可以對(duì)一個(gè)用戶組中的所有用戶進(jìn)行集中的管理,用戶組的管理包括用戶組添加,刪除修改,實(shí)際上這些操作就是對(duì)/etc/group文件作出修改。

          groupadd 新增一個(gè)用戶組
          groupadd [-g gid [-o]] [-r] [-f] group
          -g 其中g(shù)id是指定新用戶組的標(biāo)識(shí)號(hào),除非配合使用-o參數(shù),不然該值必須是唯一的
          -o 標(biāo)識(shí)新用戶組gid可以和系統(tǒng)中原有的用戶組的gid值相同
          實(shí)例:
          groupadd chenyuzhe1
          groupadd -g 789 chenyuzhe2

          groupdel 刪除用戶組
          實(shí)例:
          groupdel chenyuzhe1  閱讀全文
          posted @ 2011-01-19 15:36 陳于喆 閱讀(1460) | 評(píng)論 (0)編輯 收藏

               摘要: 對(duì)于磁盤管理工具平時(shí)大多用的是df,du這些命令,平時(shí)linux的一些指令我都會(huì)做一些記錄,本著好記性不如爛博客的精神,先把磁盤管理的命令做一點(diǎn)系統(tǒng)性的記錄。

          du
          du的英文為:disk usage,含義是磁盤空間使用情況,功能是逐級(jí)進(jìn)入指定目錄的每一個(gè)子目錄并顯示該目錄占用文件系統(tǒng)數(shù)據(jù)塊的情況,如果沒有指定目錄,則對(duì)當(dāng)前的目錄進(jìn)行統(tǒng)計(jì)。
          du的命令各個(gè)選項(xiàng)含義如下:

          a:顯示全部目錄和其次目錄下的每個(gè)檔案所占的磁盤空間
          s:只顯示各檔案大小的總合
          b:大小用bytes來(lái)表示
          x:跳過(guò)在不同文件系統(tǒng)上的目錄不予統(tǒng)計(jì)
          a:遞歸地顯示指定目錄中各文件及子孫目錄中各文件占用的數(shù)據(jù)塊數(shù)  閱讀全文
          posted @ 2011-01-19 13:08 陳于喆 閱讀(511) | 評(píng)論 (0)編輯 收藏

               摘要: List在數(shù)據(jù)結(jié)構(gòu)中表現(xiàn)為是線性表的方式,其元素以線性方式存儲(chǔ),集合中允許存放重復(fù)的對(duì)象,List接口主要的實(shí)現(xiàn)類有
          ArrayList
          ArrayList 其實(shí)就是一組長(zhǎng)度可變的數(shù)組,當(dāng)實(shí)例化了一個(gè)ArrayList,該數(shù)據(jù)也被實(shí)例化了,當(dāng)向集合中添加對(duì)象時(shí),數(shù)組的大小也隨著改變,這樣它所帶來(lái)的有優(yōu)點(diǎn)是快速的隨機(jī)訪問,即使訪問每個(gè)元素所帶來(lái)的性能問題也是很小的,但缺點(diǎn)就是想其中添加或刪除對(duì)象速度慢,當(dāng)你創(chuàng)建的數(shù)組是不確定其容量,所以當(dāng)我們改變這個(gè)數(shù)組時(shí)就必須在內(nèi)存中做很多的處理,如你想要數(shù)組中任意兩個(gè)元素中間添加對(duì)象,那么在內(nèi)存中數(shù)組要移動(dòng)所有后面的對(duì)象。

          LinkedList
          LinkedList 是通過(guò)節(jié)點(diǎn)的連接實(shí)現(xiàn)鏈表的數(shù)據(jù)結(jié)構(gòu),向linkedList中插入或刪除元素的速度是特別快,而隨機(jī)訪問的速度相對(duì)較慢,這個(gè)是由于鏈表本身的性質(zhì)造成的,在鏈表中,每個(gè)節(jié)點(diǎn)都包含了前一個(gè)節(jié)點(diǎn)的引用,后一個(gè)節(jié)點(diǎn)的引用和節(jié)點(diǎn)存儲(chǔ)值,當(dāng)一個(gè)新節(jié)點(diǎn)插入式,只需要修改其中相關(guān)的前后關(guān)系節(jié)點(diǎn)引用即可,刪除節(jié)點(diǎn)也是一樣。操作對(duì)象只需要改變節(jié)點(diǎn)的鏈接,新節(jié)點(diǎn)可以存放在  閱讀全文
          posted @ 2011-01-16 17:36 陳于喆 閱讀(11413) | 評(píng)論 (1)編輯 收藏

               摘要: 我們都知道Set是一種最簡(jiǎn)單的集合,對(duì)象的排序無(wú)特定的規(guī)則,集合里面存放的是對(duì)象的引用,所以沒有重復(fù)的對(duì)象,在上面的代碼中,程序創(chuàng)建了a、b、 c、d、e五個(gè)變量,其中a和c,b和e所引用的字符串是一致的,然后向set添加了這5個(gè)變量。打印出來(lái)的size()只有3個(gè),實(shí)際上向集合加入的只有3個(gè)對(duì)象,在執(zhí)行Set的add()方法時(shí)已經(jīng)進(jìn)行了判斷這個(gè)對(duì)象是否存在于集合,如果對(duì)象已經(jīng)存在則不繼續(xù)執(zhí)行。
          Set的接口有兩個(gè)實(shí)現(xiàn)類,HashSet和TreeSet,HashSet是按照哈希算法來(lái)進(jìn)行存取集合中的對(duì)象,存取速度比較快,TreeSet類顯示了SortedSet接口,具有排序功能

          HashSet
          HashSet是按照哈希算法來(lái)存取集合中的對(duì)象,具有很好的存取和查找性能,當(dāng)向集合中加入一個(gè)對(duì)象時(shí),HashSet會(huì)調(diào)用對(duì)象的hashCode()方法來(lái)獲取哈希碼,然后根據(jù)這個(gè)哈希嗎來(lái)計(jì)算對(duì)象在集合中的存放位置。
          在Object類中定義了hashCode()和equal(),equal()是按照內(nèi)存地址比較對(duì)象是否相同,如果 object1.equal(  閱讀全文
          posted @ 2011-01-06 18:07 陳于喆 閱讀(8615) | 評(píng)論 (0)編輯 收藏

          posted @ 2011-01-04 14:10 陳于喆 閱讀(71446) | 評(píng)論 (6)編輯 收藏

               摘要: The minimum requirement for a POM are the following:

          project root
          modelVersion - should be set to 4.0.0
          groupId - the id of the project's group.
          artifactId - the id of the artifact (project)
          version - the version of the artifact under the specified group

          Here's an example:  閱讀全文
          posted @ 2010-12-29 17:50 陳于喆 閱讀(333) | 評(píng)論 (0)編輯 收藏

               摘要: 由于歷史原因,幾個(gè)項(xiàng)目都選用hessian作為web service的實(shí)現(xiàn)方式,hessian的確是非常輕量級(jí),基于http協(xié)議進(jìn)行傳輸,通過(guò)自定義的串行化機(jī)制將請(qǐng)求信息進(jìn)行序列化,以二進(jìn)制傳輸節(jié)省了不少的開銷,速度跟socket差不多.客戶端和服務(wù)器發(fā)起和接收請(qǐng)求都是通過(guò)spring提供的hessian api進(jìn)行請(qǐng)求和接收,但是在服務(wù)端中并沒有記錄和控制遠(yuǎn)端ip地址和主機(jī)的信息,所以需要對(duì)源碼進(jìn)行一些重寫

          對(duì)org.springframework.remoting.caucho.HessianServiceExporter進(jìn)行重寫

          /**
          * 重寫HessianServiceExporter.handleRequest(),攔截獲取遠(yuǎn)端調(diào)用信息
          * @author chenyz
          *
          */
          public class HouseHessianServiceExporter extends HessianServiceExporter {

          private static S  閱讀全文
          posted @ 2010-12-21 16:05 陳于喆 閱讀(3030) | 評(píng)論 (0)編輯 收藏

               摘要: 目前幾套系統(tǒng)中主要使用的hessian進(jìn)行遠(yuǎn)程調(diào)用webservice服務(wù)的有hessian的 HessianProxyFactory(com.caucho.hessian.client.HessianProxyFactory)和 spring的 HessianProxyFactoryBean(org.springframework.remoting.caucho.HessianProxyFactoryBean).

          1.HessianProxyFactory
          查看HessianProxyFactory源碼后發(fā)現(xiàn),hessian在創(chuàng)建http請(qǐng)求連接webservice服務(wù)并沒有對(duì)連接超時(shí)進(jìn)行相關(guān)的參數(shù)設(shè)置,所以當(dāng)網(wǎng)絡(luò)出現(xiàn)問題就會(huì)造成整個(gè)hessian處理的阻塞,進(jìn)而阻塞整個(gè)線程后續(xù)的處理
          以下是HessianProxyFactory對(duì)連接處理的源碼

          protected URLConnection openConnection(URL url)
          throws IOException
          {
          URL  閱讀全文
          posted @ 2010-12-16 14:46 陳于喆 閱讀(12039) | 評(píng)論 (11)編輯 收藏

               摘要: 對(duì)很久以前的一個(gè)bug進(jìn)行分析和總結(jié)

          function parsePost(data, action) {
          try {
          var postData = eval("(" + data + ")");

          // TO DO1
          } catch (e) {

          // TO DO2
          }
          }


          這是一段頁(yè)面的老代碼,data是數(shù)據(jù)庫(kù)body字段,既是用戶錄入并取出的數(shù)據(jù),由于業(yè)務(wù)的關(guān)系,data是以json格式保存的,為了使數(shù)據(jù)能實(shí)現(xiàn)兼容,這里使用try...catch...方式處理,如果變量data能被轉(zhuǎn)換成對(duì)象,則執(zhí)行TO DO1,否則執(zhí)行TO DO2.

          我們知道eval的作用很簡(jiǎn)單,就是把一段字符串傳遞給js解析器,由javascript解析器將這段字符串解釋成為  閱讀全文
          posted @ 2010-12-15 11:31 陳于喆 閱讀(4364) | 評(píng)論 (2)編輯 收藏

               摘要: 上次因工作的需求對(duì)一臺(tái)apache的log做了一次整體的分析,所以順便也對(duì)apache的日志分析做下簡(jiǎn)單的介紹,主要參考apache官網(wǎng)的Log Files,手冊(cè)參照 http://httpd.apache.org/docs/2.2/logs.html

          一.日志分析
          如果apache的安裝時(shí)采用默認(rèn)的配置,那么在/logs目錄下就會(huì)生成兩個(gè)文件,分別是access_log和error_log
          1.access_log
          access_log為訪問日志,記錄所有對(duì)apache服務(wù)器進(jìn)行請(qǐng)求的訪問,它的位置和內(nèi)容由CustomLog指令控制,LogFormat指令可以用來(lái)簡(jiǎn)化該日志的內(nèi)容和格式
          例如,我的其中一臺(tái)服務(wù)器配置如下

          CustomLog "| /usr/sbin/rotatelogs /var/log/apache2/%Y_%m_%d_other_vhosts_access.log 86400 480" vhost_combined

          -rw-r--r-- 1 root root 22310750   閱讀全文
          posted @ 2010-12-10 17:52 陳于喆 閱讀(12487) | 評(píng)論 (3)編輯 收藏

               摘要: 下載地址 http://awstats.sourceforge.net
          下載最新版本

          安裝
          cd /home/download
          wget http://awstats.sourceforge.net/files/awstats-7.0.tar.gz
          tar zxf awstats-7.0.tar.gz
          mv awstats-7.0 awstats
          perl awstats_configure.pl

          在[y/n]選擇時(shí),輸入y
          接著輸入你要分析的域名,輸入tech163
          一路Enter

          配置
          vi /etc/awstats/awstats.tech163.com  閱讀全文
          posted @ 2010-12-10 17:28 陳于喆 閱讀(1235) | 評(píng)論 (0)編輯 收藏

               摘要: 下面一個(gè)伴隨了好幾個(gè)工程的時(shí)間操作的工具類,提供了一些常用的時(shí)間操作和計(jì)算的方法,每段時(shí)間都會(huì)進(jìn)行一次整理,希望能去冗余和得到好的擴(kuò)展

          package com.***.product.util;

          import java.text.ParsePosition;
          import java.text.SimpleDateFormat;
          import java.util.Calendar;
          import java.util.Date;
          import java.util.GregorianCalendar;
          import java.util.regex.Pattern;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;


          public class DateUtil {
          protected static Log logger = LogFa  閱讀全文
          posted @ 2010-12-09 18:37 陳于喆 閱讀(457) | 評(píng)論 (0)編輯 收藏

               摘要: 大名鼎鼎的分布式緩存系統(tǒng)memcached,在開源社區(qū)中可謂是無(wú)人不知無(wú)人不曉,memcached支持分布式的橫向擴(kuò)展,但memcached的服務(wù)端卻是單實(shí)例,并無(wú)"分布式"的功能,所謂的分布式只是客戶端在存儲(chǔ)的主鍵做分布的存儲(chǔ);還有memcached組件緩存對(duì)象,如果組件無(wú)進(jìn)行序列化必定無(wú)法正確取得數(shù)據(jù);如何使用memcached的java組件來(lái)監(jiān)控memcached的運(yùn)行狀態(tài);以上等等的問題是我在日常的工作中碰到并解決的,拿出來(lái)跟大家做個(gè)分享^_^

          對(duì)象的序列化
          首先memcached是獨(dú)立的服務(wù)器組件,獨(dú)立于應(yīng)用系統(tǒng),從客戶端保存和讀取對(duì)象到memcached是必須通過(guò)網(wǎng)絡(luò)傳輸,因?yàn)榫W(wǎng)絡(luò)傳輸都是二進(jìn)制的數(shù)據(jù),所以所有的對(duì)象都必須經(jīng)過(guò)序列化,否則無(wú)法存儲(chǔ)到memcahced的服務(wù)器端.
          正如我們以往在集群中應(yīng)用的序列化一樣,memcached的序列化的性能也是往往讓大家頭疼,如果我們對(duì)我們的domain類進(jìn)行對(duì)象的序列化,第一次序列化時(shí)間會(huì)比較長(zhǎng),但后續(xù)會(huì)優(yōu)化,也就是說(shuō)序列化最大的消耗不是對(duì)象的序列化,而是類的序列化,如果存儲(chǔ)的只是一個(gè)String  閱讀全文
          posted @ 2010-12-08 15:00 陳于喆 閱讀(5620) | 評(píng)論 (4)編輯 收藏

               摘要: 很久以前就見過(guò)這本1000頁(yè)的書<代碼大全>,覺得應(yīng)該是說(shuō)些寫代碼的東西,沒怎么又興趣去讀它,一次偶然的機(jī)會(huì),發(fā)現(xiàn)自己是誤解了它,<代碼大全>覺得應(yīng)該叫軟件百科好像更合適一點(diǎn),因?yàn)樗锩婧w了架構(gòu),分析,設(shè)計(jì),編程,測(cè)試,重構(gòu),面向?qū)ο?調(diào)試,規(guī)范,管理,軟件質(zhì)量控制,協(xié)作,優(yōu)化,開發(fā)工具,注釋,甚至個(gè)性,開發(fā)藝術(shù)等等等,讓人感覺就是一本軟件百科全書.

          書讀的不多,不過(guò)剛開始讀了100多頁(yè)有一點(diǎn)感悟,所以做了一點(diǎn)記錄,叫讀<代碼大全>的一點(diǎn)記錄之1.

          利用隱喻
          隱喻通過(guò)把軟件開發(fā)與你所熟知的事情聯(lián)系在一起,從而使你對(duì)其更有深刻的理解,正是因?yàn)槿绱嗽谟?jì)算機(jī)中的發(fā)展不過(guò)僅有數(shù)十年的歷史,卻擁有著所有科學(xué)最為豐富多彩的語(yǔ)言

          蓋房子的隱喻
          狗屋
          霹靂啪啦,木材加鐵釘,犯錯(cuò)了怎么辦?無(wú)所謂,拆了再來(lái)過(guò)  閱讀全文
          posted @ 2010-12-07 17:59 陳于喆 閱讀(1255) | 評(píng)論 (0)編輯 收藏

               摘要: memcached需要依賴到以下的一系列包
          gcc
          libevent
          glibc-devel

          下載
          cd /home/download
          wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
          wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz

          安裝
          tar -zxvf libevent-1.4.13-stable.tar.gz
          cd libevent-1.4.13-stable
          ./configure --prefix=/usr/local/libevent
          make && make install

          tar -zxvf memcached-1.4.0.tar.gz  閱讀全文
          posted @ 2010-12-07 16:34 陳于喆 閱讀(350) | 評(píng)論 (0)編輯 收藏

          列出全部?jī)?nèi)容
          共4頁(yè): 上一頁(yè) 1 2 3 4 下一頁(yè) 
          主站蜘蛛池模板: 兰西县| 类乌齐县| 南宫市| 孝义市| 宾川县| 甘南县| 信宜市| 望谟县| 高雄县| 青铜峡市| 静宁县| 和平县| 平度市| 镇江市| 武强县| 合阳县| 涟水县| 毕节市| 锦州市| 攀枝花市| 鹤壁市| 禄丰县| 翁牛特旗| 恩平市| 连南| 磴口县| 芜湖县| 卢氏县| 谢通门县| 花莲县| 区。| 蒙自县| 桓仁| 隆林| 安宁市| 株洲县| 安陆市| 蒙自县| 确山县| 无极县| 藁城市|