分佈式:一個業務分拆多個子業務,部署在不一樣的服務器上
集羣:同一個業務,部署在多個服務器上
分佈式是指將不一樣的業務分佈在不一樣的地方。 而集羣指的是將幾臺服務器集中在一塊兒,實現同一業務。
簡單說,分佈式是以縮短單個任務的執行時間來提高效率的,而集羣則是經過提升單位時間內執行的任務數來提高效率。javascript
若是一個任務由10個子任務組成,每一個子任務單獨執行需1小時,則在一臺服務器上執行該任務需10小時。
採用分佈式方案,提供10臺服務器,每臺服務器只負責處理一個子任務,不考慮子任務間的依賴關係,執行完這個任務只需一個小時。(這種工做模式的一個典型表明就是Hadoop的Map/Reduce分佈式計算模型)
而採用集羣方案,一樣提供10臺服務器,每臺服務器都能獨立處理這個任務。假設有10個任務同時到達,10個服務器將同時工做,1小時後,10個任務同時完成,這樣,整身來看,仍是1小時內完成一個任務!
css
css多個class:
多個class用空格隔開,
類(class)和元素(如div元素)是多對多的關係,一個類能夠用於多個元素,一個元素也能夠擁有多個類。多類的時候,只要元素擁有某個類,就會應用這個類的樣式。
多個則同時應用,當多類並存而且同時聲明瞭同一個樣式的時候,會被最後一個覆蓋。
<div class="a b c"></div>html
solr4.7安裝配置
主要步驟以下:java
一、下載solr-4.7.0.tgz;
二、解壓縮solr-4.7.0.tgz,jquery
三、將solr-4.7.0目錄下example/webapps目錄下的solr.war複製到tomcat的webapps目錄中;css3
四、啓動tomcat服務器(tomcat bin目錄下的startup.bat啓動),這時候會報錯,暫時不用管,只是爲了解壓war包,啓動完成後關閉Tomcat;程序員
五、新建一個tomcat-solr文件夾(名稱與位置隨意),好比D:\Program files\solr\tomcat-solr。angularjs
六、繼續到solr-4.7.0目錄,將example/solr目錄下的全部文件和目錄拷貝到新建的tomcat-solr目錄下:web
(注意solr.xml文件只須要一份便可,這個在配置多份索引時無須多拷貝)算法
七、將solr-4.7.0目錄下example/lib/ext/下的全部jar包(5個)複製到tomcat/webapps/solr/WEB-INF的lib目錄中,是solr的獨立日誌處理模塊;
八、在tomcat/webapps/solr/WEB-INF/下新建一個classes目錄,將example/resources下的log4j.properties文件複製到該classes目錄中,不然日誌模塊沒法正常工做;
九、找到tomcat\webapps\solr\WEB-INF\web.xml文件,打開看到用於配置環境變量的標籤,去掉註釋,並修改環境變量爲
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:/Program files/solr/tomcat-solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
其中<env-entry-value>的值爲上面新建的tomcat-solr的目錄路徑
十、啓動tomcat,瀏覽器輸入:http://localhost:8080/solr就能看到solr的管理界面了。
tomcat下solr安裝配置
(上)
eclipse下solr配置:
1 複製solr-4.7.0\example\solr-webapp\webapp裏面的內容到build-dev.properties文件deploy.exploded.dir的路徑下,新建文件夾solr(即eclipse的工做空間)
2 修改1路徑中solr中WEB-INF下的web.xml文件
<env-entry-value>D:/Program files/solr/tomcat-solr</env-entry-value>
D:/Program files/solr/tomcat-solr爲solr-4.7.0/example/solr裏的內容
3 在Servers下server.xml中添加solr項目路徑<Context docBase="solr" ...>
4 打包編譯,啓動tomcat,頁面訪問http://localhost:8080/solr
jquery遍歷解析json對象:
var json = [{dd:'SB',AA:'東東',re1:123},{cccc:'dd',lk:'1qw'}];
var l=json.length;
for(var i=0;i<l;i++){
for(var key in json[i]){
alert(key+':'+json[i][key]);
}
}
添加外鍵
alter table DSP_EHR_MZ_MEDICAL_RECORD
add constraint YLJGDM_MZ_HOSPITAL foreign key (YLJGDM)
references DSP_EHR_DIC_HOSPITAL(YLJGDM);
count(*)全表掃描
count(1)貌似更快,單個掃描
count(pk主鍵)主鍵掃描
<div><p><table><tr><ul><ol><dl><li><h1>~<h7> 換行
<span>不換行
ng-if:直接建立和刪除DOM結構元素
ng-show和ng-hide:顯示元素和隱藏元素,至關於display屬性
ng-bind:綁定HTML元素的數據,不會改變
ng-init:定義初始化值,會根據算法改變,要賦值變量
eclipse -clean:從新加載插件,將eclipse配置返回默認設置。
&:若是第一個表達式爲false,還會繼續執行第二個表達式
&&:具備短路的功能,若是第一個表達式爲false,則再也不計算第二個表達式,因此效率更高
所謂DIV滾動條,就是利用DIV標籤,在裏面嵌入CSS樣式表,加入overflow的屬性值,
這樣,當div所規範的區域內的內容達到必定程序時,滾動條就派上用場。其功能大約是爲了節約頁面空間
<div style="position:absolute; height:400px; overflow:auto"></div>
<div style="height:200px; overflow:auto"></div>
不加position屬性,滾動條出如今最右邊
<tr>的高度,寬度能夠根據頁面控制檯佈局的邊框加起來獲得
ng-repeat屬性:
$index:下標,返回當前引用對象的序號,從0開始
$first:返回布爾值,當前元素是不是集合中的第一個
$middle:返回布爾值,當前元素是不是集合中的中間一個
$last:返回布爾值,當前元素是不是集合中的最後一個
$even:返回布爾值,全部偶數的
$odd:返回布爾值,全部奇數的
電腦環境變量:
系統環境變量,對全部用戶起做用
用戶環境變量只對當前用戶起做用。
oracle鏈接:
1.普通SID方式
jdbc:oracle:thin:username/password@localhost:1521:SID
2.普通ServerName方式
jdbc:oracle:thin:username/password@localhost:1521/Server_Name
windows電腦cmd命令:
到達指定目錄 cd D:\Program files\路徑
rowid
是數據庫的一個僞列,創建表的時候數據庫會自動爲每一個表創建ROWID列
用來惟一標識一行記錄。
是存儲每條記錄的實際物理地址,每一個rowid都不會重複
複製表語句:
select into from 要求目標表Table2不存在,由於在插入時會自動建立
語句形式爲:SELECT vale1, value2 into Table2 from Table1
insert into select 要求目標表Table2存在,而且字段類型,字段大小要和Table1一致,能夠插入常量
語句形式爲:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
建立遠程數據庫LINK權限:(將多個oracle數據庫邏輯上當作一個數據庫,一個數據庫中能夠操做另外一個數據庫中的對象)
CREATE PUBLIC DATABASE LINK 數據庫鏈接名
CONNECT TO 用戶名
IDENTIFIED BY 密碼
USING '數據庫SID配置';
刪除遠程數據庫鏈接權限:
DROP PUBLIC DATABASE LINK 數據庫鏈接名;
建立dblink的權限有三種:
create database link user ; --只有user用戶能使用的dblink
create public database link user ;--全部用戶均可以使用的dblink
drop public database link user; --刪除dblink的權限
若是建立語句是public dblink,則要DBA用戶付給user第二種權限才行。
這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。
公有dblink對全部人開放,在該dblink之上建立的同義詞也會隨之對全部人開放。
私有dblink只有建立者能夠訪問,其上的同義詞不能被其餘用戶訪問。
建立全局dblink,則必須使用systm或sys用戶的權限,在database前加public。
普通用戶以sysdba登錄的話,先用sys以sysdba登錄,而後執行
grant sysdba to 普通用戶;增長權限
強制使用索引(HINT):
select /*+ INDEX(tableName index_name)*/ * from tableName;
索引是由oracle本身使用的,至於如何掃描索引是Oracle本身決定的。
在數據量千萬級的數據庫中,要想使用索引,建議先創建索引,後導入數據(數據導入導出),千萬級數據下創建索引時間會比較慢。
solr數據庫優化流程:
1 定時任務從數據庫獲取數據,數據存入solr
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
SolrInputDocument doc = new SolrInputDocument();
doc.addField();
httpSolrServer.add(docs);
httpSolrServer.commit();
查詢到的List數據塞入SolrInputDocument裏面存入solr
2 java從solr獲取數據供前臺頁面展現
用到的實例:
solr查詢:SolrQuery
solr服務:HttpSolrServer
List<T>排序方法:
List<Map<String,Integer>> list = new ArrayList<Map<String,Integer>>();
Collections.sort(list, new Comparator<Map<String,Integer>>(){
public int compare(Map<String,Integer> list1, Map<String,Integer> list2) {
return list1.get("sort")-list2.get("sort"); //定義排序規則,可設置升降序
}
});
for(Map<String,Integer> u : list){
System.out.println(u);
}
腳本catalina用於啓動和關閉tomcat服務器.
Tomcat的核心分爲3個部分:
(1)Web容器---處理靜態頁面;
(2)catalina --- 一個servlet容器-----處理servlet;
(3)還有就是JSP容器,它就是把jsp頁面翻譯成通常的servlet。
關於 log4j:WARN No appenders could be found for logger 異常信息解決辦法:
直接寫個人解決辦法:
在src下面新建file名爲log4j.properties內容以下:
# Configure logging for testing: optionally with log file
log4j.rootLogger=WARN, stdout
# log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
從新發布,OK,沒有提示了。加入了這個配置文件後,再次運行程序上面的警告就會消失。尤爲在進行Web 層開發的時候,只有加入了這個文件後才能看到Spring 後臺完整的出錯信息。在開發Spring 整合應用
時,常常有人遇到出現404 錯誤可是卻看不到任何出錯信息的狀況,這時你就須要檢查一
下這個文件是否是存在。
在Eclipse中開發相關項目時,在控制檯常常看到以下信息:
log4j:WARN No appenders could be found for logger
log4j:WARN Please initialize the log4j system properly.
此處輸出信息並非錯誤信息而僅只是警告信息,由於log4j沒法輸出日誌,log4j是一個日誌輸入軟件包。能夠將Struts或Hibernate等壓縮包解壓,內有log4j.properties文件,將它複製到項目src文件夾或將log4j.properties放到 \WEB-INF\classes文件夾中便可。
WARN No appenders could be found for logger的解決辦法
這幾天作一個SSH項目,tomcat啓動時出現如下問題:
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
在網上查了一下,可能是說把ContextLoaderListener改成SpringContextServlet,但我這樣改了沒用。後來在一個英文網站上看到一個遇到一樣問題的帖子,他是這樣改的:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/config/log4j.properties</param-value>
</context-param>
······
<!-- 定義LOG4J監聽器 -->
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
這樣改了問題就解決了,不用再修改ContextLoaderListener。
堆和棧:
堆棧是一種存儲部件,即數據的寫入跟讀出不須要提供地址,而是根據寫入的順序決定讀出的順序。
形象來講,棧就是一條流水線,而流水線中加工的就是方法的主要程序,在分配棧時,因爲程序是自上而下順序執行,就將程序指令一條一條壓入棧中,就像流水線同樣。
而堆上站着的就是工做人員(類對象信息,靜態代碼塊等),他們加工流水線中的商品,由程序員分配:什麼時候加工,如何加工。
項目中調用接口(API)
接口是一種契約,一種規範,一般用在不一樣系統之間的數據交換。同時也是一種中間件,爲各類不一樣平臺提供數據共享。
調用接口者,沒必要關心接口的具體實現,只須要拿到本身須要的數據就行
XX接口,須要定義接口數據,和返回數據的格式(json或xml)。
例子:USB接口
一、usb接口定義了數據傳輸的格式。
二、usb接口被不一樣的設備實現了。
三、咱們沒必要了解usb接口是怎麼實現的。
api:是一組定義、程序及協議的集合,經過 API 接口實現計算機軟件之間的相互通訊。
API 的一個主要功能是提供通用功能集。程序員經過調用 API 函數對應用程序進行開發,能夠減輕編程任務。
API 同時也是一種中間件,爲各類不一樣平臺提供數據共享
清除特殊字符:
String regEx = "[要清除的特殊字符]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
struts2框架是類級別的攔截,每次來了請求就建立一個Action,而後調用setter getter方法把request中的數據注入,一個Action對象對應一個request上下文
spring3mvc是方法級別的攔截,攔截到方法後根據參數上的註解,把request數據注入進去,一個方法對應一個request上下文
一元函數,一個y對應一個x,導數只有一個.
二元函數,一個z對應一個x和一個y,那就有兩個導數了,一個是z對x的導數,一個是z對y的導數,稱之爲偏導.
全導數是對各個變量求偏導後疊加=dz
求偏導時要注意,對一個變量求導,則視另外一個變量爲常數,只對改變量求導,從而將偏導的求解轉化成了一元函數的求導了
滾動條錨點事件
$("#div").scroll(function(){
var scrollTop=$("#div").scrollTop(); //當前滾動條滾動的距離
var cHeight=$("#div").height(); //獲取當前窗體的高度
var divHeight=$("#tjyyfaMd").height(); //推薦用藥方案div塊的高度
var oDiv=document.getElementById('gttmd').offsetTop; //錨點距離上方或上層控件的位置
if(scrollTop>divHeight){
}else{
}
});
$(window).scroll(function() {
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop; //當前滾動條滾動的距離
var cHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight; //獲取當前窗體的高度
var oDiv=document.getElementById('b').offsetTop; ////錨點距離上方或上層控件的位置
if(scrollTop>(oDiv-cHeight)){
//$("#li2").attr("class","blueClass");
}
return false;
});
12月
顯示側邊欄例子
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" />
<meta name="renderer" content="webkit">
<title>css3</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script type="text/javascript">
jQuery(function () {
//左邊
$('#menu-trigger').click(function () {
if (!$('.dLeft').hasClass('mobile-menu-left')) {
$('.head, .sild, .footer').addClass('mobile-left');
$('.dLeft').addClass('mobile-menu-left');
} else {
$('.dLeft').removeClass('mobile-menu-left');
$('.head, .sild, .footer').removeClass('mobile-left');
}
});
//右邊
$('#my-menu-trigger').click(function () {
if (!$('.mydLeft').hasClass('my-mobile-menu-left')) {
$('.myhead, .mysild, .myfooter').addClass('my-mobile-left');
$('.mydLeft').addClass('my-mobile-menu-left');
} else {
$('.mydLeft').removeClass('my-mobile-menu-left');
$('.myhead, .mysild, .myfooter').removeClass('my-mobile-left');
}
});
});
</script>
<style type="text/css">
.head, .dLeft, .sild, .footer { position:relative; left:0; -webkit-transition:left 0.3s; -moz-transition:left 0.3s; transition:left 0.3s;}
.dLeft { width:260px; height:962px; background:blue; position:fixed; left:-300px; top:0;}
.mobile-left{left:260px;}
.mobile-menu-left{left:0px;}
.myhead, .mydLeft, .mysild, .myfooter { position:relative; right:0; -webkit-transition:right 0.3s; -moz-transition:right 0.3s; transition:right 0.3s;} /*控制移動的速度快慢*/
.mydLeft { width:260px; height:962px; background:blue; position:fixed; right:-260px; top:0;} /* 初始化藍色移動div塊的默認屬性,right:-260px即隱藏 */
.my-mobile-left{right:260px;} /* 控制點擊a按鈕離右邊間距大小 */
.my-mobile-menu-left{right:0px;} /* 控制藍色移動div塊離右邊間距大小 */
.myhead{float:right}
</style>
</head>
<body>
<div>
<a class="head" id="menu-trigger" href="javascript:void(0)">點擊顯示左側邊欄</a>
<a class="myhead" id="my-menu-trigger" href="javascript:void(0)">點擊顯示右側邊欄</a>
</div>
<div class="sild"></div>
<div class="dLeft">
<p>
我不肯讓你一我的 <br/>
承受這世界的殘忍 <br/>
我不肯眼淚陪你到 永恆 <br/>
</p>
</div>
<div class="footer"></div>
<div class="mysild"></div>
<div class="mydLeft">
<p>
我不肯讓你一我的 <br/>
承受這世界的殘忍 <br/>
我不肯眼淚陪你到 永恆 <br/>
</p>
</div>
<div class="myfooter"></div>
</body>
</html>
====================================
var module =angular.module('myApp',['依賴']); 定義了一個叫myAPP的AngularJS (模塊)應用
module.controller('',['$scope','myApp',function($scope,id){} 用於控制綁定的myApp AngularJS 應用
module.service('myApp',function ($http){}) 建立一個myApp的AngularJS自定義服務(服務是一個函數或對象,可在你的 AngularJS 應用中使用。
$http 是 AngularJS 應用中最經常使用的服務。服務向服務器發送請求,應用響應服務器傳送過來的數據。)
var loginApp = angular.module("loginApp", []);
loginApp.controller('LoginCtrl', function ($scope, $http) {})
Controller的建立的第一參數是Controller的名稱,後面的functions是它個一個構造函數,
由於這個congroller須要使用$scope,$http,因此這個構造函數注入了兩個angular的服務,若是有自定義的服務須要使用也須要在構造函數中進行注入
循環:
ng-repeat="problems in data"(problems本身定義,data爲$scope.data後臺返回的json數組)
後臺數據交互$http
var promise=$http({
method:'GET',
url:"data.json"
});
=============================
Arrays.asList(s[])
將一個數組轉化爲一個List對象,會返回一個ArrayList類型的對象,這個ArrayList類並不是java.util.ArrayList類,而是Arrays類的靜態內部類!用這個對象對列表進行添加刪除更新操做,會報異常。
setTimeout(code,millisec);
code 要執行的 JavaScript 代碼串,能夠是函數,也能夠是直接執行代碼
setTimeout("alert('對不起, 要你久候')", 3000 )
setTimeout('functionName()', 3000 )
setTimeout(function(){alert("對不起, 要你久候");},3000);
millisec 在執行代碼前需等待的毫秒數。
setTimeout() 只執行 code 一次。若是要屢次調用,請使用 setInterval()
jquery打開新窗口(子窗口):
window.open(URL,windowName,parameters);
URL: 要打開的窗口的URL地址,若是爲空則不打開任何網頁;
windowName:描述被打開的窗口的民稱。
parameters:描述被打開的窗口的參數值,包括窗口的各個屬性值,及要傳入的參數值,如子窗口設計。
window.open("https://www.baidu.com",'myName','width=300,height=300');
window.location:當前頁面替換打開新的頁面(原頁面被替換)
window.open:從新打開一個窗口頁面
打開子窗口再延時自動關閉:
function clearWord(){
var oppo=window.open("url",'','width=300,height=300');
setTimeout(function(){oppo.close();},1000); //oppo.close()關閉指定打開的窗口
};
方法close()將關閉有window 指定的頂層瀏覽器窗口。
某個窗口能夠經過調用self.close()或只調用close()來關閉其自身。
javascript內部函數在聲明變量的時候,若是不加var命令,則是聲明一個全局變量!
加var命令則爲聲明局部變量。
javascript閉包:
閉包就是可以讀取其餘函數內部變量的函數。
閉包的用途:
一是能夠讀取函數內部的變量,另外一個就是讓這些變量的值始終保持在內存中(即變量會永久存在)。
js全局變量的缺點:
一、命名衝突
二、一旦這個全局變量被刪除或被修改,都會影響到全部引用它的函數
三、不能進行局部測試或單元測試(函數內部測試)
onBlur事件:會在對象失去焦點時發生.
$("#testid").focus():滾動條跳轉當前焦點事件(id爲testid的元素)
Javascript刷新頁面的幾種方法:
1,history.go(0)
2,location.reload()
3,location=location
4,location.assign(location)
5,document.execCommand('Refresh')
6,window.navigate(location)
7,location.replace(location)
8,document.URL=location.href
鼠標事件:
onClick 鼠標點擊事件,多用在某個對象控制的範圍內的鼠標點擊
onDblClick 鼠標雙擊事件
onMouseDown 鼠標上的按鈕被按下了
onMouseUp 鼠標按下後,鬆開時激發的事件
onMouseOver 當鼠標移動到某對象範圍的上方時觸發的事件
onMouseMove 鼠標移動時觸發的事件
onMouseOut 當鼠標離開某對象範圍時觸發的事件
onKeyPress 當鍵盤上的某個鍵被按下而且釋放時觸發的事件.[注意:頁面內必須有被聚焦的對象]
onKeyDown 當鍵盤上某個按鍵被按下時觸發的事件[注意:頁面內必須有被聚焦的對象]
onKeyUp 當鍵盤上某個按鍵被按放開時觸發的事件[注意:頁面內必須有被聚焦的對象]
表單相關事件:
onBlur 當前元素失去焦點時觸發的事件 [鼠標與鍵盤的觸發都可]
onChange 當前元素失去焦點而且元素的內容發生改變而觸發的事件 [鼠標與鍵盤的觸發都可]
onFocus 當某個元素得到焦點時觸發的事件
onReset 當表單中RESET的屬性被激發時觸發的事件
onSubmit 一個表單被遞交時觸發的事件
將JSON對象轉化爲JSON字符:JSON.stringify(json對象)
JSON字符串轉換爲JSON對象:
eval('(' + json字符串 + ')')或JSON.parse(str);
js方法定義:
$scope.函數名=function(){
$http({
method:"post", //提交方式
url:"healthClinicHospital/yctest.action", //url返回action路徑
params:{name:'參數一',id:'參數二'} //參數
}).success(function(data){
//執行內容
}).error(function(data){
//執行內容
});
}
1 定義函數名要用$scope綁定方式
2 angularjs的controller中要注入$http服務,只有注入服務$http功能才能啓用
3 js方法調用要採用$scope.函數名()方式
js中String轉json格式:
var obj=eval("("+string格式+")")
JSON.stringify(obj);
hide(time)函數,實現隱藏,time參數表明以此速度隱藏,也能夠slow和fast,表明隱藏的速度
toggle():隱藏顯示切換,當即狀態切換
show():顯示隱藏的元素,當即
slideToggle():同toggle,不一樣是帶窗簾效果
slideDown():同show
滾動條事件:(括號內爲可替代形式)
$(document).height() 獲取整個頁面的高度(當瀏覽器縮小到小於等於內容全文高時,值不會小於內容全文高,即值在內容全文高和頁面全屏之間,不會小於內容全文高)
document.body.scrollHeight;(或者$(window).height())//網頁內容全文高(即body裏面的內容高度,若是不加body內容值不會隨着網頁縮小放大而變)
document.body.clientHeight; //瀏覽器所能看到的頁面部分的高度,隨着頁面縮小而改變
document.body.scrollTop:(或者$(document).scrollTop())網頁被捲去的高,即當前滾動條離最上端的距離
window.screen.height:獲取當前屏幕分辨率的高
window.screen.width:屏幕當前分辨率的寬
滾動條到頂端和底端代碼:
var c=document.body.scrollHeight; //body內容高度
var a=document.body.clientHeight; //當前可見頁面高度
var b=$(document).scrollTop(); //滾動條滾動距離(相對頂端)
if(Number(b) == 0){
alert("到頂了!");
}
if(Number(a)+Number(b) >= Number(c)){
alert("到底了!");
}
select * from和select 全部字段 from
關於select * ,相似於在查詢的時候會執行對table的操做獲取全部字段,而後再把字段處理分割拼接代替*
而select 全部字段是直接獲取字段的過程,因此select 全部字段比select *的效率高
字段提取要按照「需多少、提多少」的原則,避免「select *」
select 1就是select 一個指定的值,目的是判斷是否有存在值,不須要返回任何字段信息。效率比查詢字段更高。
js實時監控屬性值改變:
onchange觸發事件必須知足兩個條件:
a)當前對象屬性改變,而且是由鍵盤或鼠標事件激發的(腳本觸發無效)
b)當前對象失去焦點(onblur);
onpropertychange的話,只要當前對象屬性發生改變,都會觸發事件,可是它是IE專屬的;
oninput是onpropertychange的非IE瀏覽器版本,支持firefox和opera等瀏覽器,
但有一點不一樣,它綁定於對象時,並不是該對象全部屬性改變都能觸發事件,它只在對象value值發生改變時奏效。
AngularJS雙向綁定原理:
<input ng-model="username" type="text" value="">
<p>{{username}}</p>
1. ng-model指令的做用:創建數據模型,在模型中對應有一個變量username用來存放input元素的value值;
2. {{username}}是一個表達式,angular會自動計算該表達式,替換成相應的值。
3. 手動輸入文字,input元素的value發生變化,自動同步到model的usename變量,{{username}}從模型中讀username的值,所以下面<p>元素的內容也跟着變了。
4. 同步數據是angular幫咱們完成的。
oracle通配符和運算符
用於where比較條件的有:
等於:=、<、<=、>、>=、<>
包含:in、not in exists、not exists
範圍:between...and、not between....and
匹配測試:like、not like
Null測試:is null、is not null
布爾連接:and、or、not
excel公式:=IF(OR(C2="字符串",C2="字符"),"varchar2("&D2&")",IF(OR(C2="整數",C2="數字"),"number("&D2&")",IF((C2="datetime"),"date")))
mybatis <![CDATA[ sql 語句 ]]> 的意義:表示在xml裏該部份內容不會被xml解析器解析。防止特殊字符< 等
如在 XML 元素中,"<" 和 "&" 是非法的。
"<" 會產生錯誤,由於解析器會把該字符解釋爲新元素的開始。
標準只有一個,能幫助到你的,纔是有用的。
行大事不拘小節和真誠
用心的態度對待身邊的人和事
必須對你所作的事情有一個明確的目標。
人生很長。向上爬的路也很長。給本身定短時間目標來激勵本身。
人是須要成功來激勵本身的。成功的多了,天然就有自信。
個人態度是:不管發生任何事情,都不該該影響到這個目標的實現。
只要符合你指定的目標,不違揹你的原則而且仔細考量過。
那麼就勇敢大膽的去作任何別人看起來瘋狂的事情,只要沒有嚴重的後果。
若是迷惘了,多看看書,多作點事,多接觸人。思考。
千萬級數據庫查詢優化:
關鍵點:
1 避免全表掃描
2 注重SQL語句寫法
3 索引
SQL語句寫法:
1. 儘可能想辦法使用臨時表掃描替代全表掃描;
2. 拋棄in和not in語句,使用exists和not exists替代;
3. 和客戶確認,模糊查詢是否有必要,如沒有必要,去掉like語句;
4. 注意創建適當的,符合場景的索引;
5. 踩死 "*" 號;
6. 避免在where條件中對字段進行函數操做;
7. 對實時性要求不高的報表,容許髒讀(with(nolock))。
oracle外鍵:
1.外鍵所對應的字段必須是主鍵.
2.創建外鍵對應表的多列主鍵必須都爲對應字段,若是本表沒有,就設對應表的相應字段爲惟一約束
即聯合主鍵的狀況下,只對應其中一個作外外鍵是錯誤的。如a表中是聯合主鍵(id,name),b表中的(name)外鍵卻只關聯a表中聯合主鍵的一個字段(name),
致使不惟一,此時應對name添加惟一約束unique(name)
union all,union,和or:
一、union:對兩個結果集進行並集操做,去重,按照默認規則排序
二、union all:對兩個結果集並集操做,不去重,不排序 (沒有重複記錄的話效率比union快)
三、or:知足兩個條件的並集,不去重,不排序
從效率上說,UNION ALL 要比UNION快不少,因此,若是能夠確認合併的兩個結果集中不包含重複數據且不須要排序時的話,那麼就使用UNION ALL。
where子句中使用 or 將致使引擎放棄使用索引而進行全表掃描,因此能夠用UNION ALL代替or
or:掃描次數更多了。知足or以前,掃描全表一次;知足or以後,一次;同時知足又一次。
union all:只是聯合查詢而已,根據索引來找,挺快的,幾乎耗費不了多少時間。
因此,個人理解是在數據量尚未足夠大,sql語句中仍是儘可能用 or 條件查詢,由於數據量不大的狀況下,即便全表掃描也要比邏輯讀兩次,
掃描兩次的時間要少,效率要高;固然,若是你的數據達到百萬級別以上了,那就不要用 or 了,能夠用 union 或 union all 代替 or ,
以免由於 or 引發的全表掃描。
含有"IN"、"OR"的Where子句常會使用工做表,使索引失效.
若是不產生大量重複值,能夠考慮把子句拆開;拆開的子句中應該包含索引。
oracle執行計劃查看:採用Explain Plan FOR
1 Explain Plan FOR select DAA001 from tableName;
2 select * from table(dbms_xplan.display); (固定格式)
字段解釋:ID: 一個序號,但不是執行的前後順序。執行的前後根據縮進來判斷。Operation: 當前操做的內容。Rows: 當前操做的Cardinality,Oracle估計當前操做的返回結果集。Cost(CPU):Oracle 計算出來的一個數值(代價),用於說明SQL執行的代價。Time:Oracle 估計當前操做的時間。