面試總結

今天面試了三家公司,總結一下面試題目。

1.Redis是什麼,幹什麼用的,有什麼優缺點(淺談)?

答:Redis是什麼?

       Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、key-Value數據庫,並提供多中語言的API。從2010年起,Redis的開發由VMware主持。從2013年5月份開始,Redis的開發由Pivota贊助。

       Redis本質上也是一種鍵值數據庫,但是它在保持鍵值數據庫簡單快捷的同事,又吸收了部分關係數據庫優點。從而使他的位置處於關係數據庫和鍵值數據之間。Redis有5種數據結構:String、hash(哈希)、List類型(有序)、Set類型(無序)及zset(sorted set:有序集合)。

      Redis用來做什麼?

      通常侷限點來說,Redis也以消息隊列的形式存在,作爲內嵌的List存在,滿足實時的高併發需求,而通常在一個點上類型的數據處理過程中,有關商品、熱銷、推薦排序的隊列,通常存放在Redis之中,期間也包括Storm對於Redis列表的讀取和更新。

     Redis的優點?

    性能極高:Redis能支持超過100k+每秒的讀寫頻率。

    豐富的數據類型:Redis支持二進制案例的String、List、Hashes、Sets及Ordered Sets數據類型操作

    原子:Redis的所有操作都是原子性的,同事Redis還支持對幾個操作全並後的原子性執行。

    豐富的特徵:Redis還支持publish、subscribe,通知、key過去等等特徵。

    Redis的缺點?

    是數據庫容易受到物理內存的限制,不能用作海量數據的高性能讀寫。因此Redis適合的場景主要侷限在較小的高性能操作和運算上。

    Redis緩存(Redis一般應用場景)?

    假如系統有2千萬用戶信息,用戶信息基本固定,一旦錄入很少變動,那麼每次加載所有用戶信息時,都要請求數據庫,數據庫編譯並執行你的查詢語句,這樣就會降低效率,針對這中信息不經常變動並且數據量較大的情況,通常做法,就是把他加入緩存,每次取數前先去判斷,如果緩存不爲空,那麼就從緩存取值,如果爲空,再去請求數據庫,並將數據如緩存,這樣就大大提高系統訪問效率。

2.Nginx是什麼,幹什麼用的,有什麼優缺點?

答:Nginx是一款輕量級的Web服務器、反向代理服務器及電子郵件代理服務器,並在一個BSD-like協議下發行。

優點:1.輕量級、同樣作爲web服務,比apache佔用更少的內存及資源

          2.抗併發,nginx處理請求時異步非阻塞,而apache則是阻塞型,在高併發下Nginx能保持低資源低消耗高性能

          3.高度模塊化設計,編寫模塊相對簡單

          4.社區活躍,各種高性能模塊出品迅速

          5.Nginx本身就是一個反向代理服務器

          6.Nginx支持7層負載均衡

          7.nginx適合做靜態、簡單、效率高

apache相對nginx的優點:

          1.rewrite,比nginx的rewrite強大

          2.模塊超多,基本想到的都可以找到

          3.少bug、nginx的bug相對比較多

          4.超穩定

          5.apache適合做動態、穩定、功能強

3.springMVC原理?

答:Spring MVC是Spring框架一個非常重要的功能模塊,實現MVC結構,便於簡單、快速開發MVC結構的Web程序。

       1.用戶發送請求至前端控制器DispatcherServlet;

       2.DispatcherServlet收到請求調用HandlerMapper處理映射器;

       3.處理器映射器找到具體的處理器Controller(可以根據xml配置、註解進行查找)。生成處理器對象及攔截器(如果有則生成)一併返回給DispatcherServlet.

       4.執行Controller組件約定方法處理請求,在約定方法調用模型組件完成業務處理。約定方法返回一個ModelAndView對象,封裝了處理結果數據和視圖名稱信息。

       5.控制器接受ModelAndView之後,調用ViewResolver(視圖解析器),定位View(JSP)並傳遞數據信息,生成響應界面結果。

4.spring有什麼,流程是什麼?


答:Spring框架有6個模塊組成,這6個模塊均可以單獨存在。

       Spring核心容器IOC(Core):

      提供Spring框架的基本功能,核心容器的主要組件是BeanFactory,她是工廠模式的實現,BeanFactory使用控制反轉(IOC)模式將應用程序的配置和依賴性規範與實際的應用代碼程序分開;

       Spring AOP:

       通過配置管理特性,SpringAOP模塊直接面向方面的編程功能集成到Spring框架中,所以可以很容易的使用Spring框架管理的任何對象支持AOP。SpringAOP模塊爲基於Spring的應用程序中的對象提供了食物管理服務,通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事物管理集成到應用程序中。

       Spring ORM:

       Spring框架集成了若干ORM框架,從而提供了ORM的對象關係工具,包括JDO、Hibernate、Ibatis和TopLink,所有這秀都遵從Spring的通用食物和DAO異常層結構。

       Spring DAO:

       JDBC DAO抽象層提供了有意義的異常層次的結構,可用該結構來管理異常處理和不同數據供應商拋出的異常錯誤信息,異常層次結構簡化了錯誤處理,並且大大的降低了需要編寫的異常代碼數量;如:打開個關閉連接。

        Spring WEB

        Web上下文模板建立在上下文模板(Context)的基礎之上,爲基於Web服務的應用程序提供了上下文服務,所以Spring框架支持Jakarta Struts的繼承。Web模板還簡化了處理多部分請求及將請求參數綁定到域對象的工作。

        Spring上下文(Context)

        Spring上下文是一個配置文件,向Spring框架提供上下文信息,Spring上下文包括企業服務,如:JNDI、EJB、電子郵件、國際化校驗和調度功能。 

5.MyBatis的連接池怎麼配置,XML文件怎麼寫?

    <!--配置dataSource;數據庫的配置可以寫在properties文件中,方便後續的修改-->

       <bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">

            <property name="driverClassName"  value="com.mysql.jdbc.Driver"/>

            <property name="url"  value="jdbc:mysql://IP:3306/用戶名"/>

            <property name="username" value="用戶名"/>

            <property name="password" value="密碼"/>

        </bean>

        <!--定義SqlSessionFactoryBean-->

        <bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">

                <!--指定dataSource-->

                <property name="dataSource" ref="dbcp"/>

                <!--指定SQL定義文件-->

                <property name="mapperLocations" value="classpath:mapper/*.xml"/>

        </bean>

        <!--定義MapperScanner-->

        <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 指定Mapper接口;     value裏面指定是的dao包的路徑 -->
		<property name="basePackage" value="com.*.dao">
		</property>		
	</bean>

6.淺談Collection框架?


答:集合,或者叫容器,是一個包含多個元素的對象,可以對數據進行存儲、檢索、操作;

       它們可以把許多個體組織成一個整體:比如撲克牌(許多牌組成的集合);

優點:編碼更輕鬆:Java集合框架爲我們提供了方便使用的數據結構和算法,讓我們不用從頭來,直接操心上層就行。

          代碼質量更好:Java集合框架經過幾次升級,數據結構和算法性能已經優化的很棒了。

          減少學習新的API:有了標準的Java集合框架,每個API都集成自己頂層API,只負責具體實現。

遍歷Collection的幾種方式:

        1.for-each

    Collection<Person> persons = new ArrayList<Person>();

        for(Person person : person){

                System.out.println(person.name);

        }

        2.使用iterator迭代器    

    Collection<Person> persons = new ArrrayList<Person>();

        Iterator iterator = person.iterator();

        while(iterator.hasNext){

            System.out.println(iterator.next);

        }

       3.使用aggregae operations聚合操作

    Collertion<Person> persons = new ArrayList<Person>();

         persons.stream().forEach(new Consumer<Person>(){

                @Override

                public void accept(Person person){

                    System.out.println(person.name);

                }

        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章