浏览器输入url后发生了什么?

1.域名解析,找到服务器ip地址

2.主机与服务器三次握手建立连接

3.浏览器根据url发送http请求,服务器返回响应页面资源

4.加载页面中的其他资源请求:img,css,javascript等等

ajax产生的背景

web应用程序一次http请求对应一个页面,请求更新数据时会刷新整个页面,

ajax

XMLHttpRequest

ajax优点

异步通信,响应迅速;无需刷新页面,在页面内与服务器通信;按需请求数据分担服务器压力;

ajax缺点

破坏了浏览器回退功能;安全问题;破坏了程序的异常机制,给调试带来困难;

H5的新特性

  1. 用于绘画 canvas 元素。
  1. 用于媒介回放的 video 和 audio 元素。
  1. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;

    sessionStorage 的数据在浏览器关闭后自动删除。

  2. 语意化更好的内容元素,比如 article、footer、header、nav、section

  1. 表单控件,calendar、date、time、email、url、search

css3

  1. CSS3实现圆角(border-radius),阴影(box-shadow),边框图片border-image
  2. 对文字加特效(text-shadow、),强制文本换行(word-wrap),线性渐变(linear-gradient)

    3.旋转,缩放,定位,倾斜:transform:rotate(90deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);

  3. 增加了更多的CSS选择器、多背景、rgba();

  4. 在CSS3中唯一引入的伪元素是 ::selection ;
  5. 媒体查询(@media),多栏布局(flex)

web前端优化

css放置head里js放置body底部;减少http请求,压缩js文件等,合并css,js,雪碧图;图片懒加载;

cdn加速;反向代理;

优化减少dom操作,避免无谓的循环合理使用return等结束操作

盒模型

content,padding,border,margin

w3c height,width content 不包含其他部分;ie width,height包含content,padding,border

隐藏元素

display:none

visibility:hidden

opacity:0

z-index:-1

x的y次方

var getSum = function(x,y){
​ var sum = 0;
​ if(y==1){
​ sum = x;
​ }else if(y>1){
​ sum = getSum(x, y-1)*x;
​ }
​ return sum;
}

箭头函数与function

箭头函数this指向创建环境,function里this指向调用环境

使用箭头函数 不能用于构造函数,即不能被new

由于js的内存机制,function的级别最高,而用箭头函数定义函数的时候,需要var(let const定义的时候更不必说)关键词,而var所定义的变量不能得到变量提升,故箭头函数一定要定义于调用之前

模块化

匿名自执行函数

require.js sea.js

import/export

var min=Math.min.apply(null,array);

var max=Math.max.apply(null,array)

Array.prototype.push.apply(arr1,arr2);

实现三角

style=”width:0;height:0;border:7px solid transparent;border-top-color:#2DCB70;”

轮播图

style.transform或者style.left

在最后克隆第一张图片,实现平滑过渡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//快速排序
function quickSort(arr){
if(arr.length<=1){
return arr;
}
//获取基准值
var baseIndex = Math.floor(arr.length/2);
var base = arr.splice(baseIndex,1)
//定义左右两个数组
var leftArr = [];
var rightArr = [];
for(var i=0;i<arr.length;i++){
if(arr[i]<base){
leftArr.push(arr[i])
}else{
rightArr.push(arr[i])
}
}

return quickSort(leftArr).concat(base,quickSort(rightArr))
}

实例的构造函数属性指向构造函数

1
2
3
4
5
6
7
8
function Person(name,age){
this.name = name;
this.age = age;
}

var person = new Person()

person.constructor == Person//true

JavaScript中每个函数对象都有一个prototype属性,指向函数的原型对象

1
Person.prototype.construtor == Person

JavaScript创建对象时内置属性 proto,指向创建它的构造函数的原型对象

1
person.__proto__ == Person.prototype

原型对象也是对象,它也有 proto 属性

1
2
Person.prototype.__proto__ == Object.prototype
Object.prototype.__proto__ == null

依靠proto属性构造原型链;依靠原型和原型链实现JavaScript继承特性

1
2
3
4
5
6
7
var animal = function(){};
var dog = function(){};
animal.price = 2000;
dog.prototype = animal;
var tidy = new dog();
console.log(dog.price) //undefined
console.log(tidy.price) // 2000

mybatis 批量插入和更新

1.insert

1
2
3
4
5
6
7
8
9
10
11
<insert id="insertBatch" parameterType="java.util.List">
insert into sg_gkzb_pre_win_bid_detail (batch_id, batch_name, batch_code,
divide_bid_id,divide_bid_code,divide_bid_name,package_id,package_code,package_name,
supply_bid_id,supply_bid_person,is_calculated,approve_status)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.batchId},#{item.batchName},#{item.batchCode},#{item.divideBidId},
#{item.divideBidCode},#{item.divideBidName},#{item.packageId},#{item.packageCode},
#{item.packageName},#{item.supplyBidId},#{item.supplyBidPerson},#{item.isCalculated},#{item.approveStatus})
</foreach>
</insert>

2.update

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<update id="updateBatch" parameterType="java.util.List">
update sg_gkzb_pre_win_bid_detail set
tech_score=
<foreach collection="list" item="item" index="index" separator=" " open="case supply_bid_id" close="end">
when #{item.supplyBidId} then #{item.techScore}
</foreach>
,business_score=
<foreach collection="list" item="item" index="index" separator=" " open="case supply_bid_id" close="end">
when #{item.supplyBidId} then #{item.businessScore}
</foreach>
,price_score=
<foreach collection="list" item="item" index="index" separator=" " open="case supply_bid_id" close="end">
when #{item.supplyBidId} then #{item.priceScore}
</foreach>
,is_submit=
<foreach collection="list" item="item" index="index" separator=" " open="case supply_bid_id" close="end">
when #{item.supplyBidId} then #{item.isSubmit}
</foreach>
where supply_bid_id in
<foreach collection="list" item="item" index="index"
separator="," open="(" close=")">

#{item.supplyBidId}
</foreach>
</update>

Git查询某人代码量

1
git log --author="quankj" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
frontend:255980
backend:191065
sum:447045

sg-gkzb-fe:255980
sg-business-gkzb-bid:66970
basedata:64273
orgrights:22190
supplier:12413
material:22319
supplybid:2900

xiDaiDai:
quankj:
liudfb:
zhangkunh:
gtg:
zhoudong3:
liuxiac:
ck:1
wangchengk:
mixue:
zhangmyh:
ninghu:
windknow: