首页
朋友圈
留言板
关于
Search
1
基于Vue和DataV的数据可视化模板
1828 阅读
2
阿里云盘来了(附带内测码)
882 阅读
3
玛莉嘉 原视频
815 阅读
4
自律
735 阅读
5
CG《目标》完整版
631 阅读
技术分享
博客
大数据
前端
生活
资源分享
Search
标签搜索
typecho
PHP
数据分析
博客
大数据
资源分享
Hadoop
日常分享
小程序源码
免费分享
css
前端
HDFS
阿里云盘
面试题
每日一题
技术分享
Chrome
开源项目
大数据可视化
木子卜
累计撰写
59
篇文章
累计收到
97
条评论
首页
栏目
技术分享
博客
大数据
前端
生活
资源分享
页面
朋友圈
留言板
关于
搜索到
59
篇与
木子卜
的结果
2021-03-23
阿里云盘—福利码
阿里云盘如今开始公测了,下载速度飞一般的快,想想某盘几k的速度就赶紧卸载吧。阿里云盘许多人也领到1t或2t的免费空间,但是也不想安于现状,下边有福利码,想要的就那去吧。实测▎阿里云盘福利兑换码(已更新)福利码1:上云上阿里云 500G福利码2:扫地僧头发多 500G福利码3:戴老师爱较真 500G福利码4:飞跃彩虹 320G福利码5:知识就是力量 200G福利码6:知识需要容量 200G福利码7:陈泥玛评测 200G福利码8:yangyi 200G福利码9:天涯历知幸 200G福利码10:江宁婆婆 200G福利码11:科技中国 200G福利码12:手机中国 200G福利码13:资深盘友 200G福利码14: 我爱爱范儿 200G福利码15:午后狂睡 200G福利码16:巴巴带你扩容 500G福利码17:阿里云购爆款 500G福利码18:达摩院招保洁 500G福利码19:寄快递用裹裹 500G福利码20:发言人求来的 500G福利码21:发言人送你的 500G福利码22:许愿不要过气 500G每天最多只能兑换3次,记得收藏本网站。
2021年03月23日
157 阅读
4 评论
4 点赞
JavaScript每日一题02
这是一个从基础到进阶的JavaScript问题列表,题源来自Github的 JavaScriptQuestions,有28K star。这个题库从基础到进阶,可以测试你有多了解 JavaScript,刷新你的知识,或者帮助你的 coding 面试!上一期答案:答案: D通过throw语句,我么可以创建自定义错误。而通过它,我们可以抛出异常。异常可以是一个字符串, 一个 数字, 一个 布尔类型 或者是一个 对象。在本例中,我们的异常是字符串'Hello world'.本期题目输出是什么?function Car() { this.make = "Lamborghini"; return { make: "Maserati" }; } const myCar = new Car(); console.log(myCar.make);A: "Lamborghini"B: "Maserati"C: ReferenceErrorD: TypeError请在评论中说出你的解答(答案和解析)。答案在下一期。
2021年03月21日
7 阅读
0 评论
1 点赞
2021-03-20
JavaScript每日一题01
这是一个从基础到进阶的JavaScript问题列表,题源来自Github的 JavaScriptQuestions,有28K star。这个题库从基础到进阶,可以测试你有多了解 JavaScript,刷新你的知识,或者帮助你的 coding 面试!这是一个从基础到进阶的JavaScript问题列表,题源来自Github的 JavaScriptQuestions,有28K star。这个题库从基础到进阶,可以测试你有多了解 JavaScript,刷新你的知识,或者帮助你的 coding 面试!输出是什么?function greeting() { throw "Hello world!"; } function sayHi() { try { const data = greeting(); console.log("It worked!", data); } catch (e) { console.log("Oh no an error:", e); } } sayHi(); A: "It worked! Hello world!"B: "Oh no an error: undefinedC: SyntaxError: can only throw Error objectsD: "Oh no an error: Hello world!D: "Oh no an error: Hello world!请在评论中说出你的解答(答案和解析)。请在下一期查看答案。
2021年03月20日
21 阅读
0 评论
2 点赞
2021-03-11
关于QQ官方api
1.QQ 头像接口,imgtype 参数值为 1 到 4https://ssl.ptlogin2.qq.com/getface?imgtype=4&uin=QQ 号码2.QQ 群头像接口http://p.qlogo.cn/gh/QQ 群号码 / QQ 群号码 / 100/3.QQ 空间背景音乐接口http://qzone-music.qq.com/fcg-bin/cgi_playlist_xml.fcg?g_tk=&json=1&uin=QQ 号码4.QQ 群设置接口,bkn 自己获取http://qinfo.clt.qq.com/cgi-bin/ ... ing_v2?gc=&bkn = 这里是 bkn5.QQ 个人信息接口,bkn 自己获取https://qun.qq.com/cgi-bin/qunwelcome/myinfo?callback=?&bkn=bkn 值获取:先从 cookie 中取 skeyC# 代码:{ var hash = 5381; for (int i = 0, len = skey.Length; i < len; ++i) hash += (hash << 5) + (int)skey[i]; return hash & 2147483647; }6.QQ 空间头像接口http://qlogo3.store.qq.com/qzone/QQ 号 / QQ 号 / 1007.QQ 好友列表https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list?bkn=8.QQ 群列表https://qun.qq.com/cgi-bin/qun_mgr/get_group_list?bkn=9.QQ 群列表 (简略信息)http://qun.qzone.qq.com/cgi-bin/get_group_list?g_tk=10.QQ 群成员获取接口https://qun.qq.com/cgi-bin/qun_mgr/search_group_members?gc=&st=&end=&sort=0&bkn=gc 由 qq 群列表返回 json 中获取,st 为起始位置由 0 开始,end 为终止位置由 0 开始11.QQ 修改群名片POST:https://qinfo.clt.qq.com/cgi-bin/qun_info/set_group_card提交信息 u=&name=&gc=&bkn=u 为本人 QQ,name 为欲修改为的名字(需要 url 编码),gc 为群号,bkn 必填附加协议头 Referer:https://qinfo.clt.qq.com/qinfo_v3/member.html?groupuin=需要提交 cookie12.QQ 取本地已登录账号https://localhost.ptlogin2.qq.com:xxxx/pt_get_uins?callback=ptui_getuins_CB&r=&pt_local_tk=此链接指向本地 127.0.0.1,xxxx 为本地端口号,需要通过 netstat -ano 查看,开头为 43xx13.QQ 取群公告http://qun.qzone.qq.com/cgi-bin/feeds/get_list?qid=&i=1&s=-1&n=qid 为群号,n 为数量(无上限),访问需登录14.QQ 取群基本信息https://qinfo.clt.qq.com/cgi-bin/qun_info/get_group_info_v2?gc=&bkn=gc 为群号,bkn 必填,附加协议头 Referer:https://qinfo.clt.qq.com/qinfo_v3/setting.html?groupuin=15.QQ 取群基本信息 (全部)https://qinfo.clt.qq.com/cgi-bin/qun_info/get_group_info_all?gc=&bkn=gc 为群号,bkn 必填,附加协议头 Referer:https://qinfo.clt.qq.com/qinfo_v3/member.html?groupuin=16.QQ 取群付费信息https://pay.qun.qq.com/cgi-bin/group_pay/group_enter_fee/get_group_enter_fee?gc=&bkn=gc 为群号,bkn 必填,附加协议头 Referer:https://qinfo.clt.qq.com/qinfo_v3/setting.html?groupuin=17.QQ 取群成员基本信息http://qun.qzone.qq.com/cgi-bin/get_group_member?groupid=&g_tk=groupid 为群号,g_tk 必填,在 item 数组中包含管理员信息(简略)18.QQ 取群成员信息和设置https://qinfo.clt.qq.com/cgi-bin/qun_info/get_members_info_v1?gc=&bkn=gc 为群号,bkn 必填,附加协议头 Referer:https://qinfo.clt.qq.com/qinfo_v3/member.html?groupuin=19.QQ 取群文件信息http://qun.qzone.qq.com/cgi-bin/get_group_share_info?groupid=&g_tk=groupid 为群号,g_tk 必填,访问需登录,好像只能获取到群文件数量,具体自己测试20.QQ 取群文件最佳 CDNhttp://qun.qzone.qq.com/cgi-bin/group_share_get_downurl?groupid=&pa=%2F102%2F83c65cb2-41b5-11ea-a715-5452007bdaa4&g_tk=groupid 为群号,g_tk 必填21.QQ 取群文件 (只能取到 100)http://qun.qzone.qq.com/cgi-bin/group_share_list?groupid=&bussinessid=0&g_tk=groupid 为群号,g_tk 必填22.QQ 取历史头像https://ti.qq.com/mqqbase/cgi/history/face/list?timestamp=&num=&need_cur=1所有内容均为必填项,在登录后即可获取,num 为获取数量,如果要取全部就填很大(测试最大 50)23.QQ 取最近群验证消息 (html)https://web.qun.qq.com/cgi-bin/sys_msg/getmsg?ver=5689&filter=0&ep=0包括待处理消息 https://web.qun.qq.com/cgi-bin/sys_msg/getmsg?ver=568924.QQ 取群 idkeyhttps://qun.qq.com/proxy/domain/shang.qq.com/wpa/g_wpa_get?guin=需要 cookie,协议头 Referer:https://qun.qq.com/proxy.html?callback=1&id=1,guin 为群号中间用英文逗号 "," 隔开,guin 需 url 编码25.QQ 取加群二维码https://qm.qq.com/dl/wpa/e_group?gid=&size=420需要 cookie,gid 为群号,size 必须(改了大小也不会改变),附加协议头 Referer: https://qun.qq.com/join.html26.QQ 群应用https://pub.idqqimg.com/qqun/app/aio/appstore.json.js27.QQ 群投票http://client.qun.qq.com/cgi-bin/feeds/get_t_list?s=-1&ft=21&i=1&qid=&bkn=&n=需要 cookie,qid 为群号,bkn 必填,n 为数量(尽量往大填可以取全部)http://client.qun.qq.com/cgi-bin/feeds/get_feed?fid=&qid=&bkn=需要 cookie,qid 为群号,fid 为上个接口获取到的 fid,bkn 必填28.QQ 空间发送https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_publish_v6?qzonetoken=&g_tk=以下为仅自己可见的 post 提交内容syn_tweet_verson: 1paramstr: 1pic_template:richtype:richval:special_url:subrichtype:who: 1con: 测试feedversion: 1ver: 1ugc_right: 64to_sign: 0hostuin: 9147218code_version: 1format: fsqzreferrer: https://user.qzone.qq.com/914721829.QQ 空间删除https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_delete_v6?qzonetoken=&g_tk=以下是删除上面测试的说说所 post 的参数uin: 9147218 topicId: 9147218_9690071863712e5ec1e60100__1 feedsType: 0 feedsFlag: 0 feedsKey: 9690071863712e5ec1e60100 feedsAppid: 311 feedsTime: 1580101987 fupdate: 1 ref: feeds qzreferrer: https://user.qzone.qq.com/914721830.QQ 空间获取(返回 jsonp)https://user.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds3_html_more?uin=91472180&scope=0&view=1&daylist=&uinlist=&gid=&flag=1&filter=all&applist=all&refresh=0&aisortEndTime=0&aisortOffset=0&getAisort=0&aisortBeginTime=0&pagenum=1&externparam=undefined&firstGetGroup=0&icServerTime=0&mixnocache=0&scene=0&begintime=undefined&count=10&dayspac=undefined&sidomain=qzonestyle.gtimg.cn&useutf8=1&outputhtmlfeed=1&rd=0.14732353980032675&usertime=1580102440156&windowId=0.47149856105620036&g_tk=&qzonetoken=&g_tk=31.QQ 空间图片说说查看https://h5.qzone.qq.com/proxy/domain/plist.photo.qq.com/fcgi-bin/cgi_floatview_photo_list_v2?g_tk=&topicId=&picKey=&cmtNum=10&inCharset=utf-8&outCharset=utf-8&uin=&hostUin=&appid=311g_tk 必填,pickey 随便填但不可为空,topicID 必填,uin 为自己的 QQ 号,hostUin 为对方 QQ 号
2021年03月11日
53 阅读
1 评论
3 点赞
JavaScript数组的几个经典API
2021年03月09日
29 阅读
0 评论
0 点赞
2021-03-09
本文主要来讲数组API的一些操作,如简单实现扁平化n维数组、数组去重、求数组最大值、数组求和、排序、对象和数组的转化等。一、 扁平化嵌套数组/展平和阵列孔——flat()实现效果 var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(2); // [1, 2, 3, 4, 5, 6] //flat方法删除数组中的空槽: var arr3 = [1, 2, , 4, 5]; arr3.flat(); // [1, 2, 4, 5]该flat([depth])方法创建一个新数组,所有子数组元素以递归方式连接到指定的深度。depth深度级别指定嵌套数组结构应该展平的深度。默认为1。2.方法解读:该方法的实质是利用递归和数组合并方法 concat实现扁平。可以使用Array.reduce()/Array.some()/Array.concat()利用Array.reduce()和Array.concat()实现 const flat1 = function (arr) { return arr = arr.reduce((pre, cur) => Array.isArray(cur) ? pre.concat(flat1(cur)) : pre.concat(cur), []) } var arr3 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]]; flat1(arr3); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4] 利用Array.some()和Array.concat()实现 const flat2 = function(arr){ while(arr.some(item=>Array.isArray(item))){ arr=[].concat(...arr); } return arr; } var arr3 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]]; flat2(arr3); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]二、数组去重——set()1.实现效果Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4] [...new Set([1,2,3,3,4,4,5,6])] //[1,2,3,4,5] set是ES6新出来的一种一种定义不重复数组的数据类型。 Array.from是将类数组转化为数组。 ...是扩展运算符,将set里面的值转化为字符串。2.方法解读function unique(arr) { var result =[]; for (var i = 0; i < arr.length; i++) { for (var j = i+1; j < arr.length; j++) { if (arr[i] === arr[j]) { j=++i; } } result.push(arr[i]); } return result; } var arr3 = [1, 2, 3, 3, 4, 5, 4]; unique(arr3);//(5) [1, 2, 3, 5, 4]三、数组排序——sort()1.实现效果[1,3,2,5,4].sort(); [1,3,2,5,4].sort((a,b)=>b-a);2.方法解读冒泡排序Array.prototype.bulesort = function () { let arr = this, len = arr.length; for (let outer = len; outer >= 2; outer--) { for (let inner = 0; inner <= outer - 1; inner++) { if (arr[inner] > arr[inner + 1]) { [arr[inner], arr[inner + 1]] = [arr[inner + 1], arr[inner]]; } } } return arr; } [3, 4, 2,1].bulesort()//[1,2,3,4]四、最大值1.实现效果Math.max(...[1,2,3,4]); //4 Math.max.apply(this, [1, 2, 3, 4]); //4 [1, 2,3, 4].reduce((prev,cur)=>{ return Math.max(prev, cur); },0);//42.方法解读先排序,再取值。五、求和1.实现效果[1, 2, 3, 4].reduce((prev,cur)=>{ return prev+cur; },0); //102.方法解读function sum(arr){ if (arr.length==0){ return 0; } else if (arr.length == 1){ return arr[0]; }else{ return arr[0]+sum(arr.slice(1)); } } sum([1, 2, 3, 4]);//10六、合并[1,2,3].concat([5,6]); [...[1,2,4],...[2,3,5,7]]七、判断是否有值[2, 3, 5].indexOf(3);//1 [2,3,5].includes(4)//false [2, 3, 5].find((item) => { item === 3})//1 [2, 3, 5].findIndex((item) => item === 3)//1 [2, 3, 5].some(item=>{return item===3 })//true八、类数组转化Array.prototype.slice.call(arguments); Array.prototype.slice.apply(arguments); Array.from(arguments); [...arguments]九、每一项设置值//array.fill(value, start, end) [2, 3, 5].fill(true,false,true);//(3) [false, false, false] [2, 3, 5].map(() => 0)//(3) [0, 0, 0]十、每一项是否满足/某一项是否满足[2, 3, 5].every(item=>{return item>2}) //false [2, 3, 5].some(item =>{ return item > 2 })//true十一、过滤数组[2, 3, 5].filter(item => { return item > 2 })//(2) [3, 5]十二、对象和数组转化Object.keys({ name: '张三', age: 14 })//["name", "age"] Object.values({name: '张三', age: 14 })// ["张三", 14] Object.entries({ name: '张三', age:14 }) // (2) [Array(2), Array(2)]0: (2)["name", "张三"]1: (2)["age", 14]
CSS 面试知识点总结-2
6、CSS 优先级算法如何计算?相关知识点:CSS的优先级是根据样式声明的特殊性值来判断的。选择器的特殊性值分为四个等级,如下:(1)标签内选择符x,0,0,0 (2)ID选择符0,x,0,0(3)class选择符/属性选择符/伪类选择符 0,0,x,0(4)元素和伪元素选择符0,0,0,x计算方法:(1)每个等级的初始值为0 (2)每个等级的叠加为选择器出现的次数相加 (3)不可进位,比如0,99,99,99(4)依次表示为:0,0,0,0 (5)每个等级计数之间没关联 (6)等级判断从左向右,如果某一位数值相同,则判断下一位数值(7)如果两个优先级相同,则最后出现的优先级高,!important也适用 (8)通配符选择器的特殊性值为:0,0,0,0(9)继承样式优先级最低,通配符样式优先级高于继承样式(10)!important(权重),它没有特殊性值,但它的优先级是最高的,为了方便记忆,可以认为它的特殊性值为1,0,0,0,0。计算实例:*(1)#demo a{color: orange;}/特殊性值:0,1,0,1*/(2)div#demo a{color: red;}/特殊性值:0,1,0,2/ 注意:(1)样式应用时,css会先查看规则的权重(!important),加了权重的优先级最高,当权重相同的时候,会比较规则的特殊性。(2)特殊性值越大的声明优先级越高。(3)相同特殊性值的声明,根据样式引入的顺序,后声明的规则优先级高(距离元素出现最近的)(4) 部分浏览器由于字节溢出问题出现的进位表现不做考虑回答:判断优先级时,首先我们会判断一条属性声明是否有权重,也就是是否在声明后面加上了!important。一条声明如果加上了权重,那么它的优先级就是最高的,前提是它之后不再出现相同权重的声明。如果权重相同,我们则需要去比较匹配规则的特殊性。一条匹配规则一般由多个选择器组成,一条规则的特殊性由组成它的选择器的特殊性累加而成。选择器的特殊性可以分为四个等级,第一个等级是行内样式,为1000,第二个等级是id选择器,为0100,第三个等级是类选择器、伪类选择器和属性选择器,为0010,第四个等级是元素选择器和伪元素选择器,为0001。规则中每出现一个选择器,就将它的特殊性进行叠加,这个叠加只限于对应的等级的叠加,不会产生进位。选择器特殊性值的比较是从左向右排序的,也就是说以1开头的特殊性值比所有以0开头的特殊性值要大。比如说特殊性值为1000的的规则优先级就要比特殊性值为0999的规则高。如果两个规则的特殊性值相等的时候,那么就会根据它们引入的顺序,后出现的规则的优先级最高。对于组合声明的特殊性值计算可以参考: 《CSS 优先级计算及应用》 《CSS 优先级计算规则》 《有趣:256 个 class 选择器可以干掉 1 个 id 选择器》7、关于伪类 LVHA 的解释?a标签有四种状态:链接访问前、链接访问后、鼠标滑过、激活,分别对应四种伪类:link、:visited、:hover、:active;当链接未访问过时:(1)当鼠标滑过a链接时,满足:link和:hover两种状态,要改变a标签的颜色,就必须将:hover伪类在:link伪 类后面声明;(2)当鼠标点击激活a链接时,同时满足:link、:hover、:active三种状态,要显示a标签激活时的样式(:active),必须将:active声明放到:link和:hover之后。因此得出LVHA这个顺序。当链接访问过时,情况基本同上,只不过需要将:link换成:visited。这个顺序能不能变?可以,但也只有:link和:visited可以交换位置,因为一个链接要么访问过要么没访问过,不可能同时满足,也就不存在覆盖的问题。8、CSS3 新增伪类有那些?(1)elem:nth-child(n)选中父元素下的第n个子元素,并且这个子元素的标签名为elem,n可以接受具体的数 值,也可以接受函数。(2)elem:nth-last-child(n)作用同上,不过是从后开始查找。(3)elem:last-child选中最后一个子元素。(4)elem:only-child如果elem是父元素下唯一的子元素,则选中之。(5)elem:nth-of-type(n)选中父元素下第n个elem类型元素,n可以接受具体的数值,也可以接受函数。(6)elem:first-of-type选中父元素下第一个elem类型元素。(7)elem:last-of-type选中父元素下最后一个elem类型元素。(8)elem:only-of-type如果父元素下的子元素只有一个elem类型元素,则选中该元素。(9)elem:empty选中不包含子元素和内容的elem类型元素。(10)elem:target选择当前活动的elem元素。(11):not(elem)选择非elem元素的每个元素。(12):enabled 控制表单控件的禁用状态。(13):disabled 控制表单控件的禁用状态。(14):checked单选框或复选框被选中。详细的资料可以参考: 《CSS3 新特性总结(伪类)》 《浅谈 CSS 伪类和伪元素及 CSS3 新增伪类》9、如何居中 div?-水平居中:给 div 设置一个宽度,然后添加 margin:0 auto 属性div { width: 200px; margin: 0 auto; }-水平居中,利用 text-align:center 实现.container { background: rgba(0, 0, 0, 0.5); text-align: center; font-size: 0; } .box { display: inline-block; width: 500px; height: 400px; background-color: pink; }-让绝对定位的 div 居中div { position: absolute; width: 300px; height: 300px; margin: auto; top: 0; left: 0; bottom: 0; right: 0; background-color: pink; /*方便看效果*/ }-水平垂直居中一/*确定容器的宽高宽500高300的层设置层的外边距div{*/ position: absolute;/*绝对定位*/ width: 500px; height: 300px; top: 50%; left: 50%; margin: -150px00-250px;/*外边距为自身宽高的一半*/ background-color: pink;/*方便看效果*/ }-水平垂直居中二/*未知容器的宽高,利用`transform`属性*/ div { position: absolute; /*相对定位或绝对定位均可*/ width: 500px; height: 300px; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: pink; /*方便看效果*/ }-水平垂直居中三/*利用flex布局实际使用时应考虑兼容性*/ .container { display: flex; align-items: center; /*垂直居中*/ justify-content: center; /*水平居中*/ } .containerdiv { width: 100px; height: 100px; background-color: pink; /*方便看效果*/ }-水平垂直居中四/*利用text-align:center和vertical-align:middle属性*/ .container { position: fixed; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0, 0, 0, 0.5); text-align: center; font-size: 0; white-space: nowrap; overflow: auto; } .container::after { content: ''; display: inline-block; height: 100%; vertical-align: middle; } .box { display: inline-block; width: 500px; height: 400px; background-color: pink; white-space: normal; vertical-align: middle; }回答:一般常见的几种居中的方法有:对于宽高固定的元素(1)我们可以利用margin:0 auto来实现元素的水平居中。(2)利用绝对定位,设置四个方向的值都为0,并将margin设置为auto,由于宽高固定,因此对应方向实现平分,可以实现水平和垂直方向上的居中。(3)利用绝对定位,先将元素的左上角通过top:50%和left:50%定位到页面的中心,然后再通过margin负值来调整元素的中心点到页面的中心。(4)利用绝对定位,先将元素的左上角通过top:50%和left:50%定位到页面的中心,然后再通过translate来调整元素的中心点到页面的中心。(5)使用flex布局,通过align-items:center和justify-content:center设置容器的垂直和水平方向上为居中对齐,然后它的子元素也可以实现垂直和水平的居中。对于宽高不定的元素,上面的后面两种方法,可以实现元素的垂直和水平的居中。10、有哪些值?说明他们的作用。 block 块类型。默认宽度为父元素宽度,可设置宽高,换行显示。 none 元素不显示,并从文档流中移除。 inline 行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。 inline-block 默认宽度为内容宽度,可以设置宽高,同行显示。 list-item 像块类型元素一样显示,并添加样式列表标记。 table 此元素会作为块级表格来显示。 inherit 规定应该从父元素继承display属性的值。
2021年02月18日
76 阅读
3 评论
0 点赞
【木子卜】API管理系统
2021年02月17日
553 阅读
35 评论
4 点赞
2021-02-17
之前看到很多人都在找API管理系统,本人出于好奇,找了好久也没找到合适的,然后自己写了一个,能力有限,还有很多不足的地方,但是基本上的功能都实现了,当然BUG永远是改不完的。效果:功能:1.API添加和删除2.请求参数的添加和修改3.返回参数的添加和修改4.错误码添加和修改特点和介绍:1.基于Bootstrap和光年模板开发,完全自适应。2.操作简单,管理方便。3.本人才是初学者,很多地方不会,大佬看了可以自己修改,或者给我提提意见。使用方法:1.将文件上传,解压2.修改根目录下的congfig.php文件的相关配置3.将根目录下的api.sql文件导入数据库4.访问域名,后台地址:域名/admin5.初始账号:admin 密码:123456注:未经允许,不得转载。前台演示地址:http://api.mzb0.com下载地址:{hide}https://hierarch.lanzous.com/ibbIalqh78j{/hide}
2021-02-15
CSS 面试知识点总结-1
本部分主要是笔者在复习 CSS 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出!1、介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?相关知识点:(1)有两种盒子模型:IE盒模型(border-box)、W3C标准盒模型(content-box)(2)盒模型:分为内容(content)、填充(padding)、边界(margin)、边框(border)四个部分IE盒模型和W3C标准盒模型的区别:(1)W3C标准盒模型:属性width,height只包含内容content,不包含border和padding(2)IE盒模型:属性width,height包含content、border和padding,指的是content+padding+border。在ie8+浏览器中使用哪个盒模型可以由box-sizing(CSS新增的属性)控制,默认值为content-box,即标准盒模型;如果将box-sizing设为border-box则用的是IE盒模型。如果在ie6,7,8中DOCTYPE缺失会将盒子模型解释为IE盒子模型。若在页面中声明了DOCTYPE类型,所有的浏览器都会把盒模型解释为W3C盒模型。回答:盒模型都是由四个部分组成的,分别是margin、border、padding和content。标准盒模型和IE盒模型的区别在于设置width和height时,所对应的范围不同。标准盒模型的width和height属性的范围只包含了content,而IE盒模型的width和height属性的范围包含了border、padding和content。一般来说,我们可以通过修改元素的box-sizing属性来改变元素的盒模型。2、CSS 选择符有哪些?(1)id选择器(#myid) (2)类选择器(.myclassname) (3)标签选择器(div,h1,p) (4)后代选择器(h1 p) (5)相邻后代选择器(子)选择器(ul>li) >(6)兄弟选择器(li~a) (7)相邻兄弟选择器(li+a)(8)属性选择器(a[rel="external"]) >(9)伪类选择器(a:hover,li:nth-child)(10)伪元素选择器(::before、::after) >(11)通配符选择器(*)3、::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用。相关知识点:单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。(伪元素由双冒号和伪元素名称组成)双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法,比如:first-line、:first-letter、:before、:after等,而新的在CSS3中引入的伪元素则不允许再支持旧的单冒号的写法。想让插入的内容出现在其它内容前,使用::before,否者,使用::after;在代码顺序上,::after生成的内容也比::before生成的内容靠后。如果按堆栈视角,::after生成的内容会在::before生成的内容之上。回答:在css3中使用单冒号来表示伪类,用双冒号来表示伪元素。但是为了兼容已有的伪元素的写法,在一些浏览器中也可以使用单冒号来表示伪元素。伪类一般匹配的是元素的一些特殊状态,如hover、link等,而伪元素一般匹配的特殊的位置,比如after、before等。4、伪类与伪元素的区别css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素。css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素。伪类用于当已有的元素处于某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的元素时,我们可以通过:hover来描述这个元素的状态。伪元素用于创建一些不在文档树中的元素,并为其添加样式。它们允许我们为元素的某些部分设置样式。比如说,我们可以通过::before来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。有时你会发现伪元素使用了两个冒号(::)而不是一个冒号(:)。这是CSS3的一部分,并尝试区分伪类和伪元素。大多数浏览器都支持这两个值。按照规则应该使用(::)而不是(:),从而区分伪类和伪元素。但是,由于在旧版本的W3C规范并未对此进行特别区分,因此目前绝大多数的浏览器都支持使用这两种方式表示伪元素。详细资料可以参考: 《总结伪类与伪元素》5、CSS 中哪些属性可以继承?相关资料:每个CSS属性定义的概述都指出了这个属性是默认继承的,还是默认不继承的。这决定了当你没有为元素的属性指定值时该如何计算值。当元素的一个继承属性没有指定值时,则取父元素的同属性的计算值。只有文档根元素取该属性的概述中给定的初始值(这里的意思应该是在该属性本身的定义中的默认值)。当元素的一个非继承属性(在Mozilla code里有时称之为reset property)没有指定值时,则取属性的初始值initial value(该值在该属性的概述里被指定)。有继承性的属性:(1)字体系列属性font、font-family、font-weight、font-size、font-style、font-variant、font-stretch、font-size-adjust(2)文本系列属性text-indent、text-align、text-shadow、line-height、word-spacing、letter-spacing、text-transform、direction、color(3)表格布局属性caption-side border-collapse empty-cells(4)列表属性list-style-type、list-style-image、list-style-position、list-style(5)光标属性cursor(6)元素可见性visibility(7)还有一些不常用的;speak,page,设置嵌套引用的引号类型quotes等属性注意:当一个属性不是继承属性时,可以使用inherit关键字指定一个属性应从父元素继承它的值,inherit关键字用于显式地指定继承性,可用于任何继承性/非继承性属性。回答:每一个属性在定义中都给出了这个属性是否具有继承性,一个具有继承性的属性会在没有指定值的时候,会使用父元素的同属性的值来作为自己的值。一般具有继承性的属性有,字体相关的属性,font-size和font-weight等。文本相关的属性,color和text-align等。表格的一些布局属性、列表属性如list-style等。还有光标属性cursor、元素可见性visibility。当一个属性不是继承属性的时候,我们也可以通过将它的值设置为inherit来使它从父元素那获取同名的属性值来继承。
2021年02月15日
76 阅读
1 评论
0 点赞
销毁session退出登陆 -木子卜PHP笔记
PHP退出登陆需要三步骤:1、清空session$_SESSION=array();2、销毁客户端设置的cookiesetCookie("PHPSESSID","",time()-1,"/"); // 使用setCookie方法将PHPSESSID清空,过期时间为当前时间的前一秒3、销毁sessionsession_destroy();4、最后设置跳转页面。
2021年02月14日
74 阅读
0 评论
1 点赞
PHP转义双引号
2021年02月07日
96 阅读
0 评论
1 点赞
2021-02-07
php转义双引号的方法:首先创建一个PHP示例文件;然后通过“addslashes('Shanghai is the "biggest" city in China.');”方法在每个双引号前添加反斜杠来转义字符串即可。本文操作环境:windows7系统、PHP7.1版,DELL G3电脑。addslashes — 使用反斜线引用(转义)字符串;addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。预定义字符是:单引号(') 双引号(") 反斜杠(\) NULL提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。语法addslashes(string)参数string 必需。规定要转义的字符串。在每个双引号(")前添加反斜杠:<?php $str = addslashes('Shanghai is the "biggest" city in China.'); echo($str); ?>输出:Shanghai is the \"biggest\" city in China.
2021-02-07
php mysql 转义的方法
php mysql转义的方法:1、利用mysql库函数“mysql_escape_string”或“mysqli_real_escape_string”进行转义;2、利用转义函数“addslashes()”进行转义。本文操作环境:Windows7系统、PHP7.1、Dell G3电脑。php访问mysql数据库对字符串进行特殊字符转义转义特殊字符:单引号(')、双引号(")、反斜线(),以便于进行数据库查询方法一:利用mysql库函数PHP版本在7.0之前:mysql_escape_string ( string $unescaped_string ) : stringPHP版本在7.0之后:mysqli_real_escape_string ( mysqli $link , string $escapestr ) : string方法二:利用转义函数addslashes()适合版本PHP4、PHP5、PHP7addslashes ( string $str ) : stringPHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 on, 实际上所有的 GET、POST 和 COOKIE 数据都用被 addslashes() 了。 不要对已经被magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。 遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。即get_magic_quotes_gpc()返回false时,再使用addslashes()进行特殊字符转义。示例如下:function myaddslashes($data) { if(false == get_magic_quotes_gpc()) { return addslashes($data);//未启用魔术引用时,转义特殊字符 } return $data; }
2021年02月07日
74 阅读
0 评论
0 点赞
php获取数据库表中总行数
<?php require("config.php"); $sql = "SELECT count(*) FROM api_list"; $result = mysqli_query($conn,$sql); $rows = mysqli_fetch_row($result); $rowcount = $rows[0]; echo $rowcount;
2021年01月28日
133 阅读
0 评论
2 点赞
1
2
...
5