Vue项目实践与组件踩坑
Vue 项目里的常用写法和坑点。基础语法和原理看 Vue学习笔记。
基础常用:const/let、对象字面量增强、filter/map、Promise。
12345678910111213const list = [1, 2, 3]const result = list.filter(item => item > 1).map(item => item * 2)new Promise((resolve, reject) => { const ok = true if (ok) { resolve(result) } else { reject(new Error('request error')) }}).then(res => { console.log(res)})
重点:
1、优先 const,变量会变再用 let
2、箭头函数注意 this
3、列表处理优先 filter/map
4、异步请求先把 Promise ...
正则表达式深入学习
以下是学习B站老韩的正则表达式专题视频总结,传送门。相关代码仓库地址:https://github.com/CoderBleu/learn_regular。
快速入门初识12345678910111213141516171819202122public class Demo { public static void main(String[] args) { String content = "1995年,互联网的蓬勃发展给了Oak机会。业界为了使死板、单调的静态网页能够“灵活”起来,急需一种软件技术来开发一种程序," + "这种程序可以通过网络传播并且能够跨平台运行。于是,世界各大IT企业为此纷纷投入了大量的人力、物力和财力。这个时候," + "Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的,所以非常小," + ...
review
basic面向对象和面向过程的区别面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了。
基本数据类型
String相关String 底层就是一个 char 类型的数组,比如“你好” 就是长度为2的数组 char[] chars = {'你','好'};
字符型常量和字符串常量的区别
形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符
什么是字符串常量池?
字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串,在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一 ...
Vue学习笔记
系统学习前端Vue框架,笔记记录于B站的why老师,具体视频链接,在此感谢老师的悉心授课。github笔记地址
初始化Vue初识Vue12345678910111213141516171819202122232425<script src="../js/vue.js"></script> <div id="hi">Hello {{name}}</div> <div class="movie"> <ul> <li v-for="item in movies"> {{item}} </li> </ul> </div> <script> const hi = new Vue({ ...
Java开发常见知识点拾遗
时间时间处理重点是格式统一,老项目常见 Date + SimpleDateFormat,新项目优先 java.time。
123SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date start = sdf.parse(startTime);String text = sdf.format(new Date());
高频操作:
1、计算两个日期之间的天数
2、生成指定日期时间
3、取当前时间、前一天、前一月、前一年
4、在旧 Date 体系和 LocalDateTime 之间切换
常见模板:
12345678910long days = (date.getTime() - nowDate.getTime()) / (24 * 60 * 60 * 1000);LocalDateTime now = LocalDateTime.now();LocalDateTime yesterday = now.minusDays(1);LocalDateTime lastMont ...
HashMap学习
HashMap基本认识
HashMap 的底层数据结构
我们现在用的都是 JDK 1.8,底层是由“数组+链表+红黑树”组成,而在 JDK 1.8 之前是由“数组+链表”组成。
为什么要改成“数组+链表+红黑树”
主要是为了提升在 hash 冲突严重时(链表过长)的查找性能,使用链表的查找性能是 O(n),而使用红黑树是 O(logn)。
在什么时候用链表?什么时候用红黑树?
对于插入,默认情况下是使用链表节点。当同一个索引位置的节点在新增后达到9个(阈值8):如果此时数组长度大于等于 64,则会触发链表节点转红黑树节点(treeifyBin);而如果数组长度小于64,则不会触发链表转红黑树,而是会进行扩容,因为此时的数据量还比较小。
为什么链表转红黑树的阈值是8?
对于 HashMap 也是同样的道理,简单来说,阈值为8是在时间和空间上权衡的结果
红黑树节点大小约为链表节点的2倍,在节点太少时,红黑树的查找性能优势并不明显,付出2倍空间的代价作者觉得不值得。
到8个节点时,红黑树的性能优势也会开始展现出来,因此8是一个较合理的数字。
那为什么转回 ...
锁
Synchronized和Lock的区别1.前言
早期的时候我们对线程的主要操作为:synchronized wati notify
然后后面出现了替代方案:lock await singal
2.synchronized 和 lock 有什么区别?用新的lock有什么好处?举例说明
1)synchronized属于JVM层面,属于java的关键字
monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象 只能在同步块或者方法中才能调用 wait/ notify等方法)
Lock是具体类(java.util.concurrent.locks.Lock)是api层面的锁
2)使用方法:
synchronized:不需要用户去手动释放锁,当synchronized代码执行后,系统会自动让线程释放对锁的占用
ReentrantLock:则需要用户去手动释放锁,若没有主动释放锁,就有可能出现死锁的现象,需要lock() 和 unlock() 配置try catch语句来完成
3)等待是否中断
...
JavaSE面试题总结
== 和 equals 的区别1、== 解读
对于基本类型和引用类型 == 的作用效果是不同的,如下所示:
基本类型:比较的是 值是否相同;引用类型:比较的是 引用是否相同;
12345678// 代码示例:String x = "string";String y = "string";String z = new String("string");System.out.println(x==y); // trueSystem.out.println(x==z); // falseSystem.out.println(x.equals(y)); // trueSystem.out.println(x.equals(z)); // true
代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写 开辟了内存空间,所以 == 结果为 false,而 equals ...
Spring常见面试题总结
1、Spring是什么?  Spring是一个轻量级的IOC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置
主要由以下几个模块组成:
Spring Core:核心类库,提供IOC服务;
Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);Spring AOP:AOP服务;
Spring DAO:对JDBC的抽象,简化了数据访问异常的处理;
Spring ORM:对现有的ORM框架的支持;
Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传;
Spring MVC:提供面向Web应用的Model-View-Controller实现。
2、Spring 的优点?(1)Spring属于低侵入式设计,代码的污染极低;
(2)Spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;
(3)Spring提供了AOP技术,支持 ...
Redis入门到进阶
redis基本认识1.Redis为什么是单线程
在Redis4.0之前,Redis是 单线程运行的。redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。对于Redis来说,主要的性能瓶颈是内存或者网络带宽,而并非CPU。
2.Redis为什么这么快
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
4、使用多路I/O复用模型,非阻塞IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
redis key值操作1、列 ...



