<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    #

    hadoop集群中添加節點步驟

    在新節點安裝好hadoop


    把namenode的有關配置文件復制到該節點


    修改masters和slaves文件,增加該節點


    設置ssh免密碼進出該節點


    單獨啟動該節點上的datanode和tasktracker(hadoop-daemon.sh start datanode/tasktracker)


    運行start-balancer.sh進行數據負載均衡


    負載均衡:作用:當節點出現故障,或新增加節點時,數據塊分布可能不均勻,負載均衡可以重新平衡各個datanode上數據塊的分布

    posted @ 2013-03-16 23:04 paulwong 閱讀(420) | 評論 (0)編輯 收藏

    端口掃描程序

    If you need 200ms for each of the 65536 ports (in the worst case, a firewall is blocking everything, thus making you hit your timeout for every single port), the maths is pretty simple: you need 13k seconds, or about 3 hours and a half.

    You have 2 (non-exclusive) options to make it faster:
    • reduce your timeout
    • paralellize your code
    Since the operation is I/O bound (in contrast to CPU bound -- that is, you spend time waiting for I/O, and not for some huge calculation to complete), you can use many, many threads. Try starting with 20. They would divide the 3 hours and a half among them, so the maximum expected time is about 10 minutes. Just remember that this will put pressure on the other side, ie, the scanned host will see huge network activity with "unreasonable" or "strange" patterns, making the scan extremely easy to detect.

    The easiest way (ie, with minimal changes) is to use the ExecutorService and Future APIs: @import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

    public static Future<Boolean> portIsOpen(final ExecutorService es, final String ip, final int port, final int timeout) {
      return es.submit(new Callable<Boolean>() {
          @Override public Boolean call() {
            try {
              Socket socket = new Socket();
              socket.connect(new InetSocketAddress(ip, port), timeout);
              socket.close();
              return true;
            } catch (Exception ex) {
              return false;
            }
          }
       });
    }


    Then, you can do something like:

    public static void main(final String args) {
      final ExecutorService es = Executors.newFixedThreadPool(20);
      final String ip = "127.0.0.1";
      final int timeout = 200;
      final List<Future<Boolean>> futures = new ArrayList<>();
      for (int port = 1; port <= 65535; port++) {
        futures.add(portIsOpen(es, ip, port, timeout));
      }
      es.shutdown();
      int openPorts = 0;
      for (final Future<Boolean> f : futures) {
        if (f.get()) {
          openPorts++;
        }
      }
      System.out.println("There are " + openPorts + " open ports on host " + ip + " (probed with a timeout of " + timeout + "ms)");
    }


    If you need to know which ports are open (and not just how many, as in the above example), you'd need to change the return type of the function to Future<SomethingElse>, where SomethingElse would hold the port and the result of the scan, something like:

    public final class ScanResult {
      private final int port;
      private final boolean isOpen;
      // constructor
      
    // getters
    }


    Then, change Boolean to ScanResult in the first snippet, and return new ScanResult(port, true) or new ScanResult(port, false) instead of just true or false





    posted @ 2013-03-14 10:10 paulwong 閱讀(382) | 評論 (0)編輯 收藏

    Project management

     

    Exercise 1  Web site Development

    Using Microsoft Project  2007 (can be downloaded from internet)

    A nonprofit organization would like to lead a website development project. The organization has internet access that includes space on a web server, but no experience in developing websites. In addition to creating its website, the organization would like you to train two people on its staff to do simple web page updates. The website should include the following information, as a minimum: description of the organization (mission, history, and recent events), list of services, and contact information. the organization wants the website to include graphics( photographs and other images) and have an attractive, easy way to use layout.

     

    1- Project Scope Management: create a WBS for this project and enter the tasks in project 2007. Create milestones and summary tasks. Assume that some of the project management tasks are similar to tasks from the project tracking database project. some of the specific anaylsis, design, and implementation tasks will do:

    a) collect information on the organization in hardcopy and digital form( brochures, reports, organization charts)

    b) research web site of similar organization

    c) collect detailed information about customer's design preferences

    d) develop a template for the customer to review (background color of pages, layout of text)

    e) create a site map or hierarchy chart showing the flow of website

    2- Project Time Management:

    a) enter realistic duration for each task, and then link the tasks

    b) do Gantt Chart view and Network Diagram View  for the project

    c) do schedule table to see key dates and slack times for each task.

     

     

     

     

    3- Project Cost Management

    a) assume you have three people working on project and each of them would charge $20 per hour. Enter this information in the Resource Sheet.

    b) estimate that each person will spend an average of about five hours per week for the four month period. Assign resources to the tasks, and try to make the final cost in line with this estimate

    c) do a budget report for your project

    4- Project Human Resource Management

    a) assume that one project team member will be unavailable due to vacation for two weeks in the middle of the project. Make adjustments to accommodate this vacation so that the schedule does not slip and the costs do not change. Document the changes from the original plan and the new plan.

    b) use the Resource Usage view to see each person's work each month. Print a copy of the Resource Usage view.

    5- Project Communications Management

    a) do a Gantt chart for this project. use a time scale that enables that chart to fit on one page. and the copy and paste it to PowerPoint

    b) do a TO DO LIST report for each team member

    c) Create a WHO DOES WHAT REPORT

     

     

    ** Write a two page single spaced paper summarizing what do you think about Microsoft Project. What do you like and What do you dislike about it. Do you think it would be useful for managing all project or just some and which ones.

     

     

    posted @ 2013-03-10 18:16 paulwong 閱讀(383) | 評論 (0)編輯 收藏

    Httpclient資源

    http://www.cnblogs.com/wasp520/archive/2012/06/28/2568897.html


    http://rensanning.iteye.com/blog/1550436


    http://blog.csdn.net/madding/article/details/7638807


    抓來的內容當然要提取了:

    http://www.oschina.net/p/jsoup

    http://www.oschina.net/p/htmlparser

    http://www.open-open.com/jsoup/

    posted @ 2013-03-01 18:11 paulwong 閱讀(486) | 評論 (0)編輯 收藏

    職場上千萬不做這10件事!那樣只會顯得你心理幼稚!(轉)

    標志一、只會踏踏實實地做具體的工作

    踏踏實實地做具體工作,這沒有錯。但只會這樣那錯就大了,因為這永遠只是新手的方式,僅靠這個,永遠也成不了高手。甘心一輩子本本分分只當個菜鳥,到頭來,肯定連菜鳥也做不成,現在的職場,逆水行舟,原地不動,早晚被浪打翻。

    標志二、不會踏踏實實地工作

    年輕人喜歡幻想,本身也沒錯。但若是一天到晚光幻想,那就麻煩了。脫離了現實,好高騖遠,白日做夢,眼高手低……漫步云端的感覺是不錯,但夢醒時分,從云上跌落粉身碎骨的時候,就追悔莫及了。

    標志三、瞧不起上司

    受過高等教育的人都清高,別人不如自己的地方很容易放在眼里,并嗤之以鼻,尤其是對領導。讓不如自己的人來領導自己,實在不公平。但是,領導之所以是領導,就有原因,不管合理不合理都存在了。也許他學識不行,也許能力不行,但他贏可能就贏在關系上了,可能就贏在心機上了,好的也好,壞的也罷,都是實實在在存在的現象。

    標志四、崇拜上司

    相比起剛才的這種行為,對上司盲目崇拜,則更顯得幼稚。對上司的話全盤接受,無條件服從,缺乏了起碼的分析能力,最終會讓你在職場中迷失自我。

    標志五、容易被激發、被感動、被忽悠

    有些人比較感性,我本人也是這樣。對于領導一些比較有煽動性東西,難以抵制,很容易用頭腦發熱。但無論如何,事后一定要冷靜思索思索,站在不同的角度來考慮考慮問題,切莫一時意氣用事。

    標志六、甘當云梯默默無聞

    甘當云梯,默默無聞,這本是一種很高尚的情懷。在如今更是難得。但難得歸難得,天不佑此類人,生活不助此類人,時代更是難容此類人。對這種人,只能說,老兄,別那么單純了。

    標志七、習慣忍讓

    喜歡爭斗的人讓人厭惡,但現在的職場上,也只是這種人才得勢。人善被人欺,習慣忍讓,別人會覺得你好欺負,這已經成為現在職場上的一種思維定勢了。誰也打不破它。

    標志八、鋒芒畢露

    有人則相反,不忍不讓,鋒芒畢露。這也不好,這樣會樹敵太多,而且太容易讓人看透,很容易中了別人的招兒。適當的時候露露鋒芒,展示一下自己的立場就可以了,大多數的情況,還是應該韜光養晦的。

    標志九、排斥關系

    近幾年來,新興起一門學問,叫做關系學。這里面學問可大了,大到關系職場中的方方面面。可有人就是排斥它,認為靠自己的打拚就已經足夠了。其實,職場不比學術,不是把自己關在實驗室里就能出成果的,閉門造車,最終自食苦果。

    標志十、知無不言言無不真

    對別人什么都說,而且什么話都說真的,這很誠實,但太不成熟了。職場上混,就跟下棋一樣,盡可能地對方的心理,而不是盡可能地讓別人了解自己的心理。道理很淺顯。

    posted @ 2013-03-01 10:58 paulwong 閱讀(372) | 評論 (0)編輯 收藏

    JUnitBenchmark Junit性能測試

    如果你希望用 JUnit 來測試一些性能問題,那么 JUnitBenchmark 可以幫到你,主要特性:

    • 記錄執行時間
    • 監控垃圾收集
    • 測試熱身

    package com.paul;

    import com.carrotsearch.junitbenchmarks.AbstractBenchmark;
    import com.carrotsearch.junitbenchmarks.BenchmarkOptions;
    import javolution.text.TextBuilder;
    import org.junit.Test;
     
    /**
     * Benchmark for String concatenation. Compares StringBUilder (JDK) and
     * TextBuilder (Javolution).
     
    */
    public class StringConcatenationBenchmark extends AbstractBenchmark {
     
        public static final long LOOPS_COUNT = 10000000;
     
        @Test
        @BenchmarkOptions(benchmarkRounds = 3, warmupRounds = 1)
        public void stringBuilderBenchmark()  {
             
            StringBuilder builder = new StringBuilder();
            for (long i = 0; i < LOOPS_COUNT; i++) {
                builder.append('i').append(i);
            }
            System.out.println(builder.toString().length());
        }
         
        @Test
        @BenchmarkOptions(benchmarkRounds = 3, warmupRounds = 1)
        public void textBuilderBenchmark()  {
             
            TextBuilder builder = new TextBuilder();
            for (long i = 0; i < LOOPS_COUNT; i++) {
                builder.append('i').append(i);
            }
            System.out.println(builder.toString().length());
        }
    }


    Maven依賴:
    <dependency>
            <groupId>javolution</groupId>
            <artifactId>javolution</artifactId>
            <version>5.4.5</version>
    </dependency>


    結果顯示:
    78888890
    78888890
    78888890
    78888890
    StringConcatenationBenchmark.stringBuilderBenchmark: [measured 3 out of 4 rounds, threads: 1 (sequential)]
     round: 0.57 [+- 0.01], round.gc: 0.00 [+- 0.00], GC.calls: 33, GC.time: 0.02, time.total: 2.60, time.warmup: 0.90, time.bench: 1.70
    78888890
    78888890
    78888890
    78888890
    StringConcatenationBenchmark.textBuilderBenchmark: [measured 3 out of 4 rounds, threads: 1 (sequential)]
     round: 0.46 [+- 0.03], round.gc: 0.00 [+- 0.00], GC.calls: 14, GC.time: 0.14, time.total: 1.92, time.warmup: 0.55, time.bench: 1.38

    posted @ 2013-03-01 10:37 paulwong 閱讀(783) | 評論 (0)編輯 收藏

    EJB3資源

    eclipse + JBoss 5 + EJB3開發指南(1):編寫第一個無狀態的SessionBean


    eclipse + JBoss 5 + EJB3開發指南(2):編寫有狀態的SessionBean


    eclipse + JBoss 5 + EJB3開發指南(3):使用Session Bean的本地接口


    eclipse + JBoss 5 + EJB3開發指南(4):Session Bean中的注釋方法


    eclipse + JBoss 5 + EJB3開發指南(5):使用配置文件發布Session Bean


    eclipse + JBoss 5 + EJB3開發指南(6):編寫第一個實體Bean程序


    eclipse + JBoss 5 + EJB3開發指南(7):實現Entity Bean的一對一(one-to-one)映射


    eclipse + JBoss 5 + EJB3開發指南(8):實現Entity Bean的一對多(one-to-many)映射


    eclipse + JBoss 5 + EJB3開發指南(9):實現Entity Bean的多對多(many-to-many)映射


    eclipse + JBoss 5 + EJB3開發指南(10):通過繼承實體Bean,將單個表映射成多個表(單表策略,SINGLE_TABLE)


    eclipse + JBoss 5 + EJB3開發指南(11):實體Bean的連接策略(JOINED Strategy)


    eclipse + JBoss 5 + EJB3開發指南(12):使用命名查詢執行JPQL


    eclipse + JBoss 5 + EJB3開發指南(13):在Servlet中訪問應用程序管制EntityManager對象


    eclipse + JBoss 5 + EJB3開發指南(14):消息驅動Bean


    eclipse + JBoss 5 + EJB3開發指南(15):攔截器方法和攔截器類


    a
    JAVAEE6+MAVEN+GLASSFISH
    http://www.hascode.com/2011/09/java-ee-6-development-using-the-maven-embedded-glassfish-plugin/



    JAVAEE7+MAVEN+GLASSFISH+JBOSS+TOMEE
    https://github.com/javaee-samples/javaee7-samples

    OPEN EJB客戶端
    http://openejb.apache.org/hello-world.html
    http://tomee.apache.org/clients.html

    OPEN EJB互相引用
    http://tomee.apache.org/ejb-refs.html

    http://tomee.apache.org/tomee-and-eclipse.html

    Deploying in TomEE
    http://tomee.apache.org/deploying-in-tomee.html

    http://www.javacodegeeks.com/2014/05/stateless-ejbs-pooling-and-lifecycle.html

    http://www.javacodegeeks.com/2011/11/jboss-as-7-ejb3-pools-configuration.html

    http://www.javacodegeeks.com/2014/07/java-ee-7-with-angular-js-part-1.html

    SPRING+EJB3+JBOSS
    https://github.com/bpark/spring-ejb3-webapp
    https://access.redhat.com/documentation/en-US/JBoss_Web_Framework_Kit/1.2/html/Spring_Developer_Guide/ch07s05s02.html


    !!JBOSS系列 -EJB遠程調用-客戶端的配置
    http://www.cnblogs.com/liutengteng130/p/4270832.html

    JBOSS中遠程調用EJB
    https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+server+instance


    JBOSS 8的DEMO
    https://github.com/wildfly/quickstart

    EJB VS Spring/Hessian
    http://java.dzone.com/articles/remote-access-your-services


    posted @ 2013-02-26 10:46 paulwong 閱讀(293) | 評論 (0)編輯 收藏

    簡單的用 Java Socket 編寫的 HTTP 服務器應用,幫助學習HTTP協議

    所謂HTTP協議,就是TCP協議+狀態信息之類的字符。

    資源:http://www.tkk7.com/nokiaguy/category/38517.html

    /**
     * SimpleHttpServer.java
     
    */

    import java.io.*;
    import java.net.*;
    import java.util.StringTokenizer;

    /**
     * 一個簡單的用 Java Socket 編寫的 HTTP 服務器應用, 演示了請求和應答的協議通信內容以及
     * 給客戶端返回 HTML 文本和二進制數據文件(一個圖片), 同時展示了 404, 200 等狀態碼.
     * 首先運行這個程序,然后打開Web瀏覽器,鍵入http://localhost,則這個程序能夠顯示出瀏覽器發送了那些信息
     * 并且向瀏覽器返回一個網頁和一副圖片, 并測試同瀏覽器對話.
     * 當瀏覽器看到 HTML 中帶有圖片地址時, 則會發出第二次連接來請求圖片等資源.
     * 這個例子可以幫您理解 Java 的 HTTP 服務器軟件是基于 J2SE 的 Socket 等軟件編寫的概念, 并熟悉
     * HTTP 協議.
     * 相反的用 Telnet 連接到已有的服務器則可以幫忙理解瀏覽器的運行過程和服務器端的返回內容.
     *
     * <pre>
     *       當用戶在Web瀏覽器地址欄中輸入一個帶有http://前綴的URL并按下Enter后,或者在Web頁面中某個以http://開頭的超鏈接上單擊鼠標,HTTP事務處理的第一個階段--建立連接階段就開始了.HTTP的默認端口是80.
     *    隨著連接的建立,HTTP就進入了客戶向服務器發送請求的階段.客戶向服務器發送的請求是一個有特定格式的ASCII消息,其語法規則為:
     * < Method > < URL > < HTTP Version > <\n>
     * { <Header>:<Value> <\n>}*
     * <\n>
     * { Entity Body }
     *    請求消息的頂端是請求行,用于指定方法,URL和HTTP協議的版本,請求行的最后是回車換行.方法有GET,POST,HEAD,PUT,DELETE等.
     * 在請求行之后是若干個報頭(Header)行.每個報頭行都是由一個報頭和一個取值構成的二元對,報頭和取值之間以":"分隔;報頭行的最后是回車換行.常見的報頭有Accept(指定MIME媒體類型),Accept_Charset(響應消息的編碼方式),Accept_Encoding(響應消息的字符集),User_Agent(用戶的瀏覽器信息)等.
     *    在請求消息的報頭行之后是一個回車換行,表明請求消息的報頭部分結束.在這個\n之后是請求消息的消息實體(Entity Body).具體的例子參看httpRequest.txt.
     *     Web服務器在收到客戶請求并作出處理之后,要向客戶發送應答消息.與請求消息一樣,應答消息的語法規則為:
     * < HTTP Version> <Status Code> [<Message>]<\n>
     * { <Header>:<Value> <\n> } *
     * <\n>
     * { Entity Body }
     *    應答消息的第一行為狀態行,其中包括了HTTP版本號,狀態碼和對狀態碼進行簡短解釋的消息;狀態行的最后是回車換行.狀態碼由3位數字組成,有5類: 
     * 參看:HTTP應答碼及其意義 
     * 
     * 1XX 保留 
     * 2XX 表示成功 
     * 3XX 表示URL已經被移走 
     * 4XX 表示客戶錯誤 
     * 5XX 表示服務器錯誤 
     * 例如:415,表示不支持改媒體類型;503,表示服務器不能訪問.最常見的是200,表示成功.常見的報頭有:Last_Modified(最后修改時間),Content_Type(消息內容的MIME類型),Content_Length(內容長度)等.
     *    在報頭行之后也是一個回車換行,用以表示應答消息的報頭部分的結束,以及應答消息實體的開始.
     *    下面是一個應答消息的例子:
     * HTTP/1.0 200 OK
     * Date: Moday,07-Apr-97 21:13:02 GMT
     * Server:NCSA/1.1
     * MIME_Version:1.0
     * Content_Type:text/html
     * Last_Modified:Thu Dec 5 09:28:01 1996
     * Coentent_Length:3107
     * 
     * <HTML><HEAD><TITLE></HTML>
     * 
     * 在用Java語言實現HTTP服務器時,首先啟動一個java.net.ServerSocket在提供服務的端口上監聽連接.向客戶返回文本時,可以用PrintWriter,但是如果返回二進制數據,則必須使用OutputStream.write(byte[])方法,返回的應答消息字符串可以使用String.getBytes()方法轉換為字節數組返回,或者使用PrintStream的print()方法寫入文本,用write(byte[])方法寫入二進制數據.
     * 
     * </pre>
     * 
    @author 劉長炯
     * 
    @version 1.0 2007-07-24 Sunday
     
    */
    public class SimpleHttpServer implements Runnable {
        /**
         * 
         
    */
        ServerSocket serverSocket;//服務器Socket
        
        /**
         * 服務器監聽端口, 默認為 80.
         
    */
        public static int PORT=80;//標準HTTP端口
        
        /**
         * 開始服務器 Socket 線程.
         
    */
        public SimpleHttpServer() {
            try {
                serverSocket=new ServerSocket(PORT);
            } catch(Exception e) {
                System.out.println("無法啟動HTTP服務器:"+e.getLocalizedMessage());
            }
            if(serverSocket==null)  System.exit(1);//無法開始服務器
            new Thread(this).start();
            System.out.println("HTTP服務器正在運行,端口:"+PORT);
        }
        
        /**
         * 運行服務器主線程, 監聽客戶端請求并返回響應.
         
    */
        public void run() {
            while(true) {
                try {
                    Socket client=null;//客戶Socket
                    client=serverSocket.accept();//客戶機(這里是 IE 等瀏覽器)已經連接到當前服務器
                    if(client!=null) {
                        System.out.println("連接到服務器的用戶:"+client);
                        try {
                            // 第一階段: 打開輸入流
                            BufferedReader in=new BufferedReader(new InputStreamReader(
                                    client.getInputStream()));
                            
                            System.out.println("客戶端發送的請求信息:\n***************");
                            // 讀取第一行, 請求地址
                            String line=in.readLine();
                            System.out.println(line);
                            String resource=line.substring(line.indexOf('/'),line.lastIndexOf('/')-5);
                            //獲得請求的資源的地址
                            resource=URLDecoder.decode(resource, "UTF-8");//反編碼 URL 地址
                            String method = new StringTokenizer(line).nextElement().toString();// 獲取請求方法, GET 或者 POST

                            
    // 讀取所有瀏覽器發送過來的請求參數頭部信息
                            while( (line = in.readLine()) != null) {
                                System.out.println(line);
                                
                                if(line.equals("")) break;
                            }
                            
                            // 顯示 POST 表單提交的內容, 這個內容位于請求的主體部分
                            if("POST".equalsIgnoreCase(method)) {
                                System.out.println(in.readLine());
                            }
                            
                            System.out.println("請求信息結束\n***************");
                            System.out.println("用戶請求的資源是:"+resource);
                            System.out.println("請求的類型是: " + method);

                            // GIF 圖片就讀取一個真實的圖片數據并返回給客戶端
                            if(resource.endsWith(".gif")) {
                                fileService("images/test.gif", client);
                                closeSocket(client);
                                continue;
                            }
                            
                            // 請求 JPG 格式就報錯 404
                            if(resource.endsWith(".jpg")) {
                                                        PrintWriter out=new PrintWriter(client.getOutputStream(),true);
                            out.println("HTTP/1.0 404 Not found");//返回應答消息,并結束應答
                            out.println();// 根據 HTTP 協議, 空行將結束頭信息
                            out.close();
                            closeSocket(client);
                            continue;
                            } else {
                                // 用 writer 對客戶端 socket 輸出一段 HTML 代碼
                                PrintWriter out=new PrintWriter(client.getOutputStream(),true);
                                out.println("HTTP/1.0 200 OK");//返回應答消息,并結束應答
                                out.println("Content-Type:text/html;charset=GBK");
                                out.println();// 根據 HTTP 協議, 空行將結束頭信息

                                out.println("<h1> Hello Http Server</h1>");
                                out.println("你好, 這是一個 Java HTTP 服務器 demo 應用.<br>");
                                out.println("您請求的路徑是: " + resource + "<br>");
                                out.println("這是一個支持虛擬路徑的圖片:<img src='abc.gif'><br>" +
                                        "<a href='abc.gif'>點擊打開abc.gif, 是個服務器虛擬路徑的圖片文件.</a>");
                                out.println("<br>這是個會反饋 404 錯誤的的圖片:<img src='test.jpg'><br><a href='test.jpg'>點擊打開test.jpg</a><br>");
                                out.println("<form method=post action='/'>POST 表單 <input name=username value='用戶'> <input name=submit type=submit value=submit></form>");
                                out.close();

                                closeSocket(client);
                            }
                        } catch(Exception e) {
                            System.out.println("HTTP服務器錯誤:"+e.getLocalizedMessage());
                        }
                    }
                    //System.out.println(client+"連接到HTTP服務器");//如果加入這一句,服務器響應速度會很慢
                } catch(Exception e) {
                    System.out.println("HTTP服務器錯誤:"+e.getLocalizedMessage());
                }
            }
        }
        
        /**
         * 關閉客戶端 socket 并打印一條調試信息.
         * 
    @param socket 客戶端 socket.
         
    */
        void closeSocket(Socket socket) {
            try {
                socket.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
                                System.out.println(socket + "離開了HTTP服務器");        
        }
        
        /**
         * 讀取一個文件的內容并返回給瀏覽器端.
         * 
    @param fileName 文件名
         * 
    @param socket 客戶端 socket.
         
    */
            void fileService(String fileName, Socket socket)
        {
                
            try
            {
                PrintStream out = new PrintStream(socket.getOutputStream(), true);
                File fileToSend = new File(fileName);
                if(fileToSend.exists() && !fileToSend.isDirectory())
                {
                    out.println("HTTP/1.0 200 OK");//返回應答消息,并結束應答
                    out.println("Content-Type:application/binary");
                    out.println("Content-Length:" + fileToSend.length());// 返回內容字節數
                    out.println();// 根據 HTTP 協議, 空行將結束頭信息
                    
                    FileInputStream fis = new FileInputStream(fileToSend);
                    byte data[] = new byte[fis.available()];
                    fis.read(data);
                    out.write(data);
                    out.close();
                    fis.close();
                }
            }
            catch(Exception e)
            {
                System.out.println("傳送文件時出錯:" + e.getLocalizedMessage());
            }
        }
        
        /**
         * 打印用途說明.
         
    */
        private static void usage() {
            System.out.println("Usage: java HTTPServer <port>\nDefault port is 80.");
        }
        
        
        /**
         * 啟動簡易 HTTP 服務器
         * 
    @param args 
         
    */
        public static void main(String[] args) {
            try {
                if(args.length != 1) {
                    usage();
                } else if(args.length == 1) {
                    PORT = Integer.parseInt(args[0]);
                }
            } catch (Exception ex) {
                System.err.println("Invalid port arguments. It must be a integer that greater than 0");
            }
            
            new SimpleHttpServer();
        }
        

    posted @ 2013-02-25 22:29 paulwong 閱讀(331) | 評論 (0)編輯 收藏

    職場上做人做事做管理

    作者:何云隆
    網易上斬建通寫的很好的文章分享下


    大道至簡,越是根源和基本的問題,道理實際上越簡單。關于如何做人、做事、做管理的書很多,我看得不多,但是我覺得這些書更多是側重技術和實現細節上的,而很少從人的思想和觀念去講。實際上,從根本上去說,如何做人做事是世界觀的問題,也是一個哲學話題。很多人和我一樣,已經到了快30的年紀,是需要去思考一下應該如何做人如何做事的,也需要一套簡單、有效、完整的體系來指導自己,而這套體系將是讓自己安身立命于這個世界的基石。


    職場上如何做人

    關于在職場上如何做人,我只謹記兩個字--服務。你要把自己當成一個品牌去愛惜,當成一家公司去經營,你要牢牢記住你之所以能在一家公司立足,靳建通是因為公司需要你的服務。我們經常會抱怨某某銀行的工作人員服務態度不好、某某商品的售后服務不好,但從來不去思考自己對公司的服務好不好?公司的任務有沒有如期完成,是不是沒有哪個任務是提前完成的,幾乎所有任務都拖到“最后期限”?工作完成的夠不夠徹底,是不是答復已經完成了,結果日后又出狀況?完成后有沒有向上級反饋,是不是等到上級問你完成了沒有,你才去報告進度?拖延的任務有沒有持續跟進,是不是上級不追了這個任務最后就不了了之了?上面這些問題我都是反復遇見的,其實根本原因就是沒有意識到你其實在做一項服務,你在公司的發展前景,全都取決你對公司的服務夠不夠好。設想一下,如果交給你的每件事情都可以迎刃而解、化險為夷,讓人感覺穩妥、放心、踏實,你自然會收到更多更重要的“訂單”。當你的單多到你忙不過來的時候怎么辦?招下屬啊,呵呵,恭喜你,你已經是領導了。反之,如果給你一件事情你要拖延,給你一件事情你辦不好,給你一件事情就沒了下文了,讓人不放心,久而久之你就“無單可做”了,那么公司重新請一個人就可以了,干嘛非要用你呢?


    服務不光是對于自己供職的公司,對于公司的客戶也是一樣的。每一次去客戶那里出差前,我總是再三叮囑自己,我此次之行是為客戶做服務的,是去為客戶解決問題的。這個心態非常重要,我們做軟件系統的,去見客戶除了做演示、做培訓,很多時候就是處理現場問題,難免遇到客戶對系統的投訴,比如系統速度慢、bug多等問題。當你有了這樣的心態,你就會謙虛地接受客戶的批評,細致地記錄客戶提出的問題,然后一項項地去思考如何解決,并且應該給客戶一份詳盡的解決方案。有了這樣的心態,你會不自覺地、自然而然地與客戶站在一邊,讓他感到你是在為他著想,幫助他去解決問題的。在你面對客戶時,應該有這樣一個虔誠的信念:我是去為客戶服務的,為他解決他所解決不了的問題的。如果你沒有這樣的心態,面對投訴很可能就會產生厭煩,而且容易為自己的問題進行辯解。這種做法給客戶的感覺就是你竭力在證明你是對的他是錯的,這樣你就站在客戶的對面了。


    在客戶面前的表現對你的職場發展也是非常有好處的,尤其是接觸到一些跨國企業時,你優良的職業素養會為你贏來客戶的認同與尊敬。這樣當你哪天希望尋找更高的平臺,只要放個口風出去,立即就會有Offer了。所以認真服務好客戶只賺不賠。


    職場上如何做事

    關于如何做事,也有很多的理論,比如要事第一,把事情分為緊急、重要等等,這些我都不討論了,我只就我自己的經驗來談一談。


    對于如何做事,我也恪守一個信條:不焦不燥,把心沉下去,將注意力集中于要解決的問題上。


    我看過這樣一個故事,是說從前有一戶人家,家里的菜園中有一塊大石頭,經常會有人不小心撞到;兒子就問:為什么不把他挖走呢?他的爸爸說:這個石頭爺爺的時代就有了,就是因為它那么大,不好挖才一直在那里;又過了一代人,家里的一個媳婦實在受不了,就扛著鋤頭去挖了,她已經做好了心理準備要挖幾天的時間,結果一天就挖完了... ...原來那個石頭的中間是空的。


    我們遇到的很多事情也是一樣的,看似棘手、難以解決,實際上只要你認真地去分析、去思考,然后放手去做,往往并沒有想象中的那么困難。你需要克服心中的頑石。我發現一些人遇到問題后,很輕易地就會說:這個我做不了,這個實現不了,這個我也沒辦法。其實就好像看到這塊大石頭一樣,被它的“外表”嚇住了,而放棄了應有的行動。


    而且我發現了一個有趣的現象,不管多么困難的問題,只要你沉下心去思考如何解決,就好像在冥冥之中上蒼在看著你一樣,當你拼到最后就要打算認輸的時候,往往會出現新的契機和方法。


    另外,我發現有些人遇到問題的時候,他想的是這件事如何困難如何難以完成,這樣的思維方式是有問題的,是一種保守且退縮的思維;遇到問題的時候,想的應該是如何才能夠完成。我一般采取這樣幾個步驟:1、列出所有的可能性;2、分析各種可能性;3、選擇一種實現起來最簡單、快速的可能性;4、去實現。


    除此以外,我發現一些人在做事的時候,會以“這樣做很麻煩”來作為不采納方案的理由,而不是“這樣是否必要”或者“這樣是否更好”來作為標準,實際上“麻煩”應該是排在“是否必要”、“是否更好”后面進行考慮的。如果一種實現方式,雖然麻煩,但是很有必要,且對客戶來說更好,那么就算麻煩也要去做。但是程序員往往關心的是會不會很麻煩,是不是要修改很多地方,是不是給自己帶來很多工作量... ...告訴你,你關心的這些不是最重要的。


    職場上如何做管理

    和上面一樣,做管理也有很多的細節,我也都不談了,因為這些都是一本書一本書的講,而我覺得要簡單、有效、好操作,所以我也只說三點。
    我覺得做好一個技術經理,只要下面的三點就好了:


    1、德行

    德行其實就是品德,簡單地講就是要善良、誠懇。最重要的,你做事的出發點要是好的,對別人是沒有壞心的。為什么說出發點一定要是好的呢?我們還是以服務客戶的例子來說,在為客戶解決問題的時候,如果我們的出發點是好的,是站在客戶一邊盡心盡力去為客戶解決問題的,那么即便由于方法、能力、條件等各方面的原因,事情搞砸了或者沒有做好,也很容易獲得客戶的理解和原諒。很可能的情形是,你就算做失敗了也一樣贏得客戶;相反,如果你的出發點是“省麻煩”,“趕緊交差了事”,“完成任務”,如果事情做成了也就算了,一旦失敗了,你看看客戶會怎么樣?告訴你,好的客戶會批評你、投訴你,因為他對你還有期望;更多的客戶是什么話也不說,直接換個供應商就是了,才懶得理你。記住永遠不要把客戶當成傻瓜,你是如何做事情的,客戶是很容易感受得到的。所以,面對和服務客戶沒有那么多的技巧,你不需要有多好的口才和魅力,也用不著忽悠和夸大其詞(我發現很多銷售人員都是這樣,你可以騙客戶一次,但就沒有第二次了),你只需要放下身段,兢兢業業地為客戶著想,設身處地地解決他的問題就可以。對待下屬也是一樣的,你對他的獎勵也好,懲罰也好,出發點一定要是好的。我對待下屬遵循的原則就是:我是在幫助你,幫你把工作做的更好,幫你獲得更大的提高,而不是說找你茬兒,跟你過意不去,或者是擠兌你壓迫你。德行是基本的,有一個好的德行,至少可以保證你的下屬不會討厭你。


    2、敬業

    如果有人問我,下屬和經理的區別是什么。我會告訴他:下屬等著別人交代事情做,經理想著還有哪些事情可以做。這其實是一個積極心態的問題,作為一個中層干部,你需要將公司的事情當成自己家的事情來處理,當你有這樣的心態,你就是再怎么加班都不會有怨言的,即便分文不取... (有誰見過給自己家裝修叫苦不迭的?)如果你可以長期保持這樣的狀態,你的這種獻身精神和敬業精神,會很輕易地感染你的下屬和你的同事,你會感覺到在公司左右逢源,而且你也會更有話語權,大家會更重視你的意見,同事和下屬也會對你報以更多的信任。當這種情況出現時,管理起下屬還會困難嗎?但需要注意的是,你的敬業精神不是說體現在無休止的加班上,工作異常繁忙、經常性加班其實是工作沒有做好的表現之一,加班只應該出現在緊急情況發生的時候,而不應該是一種常態。


    3、技術

    如果有人問我,技術人員和其他人員最大的區別是什么。靳建通我會告訴他:技術人員個個自以為是,認為別人的技術都不如自己。呵呵,可能大家不愛聽,但我觀察到的現象就是這樣的。很少有人愿意去讀別人的代碼,彼此都覺得寫得好爛。所以,如果想贏得技術人員的欽佩,你需要有壓倒性的技術能力。這個壓倒性的優勢,不是下屬70分,你80分,而是下屬70分,你要做到100分;下屬100分,你要做到150分。所以,缺乏技術能力的人去管理技術人員往往是吃力不討好的,可能下屬表面上服從你,心里根本不當你一回事兒,這樣管理起來就存在障礙了。當然,如果你的德行非常好,也非常敬業,技術就顯得不那么重要了;而如果你已經滿足了前面兩條,同時技術也很精湛,那自然是錦上添花了。

    posted @ 2013-02-24 16:53 paulwong 閱讀(304) | 評論 (0)編輯 收藏

    企業信息管理系統 JeeSite

    JeeSite是一個 開源的企業信息管理系統 基礎框架。主要定位于“企業信息管理”領域,可用作企業信息管理類系統、網站后臺管理類系統等。JeeSite是非常強調開發的高效性、健壯性和安全性的。

    JeeSite是輕量級的,簡單易學,本框架以Spring Framework為核心、Spring MVC作為模型視圖控制器、Spring Data JPA + Hibernate作為數據庫操作層,此組合是Java界業內最經典、最優的搭配組合。前端界面風格采用了結構簡單、性能優良、頁面精致的Twitter Bootstrap作為前端展示框架。

    JeeSite 已內置 一系列企業信息管理系統的基礎功能,目前包括兩大模塊,系統管理(SYS)模塊和內容管理(CMS)模塊。系統管理模塊,包括企業組織架構(用戶管理、部 門管理、區域管理)、菜單管理、角色權限管理、字典管理等功能;內容管理模塊,包括內容管理(文章、鏈接),欄目管理、站點管理、公共留言、文件管理、前 端網站展示等功能。

    JeeSite提供了常用工具進行封裝,包括日志工具、緩存工具、服務器端驗證、數據字典、當前組織機構數據(用戶、區域、部門)以及其它常用小工具等。另外還提供一個基于本基礎框架的 代碼生成器 ,為你生成基本模塊代碼,如果你使用了JeeSite基礎框架,就可以很快速開發出優秀的信息管理系統。

    為何選擇

    1. 使用 Apache License 2.0 協議,源代碼完全開源,無商業限制。
    2. 使用目前最主流的J2EE開發框架,簡單易學,學習成本低。
    3. 數據庫無限制,支持MySql、Oracle、SQL Server、H2等數據庫。
    4. 模塊化設計,層次結構清晰。內置一系列企業信息管理的基礎功能。
    5. 權限控制精密細致,對所有管理鏈接都進行權限驗證,可控制到按鈕。
    6. 提供基本功能模塊的源代碼生成器,提高開發效率及質量。
    7. 提供常用工具類封裝,日志、緩存、驗證、字典、組織機構等,常用標簽(taglib),獲取當前組織機構、字典等數據。
    8. 完全兼容目前最流行瀏覽器(IE6、IE7+、Firefox、Chrome)。

    使用技術

    1、Services相關

    • Core Framework:Spring Framework 3.1。
    • Security Framework:Apache Shiro 1.2。

    2、Web相關

    • MVC Framework:SpringMVC 3.1。
    • Layout Decoration:SiteMesh 2.4。
    • JavaScript Library:JQuery 1.7。
    • CSS Framework:Twitter Bootstrap 2.0.4。
    • JavaScript/CSS Compressor:YUI Compressor 2.4。
    • Front Validation:JQuery Validation Plugin 1.9。

    3、Database相關

    • ORM Framework:Spring-Data-JPA 1.2、Hibernate 4.1。
    • Connection Pool:BoneCP 0.7
    • Bean Validation:Hibernate Validation 4.3.0。
    • Cache:Ehcache 2.6。

    4、Tools 相關

    • Commons:Apache Commons
    • JSON Mapper:Jackson 2.1
    • Bean Mapper:Dozer 5.3.2
    • Full-text search:Hibernate Search 4.2(Apache Lucene 3.6)、IK Analyzer 2012_u6中文分詞
    • Log Manager:Log4j 1.2

    安全考慮

    1. 開發語言:系統采用Java 語言開發,具有卓越的通用性、高效性、平臺移植性和安全性。
    2. 分層設計:(數據庫層,數據訪問層,業務邏輯層,展示層)層次清楚,低耦合,各層必須通過接口才能接入并進行參數校驗(如:在展示層不可直接操作數據庫),保證數據操作的安全。
    3. 雙重驗證:用戶表單提交雙驗證:包括服務器端驗證及客戶端驗證,防止用戶通過瀏覽器惡意修改(如不可寫文本域、隱藏變量篡改、上傳非法文件等),跳過客戶端驗證操作數據庫。
    4. 安全編碼:用戶表單提交所有數據,在服務器端都進行安全編碼,防止用戶提交非法腳本及SQL注入獲取敏感數據等,確保數據安全。
    5. 密碼加密:登錄用戶密碼進行SHA1散列加密,此加密方法是不可逆的。保證密文泄露后的安全問題。
    6. 強制訪問:系統對所有管理端鏈接都進行用戶身份權限驗證,防止用戶

    快速體驗

    1. 具備運行環境:JDK1.6、Maven3.0、MySql。
    2. 修改src\main\resources\application.properties文件中的數據庫設置參數。
    3. 根據修改參數創建對應MySql數據庫。
    4. 運行bin\resresh-db\refresh-db.bat腳本,導入表結構及演示數據
    5. 運行bin\jetty.bat,啟動服務器(第一次運行,需要下載依賴jar包,請耐心等待)。
    6. 最高管理員,用戶名:thinkgem 密碼:admin

    posted @ 2013-02-24 16:45 paulwong 閱讀(494) | 評論 (0)編輯 收藏

    僅列出標題
    共115頁: First 上一頁 69 70 71 72 73 74 75 76 77 下一頁 Last 
    主站蜘蛛池模板: 亚洲AV无码之日韩精品| 国产成人精品日本亚洲专区6| 日韩毛片免费无码无毒视频观看| 久久免费观看视频| 亚洲精品女同中文字幕| 亚洲电影在线免费观看| 亚洲精品成人网站在线观看| 四虎亚洲精品高清在线观看| 国产精品视频免费一区二区三区| 99xxoo视频在线永久免费观看| 久久嫩草影院免费看夜色| 国产天堂亚洲精品| 亚洲中文字幕乱码熟女在线| gogo全球高清大胆亚洲| 好爽…又高潮了免费毛片| 国产人成免费视频网站| h视频在线观看免费完整版| 无码午夜成人1000部免费视频| 国产黄在线播放免费观看| 亚洲高清资源在线观看| 久久国产亚洲观看| 国产亚洲精品一品区99热| 亚洲自偷自偷在线制服| 91黑丝国产线观看免费| 222www免费视频| 免费人妻无码不卡中文字幕系| 永久免费不卡在线观看黄网站| 成人毛片100免费观看| 9i9精品国产免费久久| 国产精品玖玖美女张开腿让男人桶爽免费看 | 久久久久亚洲av无码专区| 亚洲AV永久精品爱情岛论坛| 亚洲av之男人的天堂网站| 亚洲乱码国产乱码精品精| 国产亚洲成av人片在线观看| 亚洲春色在线视频| 毛片免费全部播放一级| a级毛片免费全部播放| 免费看无码特级毛片| 毛片在线全部免费观看| 97国产在线公开免费观看|