2013金山校園招聘Java筆試題


作者:xcbeyond
瘋狂源自夢想,技術成就輝煌!微信公眾號:《程序猿技術大咖》號主,專注后端開發(fā)多年,擁有豐富的研發(fā)經驗,樂于技術輸出、分享,現(xiàn)階段從事微服務架構項目的研發(fā)工作,涉及架構設計、技術選型、業(yè)務研發(fā)等工作。對于Java、微服務、數(shù)據(jù)庫、Docker有深入了解,并有大量的調優(yōu)經驗。 






   
第一題 :棧內存與堆內存的特點與區(qū)別,java中是怎樣分配的?

                  棧內存中用來存放基本數(shù)據(jù)類型(8種基本類型)和對象的引用變量,存取速度比堆快,棧中的數(shù)據(jù)可以被共享使用,堆內存中用來存放new創(chuàng)建的對象和數(shù)組對象。

第二題:對象序列化,作用,那些不能序列化?

               對象序列化是為了能夠讓對象像其他變量數(shù)據(jù)一樣能夠長久的保存下來,其實質是把對象在內存中的數(shù)據(jù)按照一定的規(guī)則,變成一系列的字節(jié)數(shù)據(jù),然后寫入到流中。沒有實現(xiàn)java.io.Seralizabled接口的類不能實例化。關于序列化更加詳細的介紹:Java序列化的那些事。

第三題 線程的p、v操作

              線程對于程序員而言,是比較重要的一塊知識,不會線程編程,就算不上一個合格的程序員。因此,線程也是各個公司筆試面試必考的內容之一。PV操作本是操作系統(tǒng)中相關的內容,簡單來說,P操作是申請資源,V操作是釋放資源。本題最好可以用生產者/消費者來實現(xiàn)PV操作最為合適,同時也考慮到了多線程同步的問題。舉例說明:

    package common;
     
    import org.junit.Test;
     
    /**
     * PV操作示例
     * @author xcbeyond
     *
     * 2012-10-2下午08:05:09
     */
    public class PVOperator {
        public static void main(String [] args){
            Store s = new Store(5);
            Produce pro1 = new Produce(s);
            Produce pro2 = new Produce(s);
            Consumer con1 = new Consumer(s);
            Consumer con2 = new Consumer(s);
            pro1.start();
            con1.start();
            pro2.start();
            con2.start();
        }
    }
    /**
     * 倉庫類:臨界資源
     *
     */
    class Store{
        private  final int maxSize;    //最大容量
        private int count;   
       
        public Store(int size){
            maxSize = size;
            count = 0;
        }
        /**
         * 添加資源
         */
        public synchronized void add(){
            while(count >=maxSize){
                System.out.println("----倉庫滿了!----");
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            count++;
            System.out.println(Thread.currentThread().toString()+ "put" +count);
            notifyAll();
        }
       
        public synchronized void remove() {
            while(count <= 0) {
                System.out.println("----倉庫空了!----");
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().toString()+ "get"+count);
            count--;
            notify();
        }
    }
    /**
     * 生產者:P操作
     */
    class Produce extends Thread {
        private Store s;
       
        public Produce(Store s) {
            this.s = s;
        }
        @Override
        public void run() {
            while(true){
                s.add();
                try {
                    Thread.sleep(1000);//只是為了利于查看線程間的同步,所以延遲1s
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * 消費者:V操作
     */
    class Consumer extends Thread {
        private Store s;
       
        public Consumer(Store s) {
            this.s = s;
        }
       
        @Override
        public void run() {
            while(true) {
                s.remove();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }



第四題  設計一個文本編輯器,類似于wps,寫出思想和架構。

第五題:


共五道題

 

 

現(xiàn)不給出具體答案,望大家給出合理的答案,相互參考!