大学期间做过的课程设计及项目
本文简单介绍,相关链接请前往 CSDN 浏览。 基于 Node.js,socket.io 实现的匿名聊天室针对 php 匿名聊天室的改版,相比上一版用到了前后端分离思想,使用 node.js 重写了后台代码,优化了前端页面样式,用到了 jquery,mongoose,express 框架,template 模板引擎,websocket 等一些新技术。实现了图片文件上传、分页、定时删除、级联删除、倒计时、滚动条位置调整等功能。 php 后端实现的匿名聊天室一个开发了一周的 php 大作业,可以创建聊天室,输入聊天室名称及有效期,有效期过后,聊天室自动删除。设置每个聊天室的人数上限。设置每个用户限加入的聊天室数量。随机分配不重复昵称,有昵称随机动画。随时显示聊天室的剩余时间,js 实现。ajax 实现消息从数据库的获取。消息输入框使用富文本编辑器 ueditor。退出按钮,点击后退出聊天室。 oracle 校园卡消费系统从数据表到 pl 存储过程的逻辑设计都思维缜密。 python 爬虫获取音乐热评python...
JavaScript 基础知识点
变量声明var声明特点 函数作用域 可重复声明 变量提升 省略var则视为全局变量 let声明特点 块级作用域 不可重复声明 123456789//都会报错SyntaxErrorlet namelet namelet namevar namevar namelet name 暂时性死区代替变量提升 与var不同,使用let再全局作用域声明的变量不会成为Window对象属性 const声明特点 块级作用域 不可重复声明 暂时性死区代替变量提升 声明时必须同时初始化变量,且不可修改 数据类型简单数据类型:Undefined、Null、Boolean、Number、String和Symbol; 复杂数据类型:Object...
8 种排序算法的代码实现
找工作之际,重新学习了常见的排序算法,像看似无害的冒泡排序其实也有很多种优化方案,还有简单粗暴的选择排序,模拟抓牌的插入排序,弥补插入排序缺陷的希尔排序,使用了分治思想的归并排序,有点难搞的快速排序,模拟树状结构的堆排序,以及不按套路出牌的基数排序等。 冒泡排序常规冒泡排序1234567891011function bubbleSort(arr) { if (!Array.isArray(arr) || arr.length <= 1) return; for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } return...
手写一个深拷贝代码
深拷贝代码的层层进化 用递归的方式手写实现深拷贝我们先来看网上最常见的深拷贝实现代码 123456789101112function deepClone(obj) { let newObj = Array.isArray(obj) ? [] : {}; for (let key in obj) { let item = obj[key]; if (item instanceof Object) { newObj[key] = deepClone(item); } else { newObj[key] = item; } } return newObj;} 测试用例 123456789101112131415161718192021222324function Obj() { this.num = 1, this.str...
JavaScript 数据结构处理
数组扁平化递归1234567891011function flattenArray1(array) { let arr = []; for (let item in array) { if (Array.isArray(array[item])) { arr = arr.concat(flattenArray1(array[item])); } else { arr.push(array[item]); } } return arr;} 转换为字符串123function flattenArray2(array) { return array.toString().split(',').map(item => +item);} 循环验证是否为数组123456function flattenArray3(array) { ...
正则表达式
用正则表达式实现模板字符串匹配,在javascript中,有模板语法,如I like ${a} and ${b}. 其中有变量, 1let a='apple',b='banana'; 对于上述字符串,最终会生成,I like apple and banana. 可以用以下代码模拟实现的原理, 1234567891011function fn(str, obj) { //第二个参数支持回调函数,第一位是匹配的子串,第二位是捕获的字符串,因为正则里面只有一个括号,所以不需要p2; //需要注意的是,虽然用到了全局匹配会匹配两次,但每次匹配成功都会先调用回调函数。 return str.replace(/\$\{(.*?)\}/g, (match, p1) => { return obj[p1]; })}console.log(fn('i like ${b}...
一些自适应布局的实现
上下固定,中间自适应左右固定,中间自适应一侧固定,另一侧自适应 1.上下固定,中部自适应布局1. 绝对定位实现 原理:让中部绝对定位撑开剩余空间,此时中部会遮挡底部,所以也需要给上下设置为绝对定位。 12345678910111213141516171819202122232425262728body { padding: 0; margin: 0;}header { position: absolute; top: 0; width: 100%; /*设置了绝对定位,宽就必须要写了*/ height: 100px; background-color: yellow;}main { position: absolute; top: 100px; bottom: 100px; width: 100%; background-color: pink;}footer { position: absolute; bottom: 0; height: 100px; width:...
CSS 知识点汇总
期待那一天,我可以用css画一幅《清明上河图》 1.盒子模型W3C盒子模型:width/height = content IE盒子模型:width/height = content + padding + border 2.CSS 选择器选择器优先级 选择器 计算权重 继承,*(通配符) 0,0,0,0 标签选择器,伪元素选择器 0,0,0,1 类选择器,伪类选择器,属性选择器 0,0,1,0 ID选择器 0,1,0,0 行内样式 1,0,0,0 !important ∞ 属性选择器 123456input[type=a]{ /*属性值为a*/}input[type^=a] /*以a开头*/input[type$=a] /*以a结尾*/input[type*=a] /*包含a*/ 伪类选择器 1234567891011121314ul li:first-child{ /*ul的第一个子元素*/}ul li:last-child /*ul的最后一个子元素*/ul...
HTML 知识点汇总
1.DOCTYPE作用?规定浏览器用什么标准解析文档。如果声明了就按照W3C和ECMAscript(ECMA-262)制定的标准(标准模式),否则按照浏览器厂商的标准解析(兼容模式)。 2.SGML 、 HTML 、XML 和 XHTML 的区别?SGML是标准通用标记语言,是一种定义电子文档结构和描述其内容的国际标准语言。HTML是超文本标记语言,用于显示网页。XML是可扩展的标记语言,与HTML的区别是可以自定义标签,而HTML标签固定且有限。XHTML就是严格化的HTML,比如标签必须小写,必须闭合等。 3.行内元素与块级元素的区别?块级元素:常见的块元素有<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等 块级元素特点: 独占一行 高度,宽度、外边距以及内边距都可以控制。 宽度默认是容器(父级宽度)的100% 是一个容器及盒子,里面可以放行内或者块级元素。 p,h1,h2,h3,h4,h5,h6,dt,是文字类块级标签,里面不能放其他块级元素,如p...