今天面試了三家公司,總結一下面試題目。
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);
}
});