你以为这个世界是有规则的,其实它没有。 没有规则,只有规律,混沌是常态。
1. npm install安装流程 【Node】
参考答案
- 执行npm install,检查项目的node_modules是否已经存在安装模块,如果存在就不会进行安装(即使已经有了新版本) (npm install -f 不管本地是否已经安装了模块,都会重新安装。)
- 检查是否有package-lock.json文件, a. 没有lock文件,直接获取package.json的版本 b. 有package-lock.json文件,当package.json的版本规范与package-lock.json版本兼容时,按lock文件安装,如果不兼容按package安装。
- 检查缓存(npm config get cache)
- 如果有缓存,直接解压到node_modules
- 如果没有缓存,下载压缩包,存放在~/.npm目录,解压压缩包到node_modules
- 生成package-lock.json文件
2. CSS如何使文本以大写字母开头 【CSS】
参考答案
p{
text-transform:capitalize;
}
<p>my name is liugezhou </p>
<!-- covert to : My Name Is Liugezhou -->
3. 伪类 :nth-child 和 :nth-of-type的区别 【CSS】
参考答案
- :nth-child(n): 首先找到所有当前元素的兄弟元素(不是相同类型的元素),用n来筛选出在当前元素的兄弟元素节点的位置。
- :nth-of-type(n): 针对具有一组兄弟节点的标签(相同的类型标签),用n来筛选出在一组兄弟节点的位置。
区别:nth-of-type查找的是相同类型标签元素,nth-child查找的同一个级别的元素(可以是不同类型标签)。
4. 设计模式的理解?常见的设计模式有哪些? 【概念】
参考答案
在软件工程领域中,设计模式是对软件设计中普通存在的各种问题提出的解决方案,不以直接写代码的方式解决,而是在各种不同情况下,描述如何解决一个问题。
- 单例模式
保证一个类仅有一个实例,并提供一个访问他的全局访问点。 实现的方法为先判断是否有这个实例,如果存在直接返回,如果不存在就创建这个实例之后再返回。
- 工厂模式
工厂模式通常分为三个角色
- 工厂角色:负责实现创建所有实例的内部逻辑
- 抽象产品角色:它是创建的所有对象的父类,负责描述所有实例所共有的接口
- 具体产品角色:是创建的目标,所有创建的对象都充当这个角色的某个具体类的实例
- 策略模式
策略模式就是定义一系列的算法,把他们一个个封装起来,并且使他们可以互相替换。
策略类(可变):策略类封装了具体的算法,并负责具体的计算过程 环境类(不变):接受客户的请求,随后请请求委托给某一个策略类
- 代理模式
为对象提供一个代用品或占位符,以便控制对它的访问。 比如图片的懒加载功能,先通过loading图占位,然后通过异步方式加载图片,图片加载完毕后再加载到img标签里面。
- 中介者模式
通过一个中介者对象,其他所有的相关对象都通过这个中介对象来通信,而不是相互引用.当其中一个对象发生改变时,只需要通知中介者对象即可。
通过中介者模式可以解除对象与对象之间的紧耦合关系
- 装饰者模式
定义:在不改变对象自身的基础上,在程序运行期间给对象动态地添加方法。
通常运用在原有方法维持不变,在原有方法上再挂载其他方法满足现有需求。
5. 什么是响应式设计,响应式设计的基本原理是什么?如何做响应式设计 【CSS】
参考答案
简单理解:同时适配PC+平板+手机等设备,网站的布局会根据视口来调整模块的大小和位置。
基本原理:通过媒体查询 监测不同设备 做屏幕尺寸处理, 需要注意为了处理移动端,页面头部必须有meta声明viewport
- width=device-width 自适应手机屏幕的尺寸宽度
- maximum-scale 缩放比例的最大值
- initial-scale 缩放的初始化
- user-scalable 是否允许用户缩放
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no”>
- 实现方式
- 媒体查询
@media screen [(min-width:375px)] and (max-width:600px){}
- 百分比
- vw/vh
- rem
为了实时、准确的监听设备窗口的变化,我们可以在css之前插入script标签
function init(){
const width = document.documentElement.clientWidth
document.documentElement.style.fontSize = width/10 + 'px'
}
// 首次加载
init()
// 监听手机旋转
window.addEventListener('orientationChange',init)
// 监听手机窗口变化
window.addEventListener('resize',init)