1.mongodb
mongodb只能存放內(nèi)網(wǎng)、存放在公網(wǎng)2018年有被攻擊的案例,大部分公司并未開啟權(quán)限所以很危險螟蒸。
mongodb是一款NOSQL非關(guān)系型數(shù)據(jù)庫瑟慈。
Nosql數(shù)據(jù)庫的優(yōu)缺點
優(yōu)點:快速的讀寫、低廉的成本、靈活的數(shù)據(jù)模型
缺點:不提供對sql的支持 支持的特性不搞 現(xiàn)有的產(chǎn)品不夠成熟
Mongodb面向集合存儲
模式自由
支持動態(tài)查詢
支持完全索引,包含內(nèi)部對象
支持復(fù)制和故障恢復(fù)
使用高效的二進制數(shù)據(jù)存儲,包括大型對象
文件存儲格式為BSON(一種JSON的擴展)
文檔(document)是MongoDB中數(shù)據(jù)的基本單元牲览,非常類似于關(guān)系型數(shù)據(jù)庫系統(tǒng)中的行(但是比行要復(fù)雜的多)。
集合(collection)就是一組文檔恶守,如果說MongoDB中的文檔類似于關(guān)系型數(shù)據(jù)庫中的行第献,那么集合就如同表。
MongoDB的單個計算機可以容納多個獨立的數(shù)據(jù)庫兔港,每一個數(shù)據(jù)庫都有自己的集合和權(quán)限庸毫。
MongoDB自帶簡潔但功能強大的JavaScript shell,這個工具對于管理MongoDB實例和操作數(shù)據(jù)作用非常大衫樊。
每一個文檔都有一個特殊的鍵”_id”,它在文檔所處的集合中是唯一的飒赃,相當(dāng)于關(guān)系數(shù)據(jù)庫中的表的主鍵。
2.Spring IOC AOP 執(zhí)行流程步驟(簡略)
方便解耦科侈,簡化開發(fā) (高內(nèi)聚低耦合)
Spring就是一個大工廠(容器)载佳,可以將所有對象創(chuàng)建和依賴關(guān)系維護,交給Spring管理
spring工廠是用于生成bean
AOP編程的支持
Spring提供面向切面編程臀栈,可以方便的實現(xiàn)對程序進行權(quán)限攔截蔫慧、運行監(jiān)控等功能
聲明式事務(wù)的支持
只需要通過配置就可以完成對事務(wù)的管理,而無需手動編程
方便程序的測試
Spring對Junit4支持权薯,可以通過注解方便的測試Spring程序
方便集成各種優(yōu)秀框架
Spring不排斥各種優(yōu)秀的開源框架姑躲,其內(nèi)部提供了對各種優(yōu)秀框架(如:Struts、Hibernate崭闲、MyBatis肋联、Quartz等)的直接支持
降低JavaEE API的使用難度
Spring 對JavaEE開發(fā)中非常難用的一些API(JDBC威蕉、JavaMail刁俭、遠程調(diào)用等),都提供了封裝韧涨,使這些API應(yīng)用難度大大降低
Springioc
1.容器初始化
1牍戚、Resource定位:
2侮繁、從Resource中解析和載入BeanDefinition
3、BeanDefinition在IOC容器的注冊
2.IOC容器依賴注入
1如孝、getBean第一次調(diào)用lazy-init的bean
2宪哩、lazy-init==false初始化(只對singleton,也是默認(rèn)方式)
SpringAop
1第晰、初始化Advisor鏈
2锁孟、生成代理類
3、調(diào)用時攔截
aop底層將采用代理機制進行實現(xiàn)茁瘦。
接口 + 實現(xiàn)類 :spring采用 jdk 的動態(tài)代理Proxy品抽。
實現(xiàn)類:spring 采用 cglib字節(jié)碼增強。
自行理解
Spring IOC和Spring AOP的實現(xiàn)原理(源碼主線流程) - zedosu - 博客園
3.struts
Struts2 框架的優(yōu)點
了解了這幾個主要的優(yōu)點甜熔,會促使你考慮使用Struts2 :
POJO表單及POJO操作 - Struts2 去除掉了Struts框架中的Action Forms部分圆恤。在Struts2框架下,你可以用任何一POJO來接收表單輸入腔稀,同樣的盆昙,你可以把任一POJO視為一個Action類。
標(biāo)簽支持 - Struts2 改進了標(biāo)簽表單焊虏,而新的標(biāo)簽可讓開發(fā)人員減少代碼編寫量淡喜。
AJAX支持 - Struts2 被認(rèn)可接收進Web 2.0技術(shù),并創(chuàng)建了功能非常類似于標(biāo)準(zhǔn)的Struts2 標(biāo)簽的AJAX標(biāo)簽诵闭,把AJAX支持整合進其結(jié)果中拆火。
易于整合 - Struts有多種整合方式可使用,現(xiàn)在與其他類型的框架涂圆,如Spring们镜、Tiles、SiteMesh之類的润歉,整合更為容易了模狭。
模板支持 - 支持使用模板生成視圖。
插件支持 - 有大量的插件可用于Struts2踩衩,而使用插件可以增強和擴大Struts2 核心行為嚼鹉。
性能分析 - Struts2 為調(diào)試和配置應(yīng)用程序提供綜合的性能分析,此外驱富,Struts也以嵌入調(diào)試工具的形式提供集成調(diào)試锚赤。
易于修改標(biāo)簽 - 在Struts2 中,可使用Freemarker的模板對標(biāo)簽標(biāo)記進行調(diào)整褐鸥,而修改標(biāo)簽不需要JSP或是Java知識线脚,基本的HTML、XML和CSS知識就足夠了。
促進減少配置 - Struts2 使用各種設(shè)置的默認(rèn)值促進減少配置浑侥,而你不需要再配置什么除非是偏離了Struts2 設(shè)定的默認(rèn)設(shè)置姊舵。
視圖技術(shù) - Struts2 為多種視圖選項(JSP、Freemarker寓落、Velocity括丁、XSLT等)提供支持。
以上是使Struts2 成為準(zhǔn)企業(yè)框架的十大優(yōu)點伶选。
Struts2 框架的缺點
盡管Struts2 有一大列的優(yōu)點史飞,但我們還是要提到關(guān)于它的一些仍需不斷改進的缺點:
更大的學(xué)習(xí)曲線 - 使用Struts MVC,你必須要熟悉JSP仰税、Servlet APIs標(biāo)準(zhǔn)以及一個大型祸憋、復(fù)雜的框架。
文檔缺乏 - 相比于Servlet和JSP APIs標(biāo)準(zhǔn)肖卧,Struts的在線資源較少蚯窥,許多初學(xué)者會發(fā)現(xiàn)Apache在線文檔混亂并缺乏整理。
不夠透明 - 相比于使用正常的基于Java的Web應(yīng)用程序塞帐,使用Struts的應(yīng)用程序有許多是進行在后臺拦赠,這使得框架不易于理解。
最后說明一點葵姥,一個好的框架應(yīng)該提供各種類型的應(yīng)用程序都可以使用的通用行為荷鼠,Struts2 是最好的Web框架之一,并頻繁用于RIA(Rich Internet Applications)的發(fā)展榔幸。
4.mybatis
1.#{}和${}的區(qū)別是什么
${}是Properties文件中的變量占位符允乐,它可以用于標(biāo)簽屬性值和sql內(nèi)部,屬于靜態(tài)文本替換削咆,比如${driver}會被靜態(tài)替換為com.mysql.jdbc.Driver牍疏。#{}是sql的參數(shù)占位符,Mybatis會將sql中的#{}替換為?號拨齐,在sql執(zhí)行前會使用PreparedStatement的參數(shù)設(shè)置方法鳞陨,按序給sql的?號占位符設(shè)置參數(shù)值,比如ps.setInt(0, parameterValue)瞻惋,#{item.name}的取值方式為使用反射從參數(shù)對象中獲取item對象的name屬性值厦滤,相當(dāng)于param.getItem().getName()。
MyBatis 是一款優(yōu)秀的持久層框架歼狼,它支持定制化 SQL掏导、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集羽峰。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息趟咆,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄添瓷。
2.Xml映射文件中,除了常見的select|insert|updae|delete標(biāo)簽之外忍啸,還有哪些標(biāo)簽?
3.<resultMap>履植、<parameterMap>计雌、<sql>、<include>玫霎、<selectKey>凿滤,加上動態(tài)sql的9個標(biāo)簽,trim|where|set|foreach|if|choose|when|otherwise|bind等庶近,其中<sql>為sql片段標(biāo)簽翁脆,通過<include>標(biāo)簽引入sql片段,<selectKey>為不支持自增的主鍵生成策略標(biāo)簽鼻种。
4.Mybatis是如何進行分頁的反番?分頁插件的原理是什么?
5.Mybatis使用RowBounds對象進行分頁叉钥,它是針對ResultSet結(jié)果集執(zhí)行的內(nèi)存分頁罢缸,而非物理分頁,可以在sql內(nèi)直接書寫帶有物理分頁的參數(shù)來完成物理分頁功能投队,也可以使用分頁插件來完成物理分頁枫疆。
分頁插件的基本原理是使用Mybatis提供的插件接口,實現(xiàn)自定義插件敷鸦,在插件的攔截方法內(nèi)攔截待執(zhí)行的sql息楔,然后重寫sql,根據(jù)dialect方言扒披,添加對應(yīng)的物理分頁語句和物理分頁參數(shù)值依。
6.Mybatis的Xml映射文件中,不同的Xml映射文件碟案,id是否可以重復(fù)鳞滨?
不同的Xml映射文件,如果配置了namespace蟆淀,那么id可以重復(fù)拯啦;如果沒有配置namespace,那么id不能重復(fù)熔任;畢竟namespace不是必須的褒链,只是最佳實踐而已。
原因就是namespace+id是作為Map<String, MappedStatement>的key使用的疑苔,如果沒有namespace甫匹,就剩下id,那么,id重復(fù)會導(dǎo)致數(shù)據(jù)互相覆蓋兵迅。有了namespace抢韭,自然id就可以重復(fù),namespace不同恍箭,namespace+id自然也就不同刻恭。
7.oracle
Oracle面試題(基礎(chǔ)篇) - long77 - 博客園
8.maven maven 多模塊
[maven] Maven面試寶典 - wfh6732的博客 - CSDN博客
docker是容器技術(shù),你可以把他理解成為一種輕量形的虛擬機扯夭。docker的啟 動時間是毫秒級鳍贾,普通虛擬機的啟 動時間是秒級 或者是分鐘級 docker為什么在業(yè)務(wù)上比普通虛擬機更火,因為他的交付快交洗, 不管客戶是什么linux的分支骑科,只要幾行命令, 就可以將開發(fā)環(huán)境快速遷移至客戶機器上 舉個很簡單的列子 我們在一臺新電腦上安裝java環(huán)境 在以前我們需要上傳jre或者jdk的安裝包构拳,我們需要解壓 安裝 配置環(huán)境 特別是配置環(huán)境對于新用戶來說極其不友好咆爽,因為一旦配置錯誤,就會導(dǎo)致系統(tǒng)進不去 但是有了docker之后置森, 幾行命令就可以安裝好你想要的java環(huán)境 而且還比虛擬機更少的占用資源 docker容器太多了 管理起來不方便所以有了k8s
10.maven多模塊構(gòu)建步驟
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-
4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--父模塊的 groupId伍掀、artifactId、version暇藏,子模塊可以通過parent繼承父模塊蜜笤,使用的就是這里定義
的value-->
<groupId>com.liangyt</groupId>
<artifactId>maven-multi-module</artifactId>
<version>1.0-SNAPSHOT</version>
<!--根pom必須要有-->
<packaging>pom</packaging>
<!--子模塊-->
<modules>
<module>service</module>
<module>provide</module>
<module>consumer</module>
</modules>
<properties>
<java-version>1.8</java-version>
<service-version>1.0-SNAPSHOT</service-version>
<spring-boot-version>1.5.4.RELEASE</spring-boot-version>
</properties>
<!--
使用dependencyManagement的話,則子模塊不會自動繼承父POM依賴盐碱;
需要子模塊顯示定義需要的依賴把兔,如果不寫 version 則使用父POM定義的version,如果子模塊的依賴寫了version則使用子模塊的。
-->
<dependencyManagement>
<dependencies>
<!--該依賴?yán)锩嫫鋵嵾€包含了很多其它的依賴瓮顽,這里只是為了示范县好,生產(chǎn)環(huán)境可以細化,只添加需要的依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot-version}</version>
</dependency>
<!--定義子模塊包暖混,其他子模塊可以引用-->
<dependency>
<groupId>com.liangyt</groupId>
<artifactId>service</artifactId>
<version>${service-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
service
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--繼承的父模塊-->
<parent>
<artifactId>maven-multi-module</artifactId>
<groupId>com.liangyt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!--一般跟父模塊下的模塊名一致缕贡,也是其它模塊引用的名稱-->
<artifactId>service</artifactId>
<!--
發(fā)版的版本號,如果重新發(fā)布了新的版本,則父模塊添加的該依賴需要新的版本的話還需要相應(yīng)的修改一下才能引用新的發(fā)布包
-->
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!--
需要哪個依賴就添加哪個依賴:
如果父模塊里面有該依賴的話拣播,則只要不填寫版本則跟父模塊版本一樣晾咪;
如果寫了版本號,則跟父模塊沒有什么關(guān)系贮配;
-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
provide
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>maven-multi-module</artifactId>
<groupId>com.liangyt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>provide</artifactId>
<dependencies>
<!--引用service模塊-->
<dependency>
<groupId>com.liangyt</groupId>
<artifactId>service</artifactId>
</dependency>
</dependencies>
</project>
12.resuful風(fēng)格優(yōu)點
*前后端分離谍倦,減少流量
安全問題集中在接口上,由于接受json格式泪勒,防止了注入型等安全問題
前端無關(guān)化昼蛀,后端只負責(zé)數(shù)據(jù)處理宴猾,前端表現(xiàn)方式可以是任何前端語言(android,ios,html5)
前端和后端人員更加專注于各自開發(fā)叼旋,只需接口文檔便可完成前后端交互仇哆,無需過多相互了解
服務(wù)器性能優(yōu)化:由于前端是靜態(tài)頁面,通過nginx便可獲取夫植,服務(wù)器主要壓力放在了接口上*
13.什么是json
*JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation)
JSON 是輕量級的文本數(shù)據(jù)交換格式
JSON 獨立于語言 *
JSON 具有自我描述性讹剔,更易理解*
14.cxf
*CXF框架特點
A、與Spring偷崩、Servlet做了無縫對接辟拷,cxf框架里面集成了Servlet容器Jetty
B撞羽、支持注解的方式來發(fā)布webservice
C阐斜、能夠顯示一個webservice的服務(wù)列表
D、能夠添加攔截器:輸入攔截器诀紊、
輸出攔截器 :輸入日志信息攔截器谒出、輸出日志攔截器、用戶權(quán)限認(rèn)證的攔截器*
13.函數(shù)和存儲過程的區(qū)別:
1邻奠、存儲過程用戶在數(shù)據(jù)庫中完成特定操作或者任務(wù)(如插入笤喳,刪除等),函數(shù)用于返回特定的數(shù)據(jù)碌宴。
2杀狡、存儲過程聲明用procedure,函數(shù)用function贰镣。
3呜象、存儲過程不需要返回類型,函數(shù)必須要返回類型碑隆。
4恭陡、存儲過程可作為獨立的pl-sql執(zhí)行,函數(shù)不能作為獨立的plsql執(zhí)行上煤,必須作為表達式的一部分休玩。
5、存儲過程只能通過out和in/out來返回值劫狠,函數(shù)除了可以使用out拴疤,in/out以外,還可以使用return返回值独泞。
6遥赚、sql語句(DML或SELECT)中不可用調(diào)用存儲過程,而函數(shù)可以阐肤。
-
索引建立規(guī)則
如果有兩個或者以上的索引凫佛,其中有一個唯一性索引讲坎,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引 2. 至少要包含組合索引的第一列(即如果索引建立在多個列上愧薛,只有它的第一個列被where子句引用時晨炕,優(yōu)化器才會使用該索引) 3. 小表不要建立索引 4. 對于基數(shù)大的列適合建立B樹索引,對于基數(shù)小的列適合簡歷位圖索引 5. 列中有很多空值毫炉,但經(jīng)常查詢該列上非空記錄時應(yīng)該建立索引 6. 經(jīng)常進行連接查詢的列應(yīng)該創(chuàng)建索引 7. 使用create index時要將最常查詢的列放在最前面 8. LONG(可變長字符串?dāng)?shù)據(jù)瓮栗,最長2G)和LONG RAW(可變長二進制數(shù)據(jù),最長2G)列不能創(chuàng)建索引 9.限制表中索引的數(shù)量(創(chuàng)建索引耗費時間瞄勾,并且隨數(shù)據(jù)量的增大而增大费奸;索引會占用物理空間;當(dāng)對表中的數(shù)據(jù)進行增加进陡、刪除和修改的時候愿阐,索引也要動態(tài)的維護,降低了數(shù)據(jù)的維護速度)