Geek-James
Geek-James
## 一、啥是链表? - 1.是由一组节点组成的的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接。 - 2.链表是结构体最重要的应用, 它是一种非固定长度的数据结构,是一种动态存储技术, 它能够根据数据的结构特点和数量使用内存,尤其适用于数据个数可变的数据存储。 ## 二、链表的基本元素有哪些? - 1.节点:每个节点有两个部分,左边部分称为值域,用来存放用户数据;右边部分称为指针域,用来存放指向下一个元素的指针。 - 2.head:head节点永远指向第一个节点 - 3.tail: tail永远指向最后一个节点 - 4.None:链表中最后一个节点的指针域为None值  头指针与头结点以及首元结点的关系:  ## 三、如何合并两个有序链表? 问题分析 - 1、考虑两个链表L1,L2中数据的多少 - 2、空值的情况 -...
## 什么是逆波兰? [来自百度百科的解释](https://baike.baidu.com/item/%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F/9841727?fr=aladdin): 逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。 **大白话解释**: 给你一组数字,从左向右遍历,如果遇到`+-*/`那么就逆序拿出运算符左边的2个数字进行运算,运算完之后继续放里面,继续遍历循环,直到结束,前提是要遵守最基本的四则运算。 ``` 例如 输入:["2","1","+",3,"/"] 逆波兰值为: (2+1)/3 = 1 输入:["4","13","5","/","+"] 逆波兰值为: 4+(13/5) = 6 输入:["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5",...
`阅读完本篇大概需要8分钟.` ## 一、对于前端工程师算法真的重要吗? 很多人可能不知道,我最开始不是做前端的,我是一名iOS开发者,2014年左右入得坑,那时候iOS是比较火热的,随便会搭建界面,出去都是10K起步的,导致很多培训机构跟风,培养了一大批0基础入学,4个月出来就是2年工作经验的大神。由于每个月进入市场的人数剧增,导致市场快速饱和,最后的结果我相信很多人都知道,市场行情就是这样,供需关系失衡的时候,就是最危险的时候,那么对于996的程序员们来说,如何才能不会被市场淘汰呢? **回到主题,前端工程师算法真的重要吗?** 其实抛开语言本身对于程序员来讲,无论你是做什么开发的,前端也好,后台也罢,数据结构和算法是最最根本的,因为**数据结构+算法 = 程序**,我想很多人应该明白这个道理,但是,你有没有和我有同样的感觉,工作中貌似用的并不多,很多算法那已经被高级语言封装好了,例如JS中的过滤`filter`,排序`sort`以及很多关于字符串,数组的操作等等这些,换个角度说,其实我们每天都在使用数据结构和算法来垒代码,只不过,我们每天是站在巨人的肩膀上搬砖。 **那么对于程序员来说,数据结构和算法对我们来说影响最大的地方在哪里?** 我个人觉得代码是对一件未知事物通过自己思想表达来解决的过程,语言只不过是一个载体,就好比说话一样,不同语言表现形式不同,但最终表达出来的意思是一样的。换个角度说,数据结构和算法就是你思维认知的启蒙,因为他已经为你提供了解决问题的思路的大方向,你只要按照他的方向去走,指定不会错,毕竟这些东西都是前辈们总结出来的,能经得起时间的验证,所以我觉得数据结构和算法非常重要,因为他关乎的是你解决问题的思维方式,关乎你写出来的代码的质量和效率,所以我突然意识到,自己为什么踩过那么多的坑,工作了那么久,还是没有总结出自己的那一套适合自己垒代码的思维方式,所以我想通过算法来刻意训练下自己,看能否改变下自己的思维方式,希望自己能有个更大的提升。 ## 二、数据结构和算法真的很难吗? 我有个朋友非计算机专业的,也是前几年搭上了移动开发这艘`火箭`的,今年年初开始他买了很多有关数据结构课程逼迫自己每周抽时间学习,算是一节不落的跟完了整期直播课程,前几天我和他交流,我问他,非计算机科班出身,学数据结构累不累?他直接告诉我,确实很累,学习本来就是个痛苦的过程,因为每个人对未知事物都会有畏难心理,但是换个角度,抛开天赋来讲,每个人的后天努力都是和你的成果成正比的,你多一份努力,自然会多一些收获,只不过每个人的认知能力,理解程度不同,对一些事物的接受程度也会有所不同,但最终只要你敢去直面困难,都是能克服的,毕竟方法永远比困难多,考不了清华北大,咱考个985,211也不错嘛,对不啦!所以天下无难事,只怕有心人,所以面前的这位大侠,要努力哈,毕竟现在的年轻人,都很难!! ## 三、对IT行业变化的一些思考 培训机构在国内是神一般的存在,因为那里是零基础小白入门IT行业走向大神最快的方式,也是市场供需关系的调节体,市场哪个技术火,哪个方向火,总会有一批头部梯队察觉,带头跟风炒一波,毕竟这些是进大厂的必备敲门砖!最近具我观察,去年开始培训机构开始出有关数据结构和算法相关的课了,线上学习的较多,当然学习的人数也很多,因为人工智能、5G已经在路上了,而人工智能最基本的就是算法,所以他们对前沿技术是非常敏感的。对于在职人员来说如果你能早点觉察到,这也是机会,免得过几年被淘汰掉,危机意识一定要有! ## 四、数据结构和算法如何学习和训练? 这个问题是仁者见仁智者见智的,每个人的学习方式不同,对新知识的接受和理解程度不同,自然没有统一的标准答案,但是我个人觉得,自身心态一定要先要转变,很多人开始学数据结构和算法都是从入门到放弃,包括我在内,目的或许没想到这玩意能提升自我垒代码的思维方式,觉得会解算法题,大厂面试可以顺利通过,能混个大厂的职位,也是很棒的,毕竟大厂对数据结构和算法是必考,我个人觉得首先得是意识形态转变,硬技能驱动软技能,毕竟程序员是拿硬技能吃饭的,从根本着手,扎实的编码能力,牢固的基本知识,大平台不可能不喜欢你的,这点是非常确定的。 **回到问题,学习数据结构和算法什么方式最好?** 以下是我总结的几点,希望能对你有帮助 - **看书**:枯燥乏味,代码零散,有些东西用书面语描述起来晦涩难懂,有的书籍连贯性不够好,对于没有基础的人来说,会让你觉得,看完了好几章后,依旧似懂非懂,一头雾水。但是对于有知识基础的人来说,巩固和提升,看书是一个很好的方式,毕竟权威的书籍,知识体系结构还是很不错的。 - **看博客**:博客质量层次不齐,很多博客都是互相抄袭,没头没尾,每个人的认知和理解不同,写的东西自然也不同,但是利用碎片化时间来看博客,也是一种很好的方式,建议看那种连贯性的博客,知识体系完善的,毕竟一个完整的博客能让你的思路不会混乱,当然我也会超这个方向去努力,输出的博客也是连贯性的,当年[我的CSDN](https://blog.csdn.net/zc639143029)写iOS博客的时候也是从最基本的C语言UI搭建一步一步开始的。 - **听音频**:没画面的东西,我觉得还是算了,听完就忘记了,时间成本高,建议碎片化时间可以利用起来。 - **看视频**:我个人觉得一种很好的学习方式,唯一缺点是有点时间成本高,好在很多平台可以倍速播放,能解决掉时间成本的问题,但是一定要看业界有成就的人出的课程,站在巨人的肩膀上你会越来越强大! -...
### 什么是闭包 闭包是指有权访问另一个 函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数,如下代码 ``` function createComparisonFunction(propertyName) { return function (object1,object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value1 value2) { return 1; } else { return...
本文总结了vue组件间通信的几种方式,如`props`、`$emit/$on`、`vuex`、`$parent / $children`、`$attrs/$listeners和provide/inject`,以通俗易懂的实例讲述这其中的差别及使用场景,希望对小伙伴有些许帮助。 组件之间通信是Vue中最常用,最基础的部分,通常组件之前的通信分为以下几种: - 1.父组件给子组件以及子子组件传递值,传递事件 - 2.子组件给父组件传递值,传递事件 - 3.兄弟组件之间传递值,传递事件 ## 方法一、`props/$emit` ### 1.父组件给子组件传值 父组件A通过props的方式向子组件B传递,B to A 通过在 B 组件中 `$emit`, A 组件中 `v-on` 的方式实现。 子组件使用`this.$emit('function',param)`向父组件传值 父组件通过`v-on:function="function"`来接受子组件传递过来的值 接下来我们通过一个例子来加深以上理解: 自定义一个Son.vue子组件,引入到父组件中 在父组件中定义一个数据...
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。 如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。 示例 1: ``` 输入: nums = [1, 7, 3, 6, 5, 6] 输出: 3 ``` 解释: 索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3...
#### 数据类型 * string * boolean * number * object * function * symbol(符号(ES6新增)) #### 对象类型 * Object * Date * Array * RegExp 正则 * Function #### 不包含任何值的数据类型 *...
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题。 ###### 例子1: ``` function a(){ var user = "追梦子"; console.log(this.user); //undefined console.log(this); //Window } a(); ``` ##### 例子2: ``` var o = { user:"追梦子", fn:function(){ console.log(this.user); //追梦子 } }...
## join方法 + 数组 ----> 字符串 #### join() 方法用于把数组中的所有元素放入一个字符串。 ``` var arr =[4,5,34,3453,3453,33,"哈哈哈哈"]; var arr2 = arr.join(""); console.log(arr2); alert(typeof(arr2)); //string alert(typeof(arr)); //object alert(arr2); // 45343453345333哈哈哈哈 ``` ## split()方法:用于把一个字符串分割成字符串数组. + 字符串...
参考网站 + [深入javascript——构造函数和原型对象](https://segmentfault.com/a/1190000000602050) + [JavaScript构造器理解](https://segmentfault.com/a/1190000002701241) + [javaScript中的普通函数与构造函数](https://www.cnblogs.com/SheilaSun/p/4398881.html) + [Javascript构造函数和原型](https://www.jianshu.com/p/322b90d489b8) + [在 JavaScript 中使用构造器函数模拟类](https://www.liuyiqi.cn/2017/02/15/construcor-function-create-class/) + [JavaScript面向对象-原型的内存模型](http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/201512142905.html) #### 常用的几种对象创建模式 + 使用new关键字创建 最基本的对象创建方式: ``` var o = new Object(); o.name = 'james'; o.sex...