分布式:一个业务分拆多个子业务,部署在不一样的服务器上
集群:同一个业务,部署在多个服务器上
分布式是指将不一样的业务分布在不一样的地方。 而集群指的是将几台服务器集中在一块儿,实现同一业务。
简单说,分布式是以缩短单个任务的执行时间来提高效率的,而集群则是经过提升单位时间内执行的任务数来提高效率。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 估计当前操做的时间。