学习新技术的时候可以做夜歌todomvc项目
Stack Overflow
msdn.itellyou.cn
================================Html+css========================================
1.HTML:是一门标记语言,是展示数据的;
CSS:美化页面的;
Js:控制网页内容,给页面增加效果;
2.由于浏览器中有JavaScript引擎所有可以运行JavaScript代码;
3.JavaScript中有错误代码后面的JavaScript就不执行,但是不同的的script标签中互不影响;
<!DOCTYPE html>是H5的标准,所以Script标签中可以不写type/JavaScript(language=“en”)
4.script的标签一般是放在body标签中最后面;因为如果放在最前面会阻塞渲染(遇到script会停止当前页面树的渲染,解析JS完成后从暂停的地方继续开始渲染)
5.变量的声明(有var 没值)var name;
变量的初始化(有var 有值) var name=“小黑”
/*字符串类型的值都用双引号和单引号*/
“=”的意义是赋值 “==”的意义是比较;
名字的声明尽量用英语,可以上网翻译,记得使用驼峰命名法 ;
//单行注释一般是在一行代码上面;
/**/多行注释:一般是用在函数或者一段代码
tyoeof 变量名 可以获得除null外原始类型变量名的类型和function这个对象类型,其他对象类型会显示成object ,instanceof 可以获得对象类型的类型,但是不能获得原始类型的类型;
Console 中字符串是黑色的,数字是蓝色的;
不要拿小数验证小数,精度会出现问题
Var num1=0.1;
Var num2=0.2;
Num1+num2==0.3 ------> false;
如果一个是字符串,一个是数字两个相减的时候,会转换成数字;“10”-5=5;
类型的转换: 1. 数字的转换parseInt.parseInt.Float
字符串的转换 num.toString()有意义的才转换 即有值;
14.prompt是输入的弹框 输入的是字符串,如果要用于计算要用parseInt(prompt(“ ”));
15.创建变量的三种方式:①使用系统的构造函数创建对象;var obj=new object;
②自定义构造函数创建对象:
function Person ( ) { 自定义构造函数}
var obj =new Person();自定义构造对象
在自定义构造函数和创造对象的时候做的四件事:
在内存中创建一个内存空间,存储对象
设置this 为当前的对象;
设置对象属性和方法的值;
返回this;
③字面量的创建:var obj={}等同创建对象类似自定义变量
Var obj={name: “”, sex: “”, age: “”}
16 值类型的值在栈中储存,引用类型的对象在堆中存放(内存),地址在栈中存放;
遍历数组用for(key in arrays)和forEach(value,key,arr)遍历对象用for of
内置对象:①Math②String③Arrays④Date
Arguments可以获取方法括号内的值;(var max=arguments[0];)
标签自定义属性用getAttribute()来获取;标签自带的属性可以用element.Attribute获取;
NodeType 是节点的类型如果是1--标签 2--属性 3--文本;
nodeName 是节点的名字 大写---标签 小写---属性名 #text 文本
*获取节点和元素的代码,谷歌火狐都支持 ,但是获取节点在IE8中获取的是元素,而获取元素的在IE8中没定义,不兼容;
23.如果是用循环添加事件就用命名事件,因为节省内存空间;如果不是就用匿名事件;
24.*为同一个元素添加多个事件可以使用addEventListener(“事件类型”,事件处理函数,false);谷歌和火狐支持;但是IE8只支持attentEvent(“有on的事件类型”,事件处理函数);
25.方法和函数的区别:方法是需要用对象调用的,而函数直接调用;
Eg: 方法: 对象.sayHi(); 函数: sayHi();
26.判断有没有这个方法的时候直接写方法名,不要加();
Eg;if(sayHi){ console.log(“有sayHi方法”)}else{“没有sayHi方法” }
绑定事件和解绑事件:
* 注意:用什么方式绑定事件,就应该用对应的方式解绑事件
* 1.解绑事件
* 对象.on事件名字=事件处理函数--->绑定事件
* 对象.on事件名字=null;
* 2.解绑事件
* 对象.addEventListener("没有on的事件类型",命名函数,false);---绑定事件
* 对象.removeEventListener("没有on的事件类型",函数名字,false);
* 3.解绑事件
* 对象.attachEvent("on事件类型",命名函数);---绑定事件
* 对象.detachEvent("on事件类型",函数名字);
事件冒泡:当元素嵌套,有层次,内层元素和外层元素注册了相同事件时,运行内层事件,外层事件也会运行,
阻止事件冒泡:必须在需要阻止的那一层函数加入
①Window.event.cancelBubble=true;*IE 8和谷歌支持 但是火狐不支持;
②而function( e ){ e .shopPropagation()} ; *谷歌火狐支持 IE8 不支持;
*e在谷歌和火狐中是对象,window.event在IE8 和谷歌中是对象
事件:①事件的捕获阶段; true 从外到里;
②事件的目标阶段; 点击或事件的目标;
③事件的冒泡阶段; false 从里到外;
通过e.event.Phase(*function(e){ e.event.Phase) 可以获取数字1.2.3即为事件阶段 ;
为同一个元素绑定多个不同的事件使用同一个处理函数用switch-case的方式解决;
数组必记方法:1.push 追加(); 2. pop();删除最后一个元素 3.shift();删除第一个元素返回删除的元素 4.unshift();在数组的第一个位置添加元素;(轮播图)
【.every(function(ele,index)) 检测元素是否符合函数
.filter(function(ele))返回符合条件的元素;
Ele.from复制数组;
arr1.concat(arr2,arr3)】添加元素
三种弹窗:prompt.Confirm.alert;
” 地址 ” method= ” get/post ” >表单 input 表单元素如果要提交必须要有name
设置css模块隐藏的时候使用display:none 要使他显示的时候必须在style中的class具体到哪个父类子类、例如
要显示的span元素在class为‘dv’的div内,只要有.showit就显示
设置 .dv display:none 设置.dv .showit {display: block;}
子元素的margin-top/left/.. 设置(n%)百分比的时候,实际上的margin/padding就是父元素的宽度* n%;记得都是父元素的宽度,没有高度
块级元素的padding和margin取百分比值的时候,都是相对于 父元素的宽度 来计算的。
BOM--------------------------------------------------------------------------------------------------------------------
1.location几个需要记的属性及方法:
①主机名和端口:号window.location.host ⑧*跳转地址:location.href=”www.4399.com”
②主机名:window.location.hostname (可以返回)=location.assign(“www.43...”)
③#后面的内容:window.location.hash (不能返回)=location.replace(“www.43..”)
④端口window.location.port
⑤协议 :window.location.protocol
⑥相对路径:window.location.pathname
⑦附带参数:window.location.search
2.判断平台的系统:使用window.navigation.platform (移动端pc端;)
3.看自己的系统和浏 览器:window.Navigation.userAgent;
4.BOM中的俩种定时器:①定时器:var timeId=window.setInterval(function(),time) 清除定时器:clearInterval(timeId)
②一次性定时器: var timeId=window.setTimeout(function(),time)
清除定时器:clearTimeout(timeId)
5.透明度:element.style.opacity=(0-1);
6.如果样式的代码是在style中设置的那么外部是无法获取的;如果是在style属性中设置的就可以获取;如果想获取 style中的left可以使用element.offsetLeft(以此类推!)得到的是数字类型;
7.element.children 可以获得子元素节点; element.childNodes获得子元素;
8获得对象属性的三种方法:
①offsetLeft 可以获得style中的Left 但是当没有脱离文档流时不能获取left值
②window.getComputeStyle(element).left 谷歌火狐支持IE8不支持;
③element.currentStyle.left IE8支持,火狐谷歌不支持;
9 . ① function (e)e.clientX 与 function (e)e.pageX的区别在与一个是可视化距离一个是距离界面边框的大小,图片跟着鼠标飞时是用pageX;
② function (e)e .clientX 火狐谷歌支持,
而在IE8中应该使用function ()window.event .clientX
兼容代码 e=window.event||e
③pageX和pageY在IE8中不兼容
Window.eventcancelBubble()
10原型可以解决遍历时调用导致重复开辟多个内存空间的问题,(构造函数名字.prototype.构造方法名字 )原型的作用:共享数据,节省内存空;
11单的原型写法:缺陷:-->原型直接指向{ },没有构造器,要自己加 constructor=对象名
eg:简单的写法:Student.prototype ={
constructor:Student,
height: "188",
weight: "55kg",
}
一般的写法:
Student.prototype.height="188";
Student.prototype.weight="55kg";
12.自调用函数(一次性函数)(function(形参){ })(实参) 可以用来把局部变量替换成全局变量; function(win){ Win.number=10;})(window)
Console.log(number) ====> 10
13.面向对象的编程思想:根据需求,抽象出相关的对象,总结出对象的特征和行为,把特征变成属性,行为变成方法,然后定义构造函数,实例化对象,通过对象调用属性和方法,完成相应的需求;
Bind可以改变函数里this的值;function(){}.bind(that) this==that;
new 构造函数 == 实例对象,构造函数的prototype就是原型对象。原型对象的构造器就是构造函数。实例对象的__proto__(原型)就是原型对象,实例对象可以使用原型对象的方法。原型链就是一种实例对象和原型对象的联系,关系是通过原型(__proto__)联系。per实例对象的__proto__------->Person.prototype的__proto__---->Object.prototype的__proto__是null
原型的指向可以改变,函数2的原型对象等于函数1的实例化对象。因为 Func.prototype ={}对象。f1的实例对象也是对象。所以当f2.prototype = new f1()的时候f2继承f1的属性和函数.还存在一个问题是,如果一开始f1设置了原型对象,一旦改变了指向后,前面设置的原型对象内容都不存在,存在的只有新的原型对象(f2的实例对象)!
Function f1(){}
Function f2(){}
f2.prototype = new f1()的时候f2继承f1的属性和函数
原型指向改变后再添加方法就可以使用,实例对象访问这个属性,应该先从实例对象中找,找到了就直接用,找不到就去指向的原型对象中找,找到了就使用。
Js中的继承是通过原型来实现的;(改变原型的指向相同的行为就用原型的方法写,)
Dog(子对象).prototype=new Animal(name,color)(实例化父对象)
原型继承会导致所有父级的值相同。即:stu1 小明 男 120分 stu2 小明 男 130分
这也就是继承的缺陷。
19.要解决继承的缺陷就需要借用父级的构造函数;(在子集构造函数中加入 父级构造函数名字.call(this,属性,属性,属性,属性)) ;但是缺陷在于父级的方法无法继承day3中的11
组合继承:就是原型继承+借用构造函数 在原型继承中不用输入属性值
20.①普通拷贝 var obj1={} var obj2=obj1;只拷贝了地址,而内存却只有一盒
②拷贝继承var obj={}
for(key in Person.prototype){obj2[key]=Person.prototype[key]}
函数声明if-else在IE8中会出现问题
*函数中的this
①普通函数中的this------>window(直接调用)
Function f1(){ }
F1();
②定时器里的this------>window
③对象.方法中的this------>当前的实例对象;
Function Person(){ this.play=function(e){ };}
Var pre=new Person(); pre.play(e);
④原型对象方法中的this------>实例对象;(对象点)
⑤构造函数中的this------>实例对象 (函数用new的方法调用)
Funtion F1(){ this.name} var f=new F1(构造函数首字母大写,普通小写);
对象中有__proto__原型是对象 函数中有一定有prototype 和__proto__ 是对象;
方法.call 和方法.apply 的区别在与参数call是一个个传,apply是传一个数组 ,相同点在于可以改变this的指向,如果第一个对象参数是null那么this指向window,如果是一个对象那么就指向这个对象;
Bind的函数用法和call类似 但是call和apply是调用函数,而bind是复制一份函数
addEventListener(“click”,function(){},false)事件监听对象;
把js中的var 换成const 就可以定义为常量,不可以被修改;
27.css中的text-indent是首行缩进!
===================================正则表达式==================================
元字符:
1 . 表示的是:除了/n以外的所有字符
2 []
①范围:[1-7][a-z][A-Z][0-9a-zA-Z]分别表示 1-7数字 a-z的小写字母,a-z的大写字母,所有数字字母。(不存在[100-200]只能一个一个数字来)
②把正则表达式中元字符的意义去掉 [.]就是一个.没有意义了
3 | 或者 [1-2]|[3-4] 1-2或者3-4;
4 () 分组和提升优先级 分组都是从最左边来算((())()) 第一个左括号就是第一
元字符下的限定符:
1 * 表示的是:前面表达式出现了0次到多次,例如“dd232132135”和[a-z][0-9]*匹配,(多个数字)
2 + 表示的是:前面表达式出现了1次到多次
3 ? 表示的是: 前面的表达式出现0-1次
4 {}:可以更加明确的表示前面的表达式出现的次数{5,10} 最少5次最多10次
{0,}=== * {1,}=== + {0,1}=== ? {4} 4次
5 ^表示的是:以什么开始或者取非
^(a-z):在括号外面所以是以字母开头
(^a-z):在里面说明是取非 ,除了字母;
6 $表示的是以什么结束 [a-z][0-9]$ 以数字结束
如果正则表达式以^开头$结尾说明是严格模式,字符串必须以这样的形式出现,如果没有,那么只需要在字符串中出现就可以了
7 \d 数字中的任意一个
\D 非数字的任意一个
8 \s 空白符
\S 非空白符
9 \w 非特殊符号
\W特殊符号
10 \在非特殊符号前加一个\ 说明下一个字符是特殊的。 s是字母\s是空白符
创建正则表达式
Var reg = /\d{1,5}/
Reg.test(“我的幸运数字是:6”)
============================jQuery============================================
js和jq对象的区别在于他们都是由各自的方法获得的,js对象无法使用js函数;jq对象无法使用js函数,除非他们互相转换
JS---->JQ :var name=.... $(name);
JQ---->JS :$(name) $(name)[0];
操作JQ不会覆盖,JS会覆盖;Js对象是一个一个对象(需要遍历),Jq对象是一组对象;
$有3中用法 :
1>第一种是入口函数
2>第二种是JS转换成Jq
3>第三种是获取对象:$(“div”) $(“#div”) $(“.className”)
过滤选择器:前面都有冒号,:even 下标为偶数 :odd 下标为奇数 :eq(index)下标等于index :gt(index)下标大于index :lt(index) 下标小于index ;
Jq中是链式编程,因为使用方法后都会返回jq对象;
Jq中的调错错误只可能出现在对象上直接看对象
-css操作 (改变样式 样式是在style中的)
1>设置样式:①css(“name”,“value”);②css({“name”:“value”,“name”:“value”;})
2>获取样式:①css(“name”) name是想要获取的样式(但是获取jq对象的时候只能得到一个元素的属性值)
8. -attr操作(改变属性 属性是在script中的)使用的方法和-css操作一样!
*自定义属性可以直接在attr操作中设置例如 attr(aa:bb)
*当用attr 设置 checked select disable 时会出现bug 这时需要使用.prop()来改变;
9. -class操作
1>添加一个类:addClass(“classname”)
2>移除一个类:removeClass(“classname”);
3>判断类是否存在: hasClass(“classname”) 返回 boolean。
4>切换类:toggleClass
10.jq动画的三种基本函数
1>显示 show(time,function) hide(time,function);
2>淡入 fadeIn(time,function) fadeOut(time,function)
3>滑入 slideUp(time,function) slideDown(time,function)
11.动画操作 .animate({attr:num},speed,swing(秋千) or linear(匀速),function);
.stop()可以停止当前正在进行的动画 用 .stop().animate()解决动画队列的问题
音频操作 用 audio(src=“” controls(播放器) autoplay(自动播放) )
视频操作 用video(src=“” controls(播放器) autoplay(自动播放) )
注意在音频前添加一个.load 再添加一个.play去掉一点要把音乐放完的bug
元素节点操作: var $li=$(“123 ”)
1>把元素添加到父元素最后面 : .append($li);
2>把元素添加到父元素最前面 : .prepend($li);
3>把子元素添加到父元素后面 : .appendTo();
4>把子元素添加到父元素前面 : .prependTo();
14.清空节点用 .empty();可以把元素节点和对应的事件清除;
15.删除节点:.remove()
15.深度复制 .clone(boolean) 为true的时候会复制事件为false不会复制事件;
16.操作value 值可以 .val(“ ”)来改变;
17.聚焦事件
1>聚焦用 .focus(function(){ })
2>离开焦点用 .blur(function({ }))
18. .html和.text的区别在于
1>.html更类似于innerHTML会打印标签
2> .text类似于innerText
19. 1>获取宽度高度: .width .height 不能获取padding附加的区域
2>可以获取padding 的区域: .innerWidth .innerHeight
3>可以获得border 的区域: .outerWidth .outerHeight
4>获取滚动出去的宽度高度:
$(window).scroll(function (){ $(window).scrollLeft})
5>获取窗口可视化区域的大小
$(window).resize(function(){$(window).width}))
offset是获得相对于页面的位置
相对于有定位的父元素位置
委托事件:.delegate(select,type,function)给父元素注册然后给子元素执行;
优点:
动态创建出来的元素也有事件,在点击时元素没有事件由于冒泡会触发被委托事件从而为创建出的元素注册事件;
当多个子元素要注册相同事件的时候,用委托事件让父元素只为被点击对象进行操作,从而节省空间;
注册事件有2种方式 .on(type ,select,function)
1>注册简单事件 .on(“click”,function)
2>注册委托事件 .on(“click”,“p”,function)
先执行自己的委托事件然后再执行自己的简单事件;
22.移除事件 .off(“type”)输入事件就移除这个事件,不输入就全部移除
23.事件的触发 .trigger(“type”)== .type可写click等 ();
24.阻止浏览器默认跳转
1> e.preventDefault();
2>阻止事件冒泡:e.stopPropagation();
3> return false; 阻止跳转和阻止冒泡;
25.避免多次触发使得出现bug用节流阀的思路,设置一个开关 在函数中判断开关然后关闭开关 再在另一个函数打开开关;
26. .delay(time) 延迟的时间 可以用在2个动画之间
27.五角星评分案例:
1>前面所有兄弟prevAll();
2>后面所有兄弟.nextAll();
28.遍历的两种方法:
1>for
2>.each (function(index,element){
$(element).css( , )});
$.noConflict 当使用多个库定义符号冲突时释放$的控制权 需要的时候再上网查
插件: 颜色渐变插件 懒加载
获得现有的年份
var d=new Date;
d.getYear()获得现在距离1900年的年数;
d.setYear(需要设置的年数,不是距离1900的年数)
d.toGMTstring()可以获得当前设置的时间;
day2城市选择案例中的selected;
day2 $(btn).click(function(){
*Var tex=$().val(获取$()中的值)
$(“
”
(直接创建li对象) ).text(tex)
(设置文本内容) })
day3 飞到顶部的小火箭:
由于只有Body 和html有scrollTop属性 window没有所以
$(“body,html”).aninmate({scrollTop:0});
==============================PHP=====================================
查询端口占用 #
每次改变Apache后用http-t 来测试是否OK
更改网页根目录是 找到httpd.conf 修改Document Root (记得复制过去后要改斜杆 )
添加虚拟机出现forbidden 时找到文件vhost中的 DocumentRoot,在下面添加
AllowOverride None
Options None
Require all granted
即可
2>添加虚拟机也要注意修改虚拟机Document Root
默认文档是:当客户端访问一个文件时默认返回的文档 可以在配置文件中修改 directoryindex来修改
阻止别人访问本机的其他文件目录可以把配置文件中的Options Indexes FollowSymLinks 中的Indexes 去掉;
虚拟主机,就是把一个网站分成多个网站
先在配置文件中解除主文件里的注释505行 Include conf/extra/httpd-dav.conf conf\extra\v中修改,每个虚拟主机必须配置ServerName 就是修改DocumentRoot“默认文件”;ServerName必须是自己购买的域名
宽字符集就是普通的文字 ,他有一套专门的api 都是mb_xxxx;需要载入模块后才能使用
# php -a 进入console
Php.ini 中的display_errors在开发阶段设置为On 在生产阶段设置为Off;(警告)
用if(isset($arr[$foo])) 可以判断是否有$foo这个键;用if($arr[$foo]) 也可以但是会警告不推荐
Empty() 和isset()的区别在于Empty()=!isset()|| arr=false;用empty()来识别别人提交的数据是否可以获取,或者有没有数据; *(‘0’==false ‘’==false)
In_array()和IndexOf的区别在于In_array()只是判断是否存在,不返回下标;
13.require()和include()都是载入文件的函数但是require一旦没有文件那么就不会执行,而include()和报警告并继续执行;(include一般用于载入部分html,require用于载入必要的代码文件)
用from action 提交给另一个PHP后用:
var_dump($_GET):用于接收URL地址中的数据(一般是GET发出的)
var_dump($_POST):用于接收请求体中的数据(一般是POST发出的 )
var_dump($_REQUEST):$_GET+$_POST;
GET和POST的使用在于到底是拿东西还是送东西(账号密码是送,筛选等的是拿)
15.在from的客户端中:(必须查询$_SERVER使用方法)
使用if[$_SERVER(‘REQUEST_METHOD’)===‘post/get’]可以判断是什么类型;
对action=“”使用$_SERVER [‘PHP_SELF’];?>”得到当前php的名字
将数据保存到文本中 file_put_contents (, ,FILE_APPEND)
表单处理的三个步骤:
接收并校验;
持久化(将数据保存到文件磁盘)
响应(服务端后台响应)
直接在地址栏输入地址以及用a标签的形式进入的是用GET的方式请求的,但是一旦点击注册就是用POST方式请求的 (见day'3 case1 :第一行PHP判断是否是POST 请求,如果是才执行接下来的PHP代码,为了让一开始的错误信息就直接显示出来;)
如果表单中有文件上传必须把method设置为“post”,把enctype设置为multipart/form-data,接收文件要使用全局变量$_FILES;
上传文件大小限制可以找php.ini 查找upload_max;修请求提交总文件的大小查找post_max_size;
字面量是代码中用来表述数据的一种手段,Json是一种基于字面量的语法;
Json 中属性必须用双引号包裹;
Json 中字符串必须用双引号包裹;
Json 中不允许使用注释;
Json 的解析用Json_decode($contain,//假如加入true 那么才是关联数组)
Eg: [
{ id:xxx ,name:xxx,email:xxx },
{ id:xxx ,name:xxx,email:xxx },
{ id:xxx ,name:xxx,email:xxx },
{ id:xxx ,name:xxx,email:xxx },
{ id:xxx ,name:xxx,email:xxx },
{ id:xxx ,name:xxx,email:xxx },
{ id:xxx ,name:xxx,email:xxx }
]
注册列表的步骤;(传到文件夹中)
清单;
1.1获取 json文件 file_get_contents();
1.2解析 json文件 $arr= json_decode();
1.3显示 json文件 foreach($arr as item){ $item[‘name’]}
服务端;
2.1表单的校验:
1.判断是不是post请求 $_SERVER[‘REQUEST_METHOD’]==='POST'调用函数;
2.使用函数让文件格式清楚使用if (empty($_POST[‘name’])){return;}来解决
2-1文件域是否存在if (empty($_POST[‘source])){return;}
2-2是否上传文件成功$source[‘error’]!==UPLOAD_ERR_OK;
2-3限制文件大小$source[‘size’]
2-4限制文件种类$source[‘type’]
$allowed_types = array('audio/mp3', 'audio/wma');
if (!in_array($source['type'], $allowed_types))
可以限制文件种类
可以选择多个文件
一个文本域上传多个文件的时候必须把name变成一个数组;
2-3更改上传目录 move_uploaded_file(临时路径($source['tmp_name']),$target)
注册表单:(传到数据库中)
1>复制注册表单静态页面必须注意form:
①form action=""method="post" enctype="multipart/form-data" autocomplete=“off”>
②有id的input要加name
③点击保存后查看network是否正常运行;
保存数据的路径一定用绝对路径
相对路径中的./代表当前目录 ../代表上级目录 传路径时要用substr()剪切
路径要用 . 拼接;
2>“”可以解析$id但是‘’不可以
写mysqli_query 的时候;$qurey = mysqli_query($coun," insert into users values (null,' $avatars' ,' $name' ,$gender,' $birthday' );" );
3>在选择性别的时候是select标签包含option标签,若要默认选择那么必须使用selected属性 为了判断是否和原来编辑前的值一样,必须用三目运算符。例如
男
注意的是selected 前面的空格必须存在才符合规则;
要删除或者是编辑指定的表单要在action后面加? 和判断的数值;
24.编辑表单:
时候需要更新原来是数据库,语句是update users set sex ='为' where id=3,要注意到id到底取什么值,这时就要在edit.php中的href中传Id值(在校验的过程中出错的时候会返回原来的页面,如果没有传id值那么前面那些需要get中id值的地方全部都会报错,所以必须传入id值) 由于有id值所以前面那些需要id值的函数可以执行而不报错,进行校验。
25.数据库的整体思路:
1>连接数据库 mysqli_connect("localhost","root","123","demo");
判断:if ($coun) {echo("连接成功");}else{exit("连接失败");}
字符:mysqli_set_charset($coun,'utf8');
2>查询数据库 mysqli_query($coun,"select * from users;");
判断:if (!$qurey) {exit("查询失败");}
遍历数据库 while ($row = mysqli_fetch_assoc($qurey)){var_dump($row);}
单条:$row = mysqli_fetch_assoc($qurey)
4>查询的话要释放结果集 mysqli_result($qurey);
5>炸桥 mysql_close($qurey);
25.表单案例中的思路!很重要!
总思路 :连接并检验,持久化(保存数据),响应(返回);
清单页面:index.php
1>连接数据库
2>查询数据库
3>遍历数据库(在html中遍历混合编码)
注册页面:
接收并校验文件
连接数据库
查询数据库
持久化(保存到数据库)
响应(跳转)
删除页面:
获取get后的id值
连接数据库
查询数据库(删除指定行)mysqli_query($con,delete from users where id=1;
响应 header(Location:XXX.php)
编辑页面:
1>获取get后的id值
2>连接数据库
3>获取数据库的值放在一个变量中;
4>修改html文件中的初始化value值;
5>在点击保存的时候在?后面加id值(因为要删除指定行,如果不传那么就无法在$_SERVER[ ‘ REQUEST_METHOD ’ ]=== ’ POST ’ )中获得当前的id值; )
25.pathinfo($_FILES[‘avatar’][‘name’],PATHINFO_EXTENSION);可以获得文件格式;
进行文件移动操作的时候(move_upload_file()),若想接收中文文件名字必须用iconv来转换中文编码为GBK编码 (iconv(‘utf-8’,’GBK’,$XXXX[‘name’]));
忽略报错:在PHP头error_reporting(E_ALL&~E_NOTICE)
解决无状态的方法就是使用cookie
①在php中使用setcookie来修改cookie
1.使用的方法(‘键’,’值’,’过期时间’,’path’,‘domian’);
2.使用$_COOKIE这个全局变量来获取cookie
3.单单只有一个键的时候是用来删除这个cookie的;
4.使用想同的键的时候会被覆盖;
5.同时由于cookie是在报文中被保存的所以可以修改heard里的Set-Cookie从而修改 或添加cookie;
②同时在js中也可以修改和获取cookie
1.获取:COOKIE.cookie(‘key’);
2.修改:COOKIE.cookie=‘key=value’
③如果有人伪造cookie来获取数据
1.加密(比较高级)
2.记总账:
2.1在使用之前必须要用session_start();
2.2使用$_SESSION[‘key’]='value';改变的是在session中的数据,用cookie可 以访问到但是由于这个cookie是一个随机编码,所以不能轻易获得相应session的 cookie编码;
2.3使用$_SESSION来获取session里的数值;
==============================AJAX=====================================
Ajax就是浏览器给我们提供的api,作用是操作网络,可以操作响应请求,对网络进行网络编程
AJAX 核心的 三个步骤
①安装浏览器 :var htr = new XMLHttpRequest;
②打开浏览器并输入地址 htr.open(‘GET’,‘http://study08.io/time.php’);
③敲回车访问: htr.sent();
涉及到AJAX的操作页面不能使用文件协议访问(file://XXXXX)
同一个网站下面就可以写相对或者绝对路径;
常用api:
获取当前的状态 xhr.readyState
获取状态的改变 xhr.onreadystatechange = function (){}
使用switch(xhr.readyState){case 2:;...} 来获取这些状态下应该做什么;
获取响应体 xhr.response 获取的结果会随着responseType变化而变化
获取响应体 xhr.responseText 获取字符串文本
获取全部的响应头 xhr.getAllResponseHeaders();
获取指定的响应头 xhr.getResponseHeader( ‘ date ’ );
获取响应的状态 xhr.status (200)
获取状态内容 xhr.statusText(OK)
不同状态代表的意义:
// 0.新建请求代理
// 1.open了一个对象
// 2.加载了响应头和响应行建立了连接
// 3.加载了响应体但是没有完全下载完毕
// 4.完全下载完毕
xhr.onload = function(){} 可以直接获取状态4时的情况(有兼容性问题)
设置open对象的响应头使用xhr.setRequestHeader
xhr.setRequestHeader(‘Foo’,‘bar’);
xhr.setRequestHeader(‘Content-Type’,‘application/x-www-form-urlencoded(根据不同的情况而改变)’)
AJAX的基本操作
var xhr = new XMLHttpRequest();
xhr.open("POST","ajax.php");
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send('valq=1&ss=2');
//同时还可以使用xhr.send(`valq=${ }&ss=${ }`);
//设置请求头
xhr.addEventListener('readystatechange',function(){
if(xhr.readyState!==4)return;
1console.log(xhr.readyState);
console.log(xhr.response);
console.log(xhr.responseText);
//responseText获取字符串文本
console.log(xhr.status);
console.log(xhr.statusText);
console.log(xhr.getResponseHeader('Content-type'));
console.log(xhr.getAllResponseHeaders());}
AJAX函数的封装需要封装成回调函数:ajax(method,url,params,done)
Done为函数
回调函数,当函数里面嵌套着函数,外面函数是无法获取里面函数的返回值的所以需要使用回调函数来解决;
function getTime( done ){
(function getThis(){
done ( Date.now() );
})();
}
getTime( function( time ){
console.log( time )
} )
其中里面的函数需要执行才可以,在这里我们使用自调用。同时done=function(time);
time的值为date.now()
AJAX解决跨域的问题可以使用JSONP,它是一种借助于动态创建script标签进行跨域请求的技巧
JSONP就是当script里的src属性引入的文件为PHP文件,但是返回的结果是JS;
从而将服务器想要给客户端发过去的数据发给客户端
==============================Vue======================================
v-for : v-for="item in list" 是循环list里的内容然后放入item中。
v-bind 特性被称为 指令 。指令带有前缀 v- ,以表示它们是 Vue 提供的特殊特性
input : 里的v-model="inputValue"的时候就是双向绑定了。
①this.inputValue :可以获得input中的值
v-on:click :事件使用v-on:click = 'func';func是要写在methods里的
MVC、MVP模式、MVVM设计模式的区别
①MVC:前端常用的设计模式
Model : 模型 (用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法)
View : 视图 (渲染页面)
Controller : 控制器 (M和V之间的连接器,用于控制应用程序的流程,及页面的业务逻辑)
MVC流程 :M-->V-->C--M...成一个循环的状态,MV可以直接联系,同时导致视图与控制器间过于紧密连接 。
②MVP模式 :MVC的改良模式 将 Controller 改名为 Presenter,同时改变了通信方向 。
此时M数据层和V视图层不能直接联系都得通过P来进行联通,修改视图可以不影响模型,主要的程序逻辑都在P层,缺点在于视图层和模型层的交互太过频繁。
③MVVM模式: 在vue中M层是模型层,V层是视图层,而Vue就是VM层,我们主要修改的方面在于V层和M层! MVVM模式和MVC模式类似, 主要目的是分离视图(View)和模型(Model)
前端的组件化:组件是页面的一个区域,组件也是一个实例,一个项目是由很多个组件组成的,也可以说是由很多个实例组成的
实例对象后面以$开头的是实例属性或实例方法例如 app.$el,app.$data
V ue的生命周期钩子:
大体分为四个部分分别为:
创建实例
b eforeCreate: function(){}
C reated:function(){}
渲染页面
beforeMount:function(){}
Mounted:function(){}
销毁实例
beforeDestroy:function(){}
D estroyed:function(){}
更新数据
beforeUpdate:function(){}
U pdated:function:function(){}
V ue的基础模板语法
以下三种都需要获取实例中data的数据,而且都可以使用js的语法书写内容。
插值表达式:在标签中{{ }}以这样的形式传入内容。
标签中的 v-text 属性 类似与js中的innerText 方法
标签中的v-html 属性 类似于js中的innerHTML方法
9 .重要 绑定样式的两种方式class和style。都有俩种写法,数组和对象!
(1):class="{样式名:决定是否出现样式名 }"
(2).:class="['样式名','样式名']"!通过methods中的函数调整。
(3):style="样式名"需要在data中用样式名输入Css
(4):style="[样式名,{fontSize:'20px'}],前面和第一种一样,后面对象可以直接输入CSS样式注意单引号
10.使用v-if,v-elseif ,v-else 条件渲染必须让他们连续出现,中间不可以存在其他DOM节点
else后面不存在变量直接书写!
使用v-if时由于 vue会尽量不更换DOM节点 ,如果有相同的大部分不会替换!如果需要在替换的时候清空那么需要在input后面添加key值,key值是任意的!
11.v-if和v-show的区别在于,当v-if为false的时候就会被销毁,为true重新创建,但是v-show就会保留,只是标签属性的display变成none从而隐藏
12.在列表渲染时:
(1)为了提升性能需要给循环的每一项提供:key值
(2)当:key值都是不相同时性能最优,而不是使用index作为key
(3)修改数据和同时改变渲染的方法:
① 通过数组的几个变异方法来改变数据渲染:pop,push,shift,unshift,sort,resver,
② 改变引用地址,即改变data中list的数据!(输入全部数据)
③ 使用vue.set(vm.list,"key","value")来改变list中那个key 的 value!
注意 :当我们修改数据的时候不能通过下标的形式修改数据的渲染,但是可以修改数据 (arr[4]="5");
13当存在多级的时候,例如table>tbody> child 组件child最后会与table同级。
解决的方法: table>tbody> ” child ” >。
模板占位符!可以让内容需要整体循环的外文本包括消失。如果使用那么外围div也会循环
当需要子组件中数据为独立的可以通过组件中的data返回一个对象来解决,如果使用template那么就会使用同一个数据
用ref引用修改DOM节点或者组件
如果使用 DOM节点的话修改的就是 DOM节点,获取的方式需要用this.$refs. ref(注:这里的ref就是body标签中ref=“”的值) 获取。
如果是组件的话就是获取组件!
父组件通过属性(:count="0")的方式向子组件传值
可以通过接收父组件属性的方式接收数据,但是如果没有:count没有 ':'传递过来的值是字符串
因为Vue中存在单项数据流的概念,所以直接改变的话会报错,父组件可以随机改变子组件值,但是子组件无法修改父组件的值,只能使用。
解决的方法是:在子组件中定义一个函数=父组件需要传输的值,此时点击修改的是子组件的值(例如:return{number:this.count})
子组件通过事件触发的方式向父组件传值!@click=“handleClick”
非父子组件之间的传值:
1 首先先设置一个全局组件
2 其次令Vue.prototype.bus = new Vue();
3 创建实例对象
4 在全局组件中设置模板template 同时设置时间click,由于是在全局组件中使用的方法所以methods写在全局组件中
5 然后该方法使用this.bus.$emit(),由于最后还是全局组件监听所以在这可以使用生命周期钩子 mounted,自动监听
6 监听时注意作用域!
19.Vue的插槽就是在组件中插入标签,然后在template中用slot进行引用,如果要指定标签在模板中的位置,那么就需要使用具名插槽。就是给slot加name值(在body标签中是” one ” > ,在模板的template中是使用 ` ” one ” >Default Value `)
20.Vue当中的作用域插槽:
(1).创建全局组件及其模板template
(2)当需要用到循环或者是需要用到各种的模板,则需要用到Vue中的作用域插槽
(3).在body中写出组件,同时其第一子元素必须是 同时必带属性slot-scope="属性(props)"即
(4).在template中输入值,属性.值 ,在使用的时侯必须保证组件中template模板存在:item=item属性,此时获取的item值将传输到props.item中
21.实像toggle装换;
第一种:
1.先写2个组件,再设置一个按钮,点击时切换type值
2.当v-if值为type时候就显示!
第二种:使用动态组件。
1.先写2个组件,再设置一个按钮,点击时切换type值
2.设置component标签 此时需要一个:is属性,:is的值是什么就返回什么组件!
================================ Vue的环境==================================
1.路由器(router):根据网址的不同返回不同的内容给用户
2.main.js是主页面,里面可以展示路由,组件,等等可以按照名字在src中寻找到,在此同时在使用前要用import引入。
3.引入fastclick依赖的 原因:
1、手动点击与真正触发 click 事件会存在300ms的延迟(ios上面最明显)
2、点击穿透问题(点击行为会穿透元素触发非父子关系元素的事件)
在cmd中的traval 书写命令:npm install fastclick --save来安装然后使用 import FastClick from 'fastclick' FastClick.attach(document.body)
4.在引入其他css文件的时候可以把它集中放在文件及中,然后使用main.js中的import来引用css
5.项目的开始引入的依赖
1.npm install stylus --save
2. npm install stylus-loader --save
6.使用 npm audit fix 修复漏洞之后,再运行 npm run dev 就 报错 :
解决: 最后找出是版本更新原因 。 删除node_modules后,在 npm install之后,运行 npm i -D [email protected] 更新版本
每个公司的reset.css是不同的,需要适当进行修改才能达到目的
使用图片的时候可以去iconfont查找
组件的优化:
在style设置varibles.styl全局css使用时需要引入,需要改变主题色可以直接在文件里改
@符号代表src目录这样可以优化代码,减少长度。在css中要引入其他css要使用~@
如果需要多次使用同一个路径可以把其代换成一个符号就是@代表src一样:
方法:点开build中的webpack.base.conf.js找到resolve下的alias来改
git的指令。
最基础的 文件上传
①git init //在当前项目目录中生成本地git管理,并建立一个隐藏.git目录
②git add . //添加当前目录中的所有文件到索引
③git commit -m "first commit" //提交到本地源码库,并附加提交注释
④git push
如果创建了分支使用
git pull 把线上的分支下载到本地
git checkout index(分支) //切换到该分支
git status //查看在那个分支
编码!
git add . => git commit -m “ index ” =>git push
git checkout master //切换的主分支
git merge (分支)origin/index-swiper //合并到master注:先要处于master
使用轮播图的时候可以下载插件 使用命令 [email protected] --save
官网https://github.com/surmon-china/vue-awesome-swiper
一般设置大小都先在reset.css中设置body大小接下来都使用rem
如果要让多的文字显示 ... 那么需要封装一个函数 mixins.styl到styles中,当发现没有用的时候就在父元素中flex:1 下面加一个min-width:0
内容是:
e llipsis()
overflow:hidden
white-space:now-rap
text-overflow:ellipsis
注意flex布局!很重要
在父元素写display:flex说明子元素开始弹性布局
flex-direction:column :主轴的方向横row纵column,向主轴方向收缩
justify-content:center: 主轴对齐方式,center居中,space-between两边
align-items:center :交叉轴对齐,盒子下边界对齐用flex-end向交叉轴反向收缩
flex-warp:warp(换行)/nowrap(默认)/warp-reserve :的时候就可以自动换行,同时由于有边框所有需要使用box-sizing:border-box,
加载图片的时候注意在外面包裹一层占位的div
H eight:0 padding-bottom: 22%
进行数据交互的时候可以使用axios它功能完善十分强大
安装的时候输入命令npm install axios --save
18.进行ajax请求的时候尽量不要一个一个组件请求可以在总界面进行请求!这样性能得以优化
19只有把一些静态的页面放在static页面中才可以在外部访问到
20.如果不想某些文件提交到线上就需要打开gitignore 把需要屏蔽的路径放上去
21.vue中存在一个转发的机制可以把对api下面的所有请求,转发到本地static中mock(自己建立的)文件下,即:点开config文件夹里的index.js文件,找到proxyTable更改成
proxyTable: {
'/api': {
target: 'http://localhost:8080',
pathRewrite: {
'^/api': '/static/mock'}
}}
首次进行ajax请求的过程
安装axios npm install axios --save
在主页Home引入axios import axios form ‘ axios ’
在static下创建文件,因为外部只能访问到这个文件
屏蔽上传到码云,找到gitignore 输入路径就可以
在Home中进行ajax请求:
生命周期函数mounted : function() { this.getHomeInfo()}
在methods中添加函数get HomeInfo(){
axios.get( ‘ 路径eg:/static/mock/index.json/ ’ )//请求数据
.then(this.getHomeInfoSucc())//获取数据成功
}
在methods中添加方法 this.getHomeInfoSucc(res){ console.log(res)}
在(5)②中的路径一般需要更改,换成/api/index.json此时需要使用vue中的一个转发的机制更改 config文件夹里的index.js文件,找到proxyTable更改。
首次进行ajax交互:
父组件设立要传输的data值为空
在组件标签属性设置值
在子组件用props接收记住 Key:String/Array...,不用放在data中,然后用this.值放置在组件上
(5)③中可以获得数据,由于之前设值为空,所以在这里先判断
if (res.ret && res.data) {
const data = res.data
this.city = data.city
.....
}
24.页面使用组件的时候自己的template中不要加其他标签,加组件标签就好
25.当存在float浮动的时候会场上BFC区域,需要在父元素使用overflow=hidden 解决
26.在准备访问class下 的class的时候,需要在写出2给class,一个作为父class,内容就是子class
27.当页面list没有设置display:hidden 的时候,多出来的部分会撑出去。设置了之后页面不能移动,此时需要引入 better-scroll
28.使用router-link标签的to属性可以跳转页面
29.在需要网络的一些图片的时候需要使用 iconfont 组件
30.如果要使用ajax必须使用网络环境,要么搭建本地服务器 要么就用subineServer插件,点击工具- subineServer-serverstart之后,点击文件右键viewinserver打开就可以了、
基本项目中使用的插件
1.懒加载
npm install --save lozad
var lozad = require ( 'lozad' )
标签中: < img class = "lozad" data-src = "image.png" />
J s中: const observer = lozad (); // lazy loads elements with default selector as '.lozad' observer. observe ();
2.vuex
npm install vuex --save
由于大型项目需要传输很多值,所以需要在src中添加文件store文件同时添加index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new vuex.Store({
state: {//state存放全局公用数据
city: '北京' } })
M ain.js中引入import store from './store'在new Vue 中传入store
==============================移动端================================
meta name="viewport" content="width=device-width,initial-scale=1.0" 解释
V iewport概念
通俗来讲就是移动设备上显示网页的那一个部分,一般来说移动端的浏览器会设定自己的viewport一般是980px或1024px,实际的网站可能会比这个大,就会在显示出滚动条
2.css中的1px和移动设备中1px的区别
在PC端中css的1px往往是为实际的物理像素1px。但是在移动端中的设备五花八门,例如早先的ipone3分辨率为320*480,后来新出的ipone屏幕升级为640*960但是尺寸没有发生改变。这时css中的1px就不为1个物理像素了。我们可以通过 window . devicePixelRatio 来获取css中1px和实际像素的比例,像刚刚ipone3 1px为一个物理像素,更新后为1px等于2给像素 。 ( window . devicePixelRatio = 2)
可以这么理解,由于 你 设备 分辨率增大了,但屏幕尺寸并没有变大多少,必须让css中的1px代表更多的物理像素,才能让1px的东西在屏幕上的大小与那些低分辨率的设备差不多,不然就会因为太小而看不清。
3. ppk大神关于viewPort理论中的三种表现方式
layout viewport : 浏览器默认的viewport,会出现滚动条
visual viewport : 浏览器可视化区域的大小(通过 window.innerWidth 获取)
ideal viewport : 不同设备由不用的ideal viewport
例如ipone的viewport值为320,意思是css中的320px就是苹果宽度的100%,不管是什么尺寸的苹果手机ideal viewport 都是相同的!安卓设备就比较五花八门了320 360 384等等。(http://viewportsizes.com可查询)
添加 就可以把viewport设置为
4.在iphone和ipad上,无论你给viewport设的宽的是多少,如果没有指定默认的缩放值,则iphone和ipad会自动计算这个缩放值,以达到当前页面不会出现横向滚动条(或者说viewport的宽度就是屏幕的宽度)的目的
5.媒体查询常见尺寸
@media screen and (min-width:1200px){ ... }/* 大型设备(大台式电脑,1200px 起) */
@media screen and (min-width:992px){ ... }/* 中型设备(台式电脑,992px 起) */
@media screen and (min-width:768px) { ... } /* 小型设备(平板电脑,768px 起) */
@media screen and (min-width:480px){ ... }/* 超小设备(手机,小于 768px) */
==============================mysql== ==================================
1.利用mysql_connect(‘127.0.0.1’,’root’,’password’,’demo’);
2.navicat中的增删改查
-- 查询
-- select id,age,sex from users
-- 如果产生通配符就会产生全表扫描
-- select * from users
-- 语句可以选择一个列或者一个具体的值
-- select 1 from users
-- 增加
-- insert into users values(null,'小红',18,'女')
-- insert into users(name,age,sex) values('小白',18,'男')
-- 删除
-- delete from users where id<=2
-- delete from users where id<=2 and sex='女'
-- delete from users where id<=2,sex='女'
-- delete from users where id in(1,2,3,4,)
-- 修改
-- update users set sex ='为' where id=3
-- update users set sex=‘1’,age=‘2’ where id in(1,2,3,4);
bootstrap中 :
col-md-5 mb-3 代表 form的长 宽
Container表示居中
mx-5 my-5 代表margin right和margin top;
px-5 py-5 代表padding right和 padding top;
Form
1.form-control 代表from的标准格式;
2.form-row 代表from和label同一行 form-ground 代表换行;
Btn
btn btn-danger 红色;
Btn btn-success 绿色
你可能感兴趣的:(笔记)
日更006 终极训练营day3
懒cici
人生创业课(2)今天的主题:学习方法一:遇到有用的书,反复读,然后结合自身实际,列践行清单,不要再写读书笔记思考这本书与我有什么关系,我在哪些地方能用到,之后我该怎么用方法二:读完书没映像怎么办?训练你的大脑,方法:每读完一遍书,立马合上书,做一场分享,几分钟都行对自己的学习要求太低,要逼自己方法三:学习深度不够怎么办?找到细分领域的榜样,把他们的文章、书籍、产品都体验一遍,成为他们的超级用户,向
【花了N长时间读《过犹不及》,不断练习,可以越通透】
君君Love
我已经记不清花了多长时间去读《过犹不及》,读书笔记都写了42页,这算是读得特别精细的了。是一本难得的好书,虽然书中很多内容和圣经吻合,我不是基督徒,却觉得这样的文字值得细细品味,和我们的生活息息相关。我是个界线建立不牢固的人,常常愧疚,常常害怕他人的愤怒,常常不懂拒绝,还有很多时候表达不了自己真实的感受,心里在说不嘴里却在说好……这本书给我很多的启示,让我学会了怎样去建立属于自己的清晰的界限。建立
基于redis的Zset实现作者的轻量级排名
周童學
Java redis 数据库 缓存
基于redis的Zset实现轻量级作者排名系统在今天的技术架构中,Redis是一种广泛使用的内存数据存储系统,尤其在需要高效检索和排序的场景中表现优异。在本篇博客中,我们将深入探讨如何使用Redis的有序集合(ZSet)构建一个高效的笔记排行榜系统,并提供相关代码示例和详细的解析。1.功能背景与需求假设我们有一个笔记分享平台,用户可以发布各种笔记,系统需要根据用户发布的笔记数量来生成一个实时更新的
常规笔记本和加固笔记本的区别
luchengtech
电脑 三防笔记本 加固计算机 加固笔记本
在现代科技产品中,笔记本电脑因其便携性和功能性被广泛应用。根据使用场景和需求的不同,笔记本可分为常规笔记本和加固笔记本,二者在多个方面存在显著区别。适用场景是区分二者的重要标志。常规笔记本主要面向普通消费者和办公人群,适用于家庭娱乐、日常办公、学生学习等相对稳定的室内环境。比如,人们在家用它追剧、处理文档,学生在教室用它完成作业。而加固笔记本则专为特殊行业设计,像军事、野外勘探、工业制造、交通运输
第八课: 写作出版你最关心的出书流程和市场分析(无戒学堂复盘)
人在陌上
今天是周六,恰是圣诞节。推掉了两个需要凑腿的牌局,在一个手机,一个笔记本,一台电脑,一杯热茶的陪伴下,一个人静静地回听无戒学堂的最后一堂课。感谢这一个月,让自己的习惯开始改变,至少,可以静坐一个下午而不觉得乏味枯燥难受了,要为自己点个赞。我深知,这最后一堂课的内容,以我的资质和毅力,可能永远都用不上。但很明显,无戒学堂是用了心的,毕竟,有很多优秀学员,已经具备了写作能力,马上就要用到这堂课的内容。
python笔记14介绍几个魔法方法
抢公主的大魔王
python python
python笔记14介绍几个魔法方法先声明一下各位大佬,这是我的笔记。如有错误,恳请指正。另外,感谢您的观看,谢谢啦!(1).__doc__输出对应的函数,类的说明文档print(print.__doc__)print(value,...,sep='',end='\n',file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.std
《感官品牌》读书笔记 1
西红柿阿达
原文:最近我在东京街头闲逛时,与一位女士擦肩而过,我发现她的香水味似曾相识。“哗”的一下,记亿和情感立刻像潮水般涌了出来。这个香水味把我带回了15年前上高中的时候,我的一位亲密好友也是用这款香水。一瞬间,我呆站在那里,东京的街景逐渐淡出,取而代之的是我年少时的丹麦以及喜悦、悲伤、恐惧、困惑的记忆。我被这熟悉的香水味征服了。感想:感官是有记忆的,你所听到,看到,闻到过的有代表性的事件都会在大脑中深深
我不想再当知识的搬运工
楚煜楚尧
因为学校课题研究的需要,这个暑假我依然需要完成一本书的阅读笔记。我选的是管建刚老师的《习课堂十讲》。这本书,之前我读过,所以重读的时候,感到很亲切,摘抄起来更是非常得心应手。20页,40面,抄了十天,终于在今天大功告成了。这对之前什么事都要一拖再拖的我来说,是破天荒的改变。我发现至从认识小尘老师以后,我的确发生了很大的改变。遇到必须做却总是犹豫不去做的事,我学会了按照小尘老师说的那样,在心里默默数
20210517坚持分享53天读书摘抄笔记 非暴力沟通——爱自己
f79a6556cb19
让生命之花绽放在赫布·加德纳(HerbGardner)编写的《一千个小丑》一剧中,主人公拒绝将他12岁的外甥交给儿童福利院。他郑重地说道:“我希望他准确无误地知道他是多么特殊的生命,要不,他在成长的过程中将会忽视这一点。我希望他保持清醒,并看到各种奇妙的可能。我希望他知道,一旦有机会,排除万难给世界一点触动是值得的。我还希望他知道为什么他是一个人,而不是一张椅子。”然而,一旦负面的自我评价使我们看
Unity学习笔记1
zy_777
通过一个星期的简单学习,初步了解了下unity,unity的使用,以及场景的布局,UI,以及用C#做一些简单的逻辑。好记性不如烂笔头,一些关键帧还是记起来比较好,哈哈,不然可能转瞬即逝了,(PS:纯小白观点,unity大神可以直接忽略了)一:MonoBehaviour类的初始化1,Instantiate()创建GameObject2,通过Awake()和Start()来做初始化3,Update、L
大数据技术笔记—spring入门
卿卿老祖
篇一spring介绍spring.io官网快速开始Aop面向切面编程,可以任何位置,并且可以细致到方法上连接框架与框架Spring就是IOCAOP思想有效的组织中间层对象一般都是切入service层spring组成前后端分离已学方式,前后台未分离:Spring的远程通信:明日更新创建第一个spring项目来源:科多大数据
Django学习笔记(一)
学习视频为:pythondjangoweb框架开发入门全套视频教程一、安装pipinstalldjango==****检查是否安装成功django.get_version()二、django新建项目操作1、新建一个项目django-adminstartprojectproject_name2、新建APPcdproject_namedjango-adminstartappApp注:一个project
python学习笔记(汇总)
朕的剑还未配妥
python学习笔记整理 python 学习 开发语言
文章目录一.基础知识二.python中的数据类型三.运算符四.程序的控制结构五.列表六.字典七.元组八.集合九.字符串十.函数十一.解决bug一.基础知识print函数字符串要加引号,数字可不加引号,如print(123.4)print('小谢')print("洛天依")还可输入表达式,如print(1+3)如果使用三引号,print打印的内容可不在同一行print("line1line2line
Redis 分布式锁深度解析:过期时间与自动续期机制
爱恨交织围巾
分布式事务 redis 分布式 数据库 微服务 学习 go
Redis分布式锁深度解析:过期时间与自动续期机制在分布式系统中,Redis分布式锁的可靠性很大程度上依赖于对锁生命周期的管理。上一篇文章我们探讨了分布式锁的基本原理,今天我们将聚焦于一个关键话题:如何通过合理设置过期时间和实现自动续期机制,来解决分布式锁中的死锁与锁提前释放问题。一、为什么过期时间是分布式锁的生命线?你的笔记中提到"服务挂掉时未删除锁可能导致死锁",这正是过期时间要解决的核心问题
08.学习闭环三部曲:预习、实时学习、复习
0058b195f4dc
人生就是一本效率手册,你怎样对待时间,时间就会给你同比例的回馈。单点突破法。预习,实时学习,复习。1、预习:凡事提前【计划】(1)前一晚设置三个当日目标。每周起始于每周日。(2)提前学习。预习法进行思考。预不预习效果相差20%,预习法学会提问。(3)《学会提问》。听电子书。2.实时学习(1)(10%)相应场景,思维导图,快速笔记。灵感笔记。(2)大纲,基本记录,总结篇。3.复习法则,(70%),最
《如何写作》文心读书笔记
逆熵反弹力
《文心》这本书的文体是以讲故事的形式来讲解如何写作的,读起来不会觉得刻板。读完全书惊叹大师的文笔如此之好,同时感叹与此书相见恨晚。工作了几年发现表达能力在生活中越来越重要,不管是口语还是文字上的表达。有时候甚至都不能把自己想说的东西表达清楚,平时也有找过一些书来看,想通过提升自己的阅读量来提高表达能力。但是看了这么久的书发现见效甚微,这使得我不得不去反思,该怎么提高表达能力。因此打算从写作入手。刚
SQL笔记纯干货
AI入门修炼
oracle 数据库 sql
软件:DataGrip2023.2.3,phpstudy_pro,MySQL8.0.12目录1.DDL语句(数据定义语句)1.1数据库操作语言1.2数据表操作语言2.DML语句(数据操作语言)2.1增删改2.2题2.3备份表3.DQL语句(数据查询语言)3.1查询操作3.2题一3.3题二4.多表详解4.1一对多4.2多对多5.多表查询6.窗口函数7.拓展:upsert8.sql注入攻击演示9.拆表
《4D卓越团队》习书笔记 第十六章 创造力与投入
Smiledmx
《4D卓越团队-美国宇航局的管理法则》(查理·佩勒林)习书笔记第十六章创造力与投入本章要点:务实的乐观不是盲目乐观,而是带来希望的乐观。用真相激起希望吉姆·科林斯在《从优秀到卓越》中写道:“面对残酷的现实,平庸的公司选择解释和逃避,而不是正视。”创造你想要的项目1.你必须从基于真相的事实出发。正视真相很难,逃避是人类的本性。2.面对现实,你想创造什么?-我想利用现有资源创造一支精干、高效、积极的橙
2020-12-10
生活有鱼_727f
今日汇总:1.学习了一只舞蹈2.专业知识抄了一遍3.讲师训作业完成今日不足之处:1.时间没管理好,浪费了很多时间到现在才做完明日必做:1.讲师训作业完成2.群消息做好笔记3.宽带安装
【Druid】学习笔记
fixAllenSun
学习 笔记 oracle
【Druid】学习笔记【一】简介【1】简介【2】数据库连接池(1)能解决的问题(2)使用数据库连接池的好处【3】监控(1)监控信息采集的StatFilter(2)监控不影响性能(3)SQL参数化合并监控(4)执行次数、返回行数、更新行数和并发监控(5)慢查监控(6)Exception监控(7)区间分布(8)内置监控DEMO【4】Druid基本配置参数介绍【5】Druid相比于其他数据库连接池的优点
微信公众号写作:如何通过文字变现?
氧惠爱高省
微信公众号已成为许多人分享知识、表达观点的重要平台。随着自媒体的发展,越来越多的人开始关注微信公众号上写文章如何挣钱的问题。本文将详细探讨微信公众号写作的盈利模式,帮助广大写作者实现文字变现的梦想。公众号流量主就找善士导师(shanshi2024)公众号:「善士笔记」主理人,《我的亲身经历,四个月公众号流量主从0到日入过万!》公司旗下管理800+公众号矩阵账号。代表案例如:爸妈领域、职场道道、国学
流利说懂你英语笔记要点句型·核心课·Level 8·Unit 3·Part 2·Video 1·Healing Architecture 1
羲之大鹅video
HealingArchitecture1EveryweekendforaslongasIcanremember,myfatherwouldgetuponaSaturday,putonawornsweatshirtandhe'dscrapeawayatthesqueakyoldwheelofahousethatwelivedin.ps:从我记事起,每个周末,我父亲都会在周六起床,穿上一件破旧的运动衫
java学习笔记8
幸福,你等等我
学习 笔记 java
一、异常处理Error:错误,程序员无法处理,如OOM内存溢出错误、内存泄漏...会导出程序崩溃1.异常:程序中一些程序自身处理不了的特殊情况2.异常类Exception3.异常的分类:(1).检查型异常(编译异常):在编译时就会抛出的异常(代码上会报错),需要在代码中编写处理方式(和程序之外的资源访问)直接继承Exception(2).运行时异常:在代码运行阶段可能会出现的异常,可以不用明文处理
2025.07 Java入门笔记01
殷浩焕
笔记
一、熟悉IDEA和Java语法(一)LiuCourseJavaOOP1.一直在用C++开发,python也用了些,Java是真的不熟,用什么IDE还是问的同事;2.一开始安装了jdk-23,拿VSCode当编辑器,在cmd窗口编译运行,也能玩;但是想正儿八经搞项目开发,还是需要IDE;3.安装了IDEA社区版:(1)IDE通常自带对应编程语言的安装包,例如IDEA自带jbr-21(和jdk是不同的
Java注解笔记
m0_65470938
java 开发语言
一、什么是注解Java注解又称Java标注,是在JDK5时引入的新特性,注解(也被称为元数据)Javaa注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程元素类、方法、成员变量等)进行关联二、注解的应用1.生成文档这是最常见的,也是iava最早提供的注解2.在编译时进行格式检查,如@Overide放在方法前,如果你这个方法并不是看盖了超类Q方法,则编译时就能检查
Java 笔记 transient 用法
transient关键字用于标记不希望被序列化(Serialization)的字段。序列化是指将对象的状态保存到字节流中,以便将其传输或存储。当使用如ObjectOutputStream进行序列化时,transient修饰的字段将不会被序列化。✅1.使用场景避免序列化敏感信息privatetransientStringpassword;某些字段不需要持久化(如缓存、临时数据)privatetran
Java 笔记 lambda
五行缺弦
Java笔记 java 笔记
✅Lambda基本语法(parameters)->expression或(parameters)->{statements}//无参数Runnabler=()->System.out.println("Hello");//单个参数(小括号可省略)Consumerc=s->System.out.println(s);//多参数+多语句Comparatorcomp=(a,b)->{System.out
【208】《班级管理课》读书感悟(一百零五)2023-07-23
南风如我意
-----------《班级管理课》读书感悟四文/李现风2023年读书笔记读书笔记以以下三个出发点为目的:一、书中的思想,提升自己的教育理念;二、书中的值得借鉴的做法,提升自己的教育技巧;三、书中的美句,有鉴于哲理性的句子,提升自己文章的语言魅力和教育文化水准。读《班级管理课》作者陈宇读书感悟四:【书目】《班级管理课》【页数】第70页第87页【阅读内容(摘录)】第四课开学一个月:班级常规工作正常运
3步搞定群晖NAS Synology Drive远程同步Obsidian笔记
文章目录1.简介1.1软件特色演示:2.使用免费群晖虚拟机搭建群晖SynologyDrive服务,实现局域网同步2.1安装并设置SynologyDrive套件2.1局域网内同步文件测试3.内网穿透群晖SynologyDrive,实现异地多端同步3.1安装Cpolar步骤4.实现固定TCP地址同步1.简介之前我们介绍过如何免费多端同步Zotero科研文献管理软件,使用了群晖NAS虚拟机和WebDav
R语言笔记Day1(排序、筛选以及分类汇总))
养猪场小老板
一、排序1、单变量序列排序2、数据表(矩阵)排序二、筛选三、分类汇总一、排序1、单变量序列排序rank、sort和order函数>aa[1]315#rank用来计算序列中每个元素的秩#这里的“秩”可以理解为该元素在序列中由小到大排列的次序#上面例子给出的序列[3,1,5]中,1最小,5最大,3居中#于是1的秩为1,3的秩为2,5的秩为3,(3,1,5)对应的秩的结果就是(2,1,3)>rank(a
apache 安装linux windows
墙头上一根草
apache inux windows
linux安装Apache 有两种方式一种是手动安装通过二进制的文件进行安装,另外一种就是通过yum 安装,此中安装方式,需要物理机联网。以下分别介绍两种的安装方式
通过二进制文件安装Apache需要的软件有apr,apr-util,pcre
1,安装 apr 下载地址:htt
fill_parent、wrap_content和match_parent的区别
Cb123456
match_parent fill_parent
fill_parent、wrap_content和match_parent的区别:
1)fill_parent
设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。
2) wrap_conte
网页自适应设计
天子之骄
html css 响应式设计 页面自适应
网页自适应设计
网页对浏览器窗口的自适应支持变得越来越重要了。自适应响应设计更是异常火爆。再加上移动端的崛起,更是如日中天。以前为了适应不同屏幕分布率和浏览器窗口的扩大和缩小,需要设计几套css样式,用js脚本判断窗口大小,选择加载。结构臃肿,加载负担较大。现笔者经过一定时间的学习,有所心得,故分享于此,加强交流,共同进步。同时希望对大家有所
[sql server] 分组取最大最小常用sql
一炮送你回车库
SQL Server
--分组取最大最小常用sql--测试环境if OBJECT_ID('tb') is not null drop table tb;gocreate table tb( col1 int, col2 int, Fcount int)insert into tbselect 11,20,1 union allselect 11,22,1 union allselect 1
ImageIO写图片输出到硬盘
3213213333332132
java image
package awt;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imagei
自己的String动态数组
宝剑锋梅花香
java 动态数组 数组
数组还是好说,学过一两门编程语言的就知道,需要注意的是数组声明时需要把大小给它定下来,比如声明一个字符串类型的数组:String str[]=new String[10]; 但是问题就来了,每次都是大小确定的数组,我需要数组大小不固定随时变化怎么办呢? 动态数组就这样应运而生,龙哥给我们讲的是自己用代码写动态数组,并非用的ArrayList 看看字符
pinyin4j工具类
darkranger
.net
pinyin4j工具类Java工具类 2010-04-24 00:47:00 阅读69 评论0 字号:大中小
引入pinyin4j-2.5.0.jar包:
pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获取各种格式和需求的拼音,功能强悍,下面看看如何使用pinyin4j。
本人以前用AscII编码提取工具,效果不理想,现在用pinyin4j简单实现了一个。功能还不是很完美,
StarUML学习笔记----基本概念
aijuans
UML建模
介绍StarUML的基本概念,这些都是有效运用StarUML?所需要的。包括对模型、视图、图、项目、单元、方法、框架、模型块及其差异以及UML轮廓。
模型、视与图(Model, View and Diagram)
&
Activiti最终总结
avords
Activiti id 工作流
1、流程定义ID:ProcessDefinitionId,当定义一个流程就会产生。
2、流程实例ID:ProcessInstanceId,当开始一个具体的流程时就会产生,也就是不同的流程实例ID可能有相同的流程定义ID。
3、TaskId,每一个userTask都会有一个Id这个是存在于流程实例上的。
4、TaskDefinitionKey和(ActivityImpl activityId
从省市区多重级联想到的,react和jquery的差别
bee1314
jquery UI react
在我们的前端项目里经常会用到级联的select,比如省市区这样。通常这种级联大多是动态的。比如先加载了省,点击省加载市,点击市加载区。然后数据通常ajax返回。如果没有数据则说明到了叶子节点。 针对这种场景,如果我们使用jquery来实现,要考虑很多的问题,数据部分,以及大量的dom操作。比如这个页面上显示了某个区,这时候我切换省,要把市重新初始化数据,然后区域的部分要从页面
Eclipse快捷键大全
bijian1013
java eclipse 快捷键
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+En
js 笔记 函数
征客丶
JavaScript
一、函数的使用
1.1、定义函数变量
var vName = funcation(params){
}
1.2、函数的调用
函数变量的调用: vName(params);
函数定义时自发调用:(function(params){})(params);
1.3、函数中变量赋值
var a = 'a';
var ff
【Scala四】分析Spark源代码总结的Scala语法二
bit1129
scala
1. Some操作
在下面的代码中,使用了Some操作:if (self.partitioner == Some(partitioner)),那么Some(partitioner)表示什么含义?首先partitioner是方法combineByKey传入的变量,
Some的文档说明:
/** Class `Some[A]` represents existin
java 匿名内部类
BlueSkator
java匿名内部类
组合优先于继承
Java的匿名类,就是提供了一个快捷方便的手段,令继承关系可以方便地变成组合关系
继承只有一个时候才能用,当你要求子类的实例可以替代父类实例的位置时才可以用继承。
在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类。
内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相
盗版win装在MAC有害发热,苹果的东西不值得买,win应该不用
ljy325
游戏 apple windows XP OS
Mac mini 型号: MC270CH-A RMB:5,688
Apple 对windows的产品支持不好,有以下问题:
1.装完了xp,发现机身很热虽然没有运行任何程序!貌似显卡跑游戏发热一样,按照那样的发热量,那部机子损耗很大,使用寿命受到严重的影响!
2.反观安装了Mac os的展示机,发热量很小,运行了1天温度也没有那么高
&nbs
读《研磨设计模式》-代码笔记-生成器模式-Builder
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示(GoF)
* 个人理解:
* 构建一个复杂的对象,对于创建者(Builder)来说,一是要有数据来源(rawData),二是要返回构
JIRA与SVN插件安装
chenyu19891124
SVN jira
JIRA安装好后提交代码并要显示在JIRA上,这得需要用SVN的插件才能看见开发人员提交的代码。
1.下载svn与jira插件安装包,解压后在安装包(atlassian-jira-subversion-plugin-0.10.1)
2.解压出来的包里下的lib文件夹下的jar拷贝到(C:\Program Files\Atlassian\JIRA 4.3.4\atlassian-jira\WEB
常用数学思想方法
comsci
工作
对于搞工程和技术的朋友来讲,在工作中常常遇到一些实际问题,而采用常规的思维方式无法很好的解决这些问题,那么这个时候我们就需要用数学语言和数学工具,而使用数学工具的前提却是用数学思想的方法来描述问题。。下面转帖几种常用的数学思想方法,仅供学习和参考
函数思想
把某一数学问题用函数表示出来,并且利用函数探究这个问题的一般规律。这是最基本、最常用的数学方法
pl/sql集合类型
daizj
oracle 集合 type pl/sql
--集合类型
/*
单行单列的数据,使用标量变量
单行多列数据,使用记录
单列多行数据,使用集合(。。。)
*集合:类似于数组也就是。pl/sql集合类型包括索引表(pl/sql table)、嵌套表(Nested Table)、变长数组(VARRAY)等
*/
/*
--集合方法
&n
[Ofbiz]ofbiz初用
dinguangx
电商 ofbiz
从github下载最新的ofbiz(截止2015-7-13),从源码进行ofbiz的试用
1. 加载测试库
ofbiz内置derby,通过下面的命令初始化测试库
./ant load-demo (与load-seed有一些区别)
2. 启动内置tomcat
./ant start
或
./startofbiz.sh
或
java -jar ofbiz.jar
&
结构体中最后一个元素是长度为0的数组
dcj3sjt126com
c gcc
在Linux源代码中,有很多的结构体最后都定义了一个元素个数为0个的数组,如/usr/include/linux/if_pppox.h中有这样一个结构体: struct pppoe_tag { __u16 tag_type; __u16 tag_len; &n
Linux cp 实现强行覆盖
dcj3sjt126com
linux
发现在Fedora 10 /ubutun 里面用cp -fr src dest,即使加了-f也是不能强行覆盖的,这时怎么回事的呢?一两个文件还好说,就输几个yes吧,但是要是n多文件怎么办,那还不输死人呢?下面提供三种解决办法。 方法一
我们输入alias命令,看看系统给cp起了一个什么别名。
[root@localhost ~]# aliasalias cp=’cp -i’a
Memcached(一)、HelloWorld
frank1234
memcached
一、简介
高性能的架构离不开缓存,分布式缓存中的佼佼者当属memcached,它通过客户端将不同的key hash到不同的memcached服务器中,而获取的时候也到相同的服务器中获取,由于不需要做集群同步,也就省去了集群间同步的开销和延迟,所以它相对于ehcache等缓存来说能更好的支持分布式应用,具有更强的横向伸缩能力。
二、客户端
选择一个memcached客户端,我这里用的是memc
Search in Rotated Sorted Array II
hcx2013
search
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given ta
Spring4新特性——更好的Java泛型操作API
jinnianshilongnian
spring4 generic type
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装JDK
liuxingguome
centos
1、行卸载原来的:
[root@localhost opt]# rpm -qa | grep java
tzdata-java-2014g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
[root@localhost
二分搜索专题2-在有序二维数组中搜索一个元素
OpenMind
二维数组 算法 二分搜索
1,设二维数组p的每行每列都按照下标递增的顺序递增。
用数学语言描述如下:p满足
(1),对任意的x1,x2,y,如果x1<x2,则p(x1,y)<p(x2,y);
(2),对任意的x,y1,y2, 如果y1<y2,则p(x,y1)<p(x,y2);
2,问题:
给定满足1的数组p和一个整数k,求是否存在x0,y0使得p(x0,y0)=k?
3,算法分析:
(
java 随机数 Math与Random
SaraWon
java Math Random
今天需要在程序中产生随机数,知道有两种方法可以使用,但是使用Math和Random的区别还不是特别清楚,看到一篇文章是关于的,觉得写的还挺不错的,原文地址是
http://www.oschina.net/question/157182_45274?sort=default&p=1#answers
产生1到10之间的随机数的两种实现方式:
//Math
Math.roun
oracle创建表空间
tugn
oracle
create temporary tablespace TXSJ_TEMP
tempfile 'E:\Oracle\oradata\TXSJ_TEMP.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent m
使用Java8实现自己的个性化搜索引擎
yangshangchuan
java superword 搜索引擎 java8 全文检索
需要对249本软件著作实现句子级别全文检索,这些著作均为PDF文件,不使用现有的框架如lucene,自己实现的方法如下:
1、从PDF文件中提取文本,这里的重点是如何最大可能地还原文本。提取之后的文本,一个句子一行保存为文本文件。
2、将所有文本文件合并为一个单一的文本文件,这样,每一个句子就有一个唯一行号。
3、对每一行文本进行分词,建立倒排表,倒排表的格式为:词=包含该词的总行数N=行号