目录
1. 设计的一个函数,接收两个数字作为参数,输出这两个数字之间所有的整数
2. 设计一个函数,接收一个对象作为参数,返回对象中所有属性名组成的新数组
3. 设计一个函数,接收两个数组作为参数,返回两个数组合并后的新数组
自我介绍
嗯,好的,我是一个对前端开发充满热情的人,并且已经学习了许多与前端开发相关的课程和技术。我熟悉HTML、CSS和JavaScript,能够使用这些技术构建响应式和交互式的网页。我还具备一定的设计能力,能够将设计稿转化为实际的网页界面,并确保在不同浏览器和设备上的兼容性。除了技术方面,我也非常注重团队合作和沟通能力。喜欢学习新的技术和工具,不断提升自己的能力。 作为一名前端实习生,我希望能够借此机会在实践中不断学习和成长。我相信我具备良好的学习能力和适应能力,能够快速融入团队并为项目的成功做出贡献。感谢您给我介绍自己的机会,我很期待能够加入贵公司。
项目介绍(亮点)
我觉得项目挺基础的没什么亮点。。。(个人情况。。。。)
技术栈
HTML(超文本标记语言):用于创建网页结构和内容的标记语言,是前端开发的基础。
CSS(层叠样式表):用于网页的样式设计和布局,控制网页的外观和排版。
JavaScript:一种用于网页交互和动态效果的脚本语言,使网页能够与用户进行交互。
框架vue:常见的前端框架包括React、Angular和Vue.js等,用于简化前端开发,提供更高效的组件化和页面管理。
CSS预处理器:如Sass和Less,用于扩展CSS的功能,提供变量、嵌套、混合等特性,提高CSS的可维护性和可复用性。
构建工具Webpack:如Webpack和Gulp,用于将多个前端资源进行打包、压缩和优化,提高前端项目的性能和开发效率。
调试工具:如 谷歌Chrome开发者工具,用于调试和排查前端代码的问题,包括查看元素、网络请求、控制台输出等功能。
版本控制工具Git:如Git,用于管理和协作开发团队的代码版本,方便代码的追踪、合并和回滚。
Vuex作用
项目遇到多个状态,在多个界面间的共享问题。比如用户的登录状态、用户名称、头像、地理位置信息等。这些状态信息,都可以放在统一的地方,对它进行保存和管理。5个属性
state:用于定义属性,用于存储状态、数据
mutations:用于处理state的方法
actions:mutations的异步版
getters:Vuex的计算属性。 引入Vuex,使用mapGetters
modules:Vuex模块化
Vue-Router作用
vue-router 可以帮助我们管理应用程序中的路由,从而使用户能够访问应用程序的各个部分。路由可以看作是前端程序中的页面,比如登录、主页、个人中心。实现路由可以让程序具有页面路由功能,从而能够实现多页面之间切换,以及 URL 中的参数控制页面的显示。
query 传参配置的是path,而params传参配置是name,在params中配置path无效;
query在路由配置不需要设置参数,而params必须设置
query传递的参数会显示在地址栏中
params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ;
路由传参:query传参通过path跳转,params传参通过name跳转,
params <router-link :to="`/path/${id}`"><router-link>
query <router-link :to="{path:'/path',query:{id:'123'}}"><router-link>
// params通过path匹配路由,且在path后面跟上对应的值
params this.$router.push({ query this.$router.push({
path: `/path/${id}` path:'/path',
}) query: { id:'123'} })
// 通过name匹配路由
this.$router.push({
name: "name", //路由配置中的name
params:{ id:222 } });
父子组件通信
父 > 子 父组件通过 props 传递数据给子组件
在父组件中自定义名称便于子组件调用
在子组件中使用props { users:{ //这个就是父组件中子标签自定义名字type:Array } }
子 > 父 (通过事件形式)
再子组件 用$emit自定义事件,
changeTitle() { this.$emit ("titleChanged", "子向父组件传值"); //自定义事件 }
父组件中 v-on 的方式实现。
作用域链
各个作用域的嵌套关系组成一条作用域链。
作用域链主要是进行标识符(变量和函数)的查询,标识符解析就是沿着作用域链一级一级的搜索标识符的过程,而作用域链就是保证对变量和函数的有序访问。
(1)如果自身作用域中声明该变量,则无需使用作用域链
(2)如果自身作用域中未声明该变量,则需要使用作用域链进行查找
什么是递归,优缺点
在递归中,函数或过程会反复调用自身,每次调用都会解决一个规模更小的子问题,直到达到终止条件并返回结果。
优点:
1.可读性高:递归可以更直观地表达问题的解决思路,使代码更易于理解和维护。
2.代码简洁:相对于迭代循环,递归可以用更少的代码实现相同的功能。
3.解决复杂问题:某些问题的解决思路天然适合使用递归,例如树的遍历、图的搜索等。
缺点:
1.性能开销:递归可能导致函数的多次调用和重复计算,增加了函数调用栈的开销,可能会占用较多的内存和处理时间。
2.栈溢出风险:递归深度过大时,函数调用栈可能超出限制,导致栈溢出错误。
3.难以调试:递归中涉及到多层嵌套调用,当出现问题时,调试和定位错误可能较为困难。
Css动画
transition过渡动画
transform 转变动画
CSS动画实现原理基于CSS的过渡(transition)和关键帧动画(keyframes)两种技术。
过渡(transition)
transition-property: width; /* 过渡的属性 */
transition-duration: 1s; /* 过渡的持续时间 */
transition-timing-function: ease; /* 过渡的时间函数 */
transition-delay: 0s; /* 过渡的延迟时间 */
@keyframes slide-in { 0% { opacity: 0; /* 初始状态的样式 */ transform: translateX(-100%); } 100% { opacity: 1; /* 结束状态的样式 */ transform: translateX(0); }}
animation-name: slide-in; /* 使用关键帧动画 */
animation-duration: 1s; /* 动画的持续时间 */
animation-timing-function: ease; /* 动画的时间函数 */
animation-delay: 0s; /* 动画的延迟时间 */
animation-fill-mode: forwards; /* 动画结束后保持最后一个关键帧的样式 */
定时器实现轮播图坏处
页面性能:定时器会周期性地触发轮播图的切换,这个过程会占用一定的系统资源,特别是当页面中存在多个轮播图或其他复杂的交互组件时,可能会对页面的性能产生一定的影响。
内存泄漏:如果没有正确处理定时器,可能会导致内存泄漏。如果在页面切换或销毁时没有清除定时器,定时器会持续执行。导致内存泄漏问题。
用户体验:定时器的时间间隔是固定的,无法根据用户的实际操作和需求进行动态调整。如果用户希望停留在某一张轮播图上或者手动切换轮播图,定时器的切换可能会干扰用户的操作,影响用户体验。
数组,对象(函数)
1. 设计的一个函数,接收两个数字作为参数,输出这两个数字之间所有的整数
使用示例:printIntegers(3,7) ; // 输出 3 4 5 6 7
function printIntegers(start, end) { 函数
if (start > end) {
console.log("开始数字必须小于或等于结束数字");
return;
}
for (let i = start; i <= end; i++) {
console.log(i);
}
}
设计一个函数,接收一个对象和一个元素作为参数,判断该元素是否在对象中存在
使用示例: obj.hasOwnProperty(key) 方法 查找一个对象是否有某个属性
let person = { name: 'John', age: 25 };
console.log(isPropertyValueExists(person, 25)); // 输出 true
console.log(isPropertyValueExists(person, 'Mary')); // 输出 false
function isPropertyValueExists(obj, value) {
for (let key in obj) {
if ( obj.hasOwnProperty(key) && obj[key] === value) {
return true;
}
}
return false;
}
2. 设计一个函数,接收一个对象作为参数,返回对象中所有属性名组成的新数组
使用示例: Object . keys(obj) ; 方法
let person = { name: 'John', age: 25 };
console.log(getPropertyNames(person)); // 输出 ['name', 'age']
function getPropertyNames(obj) {
return Object.keys(obj);
}
3. 设计一个函数,接收两个数组作为参数,返回两个数组合并后的新数组
使用示例: arr1.concat(arr2) 方法 数组合并
Let arr1=[1,2,3] ; let arr2=[4,5,6] ;
console.log(mergeArrays(arr1,arr2)); /[1,2,3,4,5,6]
function mergeArrays(arr1, arr2) {
return arr1.concat(arr2);
}
关于数组的方法有哪些,返回的是什么
JavaScript中的数组有许多内置方法,用于对数组进行操作、修改和转换。以下是一些常用的数组方法及其返回值的简要描述:
1.push(): 在数组末尾添加一个或多个元素,并返回新数组的长度。
2. pop(): 移除并返回数组的最后一个元素。
3. shift(): 移除并返回数组的第一个元素。
4. unshift(): 在数组开头添加一个或多个元素,并返回新数组的长度。会修改原数组。
5. concat(): 连接两个或多个数组,并返回新数组。
6. slice(): 从原数组中提取指定位置的元素,返回一个新数组。
7. splice(): 在指定位置修改数组,删除、替换或添加元素,并返回被删除的元素组成的数组。
8. join(): 将数组的所有元素连接成一个字符串,并返回该字符串。
9. indexOf(): 查找指定元素在数组中的第一个匹配位置的索引,如果未找到则返回-1。
10. lastIndexOf(): 查找指定元素在数组中的最后一个匹配位置的索引,如果未找到则返回-1。
11. forEach(): 遍历数组中的每个元素,执行指定的回调函数,没有返回值。
12. map(): 遍历数组中的每个元素,执行指定的回调函数,并返回一个由回调函数返回值组成的新数组。
13. filter(): 遍历数组中的每个元素,根据指定条件过滤元素,并返回一个由符合条件的元素组成的新数组。不改变原数组。
14. reduce(): 从数组的第一个元素开始,依次迭代执行指定的回调函数,返回一个累积的结果。
15. reduceRight(): 从数组的最后一个元素开始,依次迭代执行指定的回调函数,返回一个累积的结果。
16. sort(): 对数组元素进行排序,修改原数组,并返回排序后的数组。
17. reverse(): 反转数组元素的顺序,修改原数组,并返回反转后的数组。
18. some(): 检测数组中是否至少有一个元素满足指定条件,返回布尔值。
19. every(): 检测数组中的所有元素是否都满足指定条件,返回布尔值。
20. find(): 查找数组中第一个满足指定条件的元素,并返回该元素。
21. findIndex(): 查找数组中第一个满足指定条件的元素的索引,并返回该索引。
这些只是一些常见的数组方法,JavaScript中还有其他很多数组方法可以根据需要使用。
请注意,大多数数组方法都是非破坏性的,即它们不会修改原始数组,而是返回一个新的数组或其他值。然而,这些方法,如 pop()、push()、shift()、unshift()、splice()、sort()、reverse(),会直接修改原始数组。
返回不改变原数组的方法
数组排序
在数组中找到相应字符串