React项目build失败之MiniCssExtractPlugin
React项目build失败之MiniCssExtractPluginReact项目,最新依赖"mini-css-extract-plugin": "^2.5.0"会导致项目npm run build失败:
12345node_modules/react-scripts/config/webpack.config.js:664 new MiniCssExtractPlugin({ ^TypeError: MiniCssExtractPlugin is not a constructor
解决方案:
1npm i -D --save-exact mini-css-extract-plugin@2.4.5
React项目构建常用命令
React项目构建常用命令12345678//方法一:npm install -g create-react-app//安装create-react-appcreate-react-app hello-world-react//创建项目,项目名称不要有大写字母npm run start 或者 npm start //进入项目目录后,启动项目//方法二:cnpm i yarn -g //提高安装react项目速度npx create-react-app my-react //创建项目,项目名称不要有大写字母npm run start 或者 npm start //进入项目目录后,启动项目
注意:启动项目后可能出现如下报错:
1234567TypeError: MiniCssExtractPlugin is not a constructorpackage.json里面: "devDependencies": { "mini-css-extract-plugin": "2.4.5" }导致
解决方案 ...
Mac OS初始化一个React项目
Mac OS上,初始化一个React项目
初始化项目
1npm init -y
创建目录
1在项目根目录下,创建src源代码目录和dist产品目录
创建首页文件
1在src目录下创建index.html和index.js文件
安装webpack
123456789101112131415161718cnpm i webpack -Dpackage.json内容如下:{ "name": "react", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "ke ...
MySQL语法入门(二)
MySQL语法入门(二)
数据库加密函数
12345SELECT MD5('hello');-- 5d41402abc4b2a76b9719d911017c592SELECT MD5('HELLO');-- eb61eead90e3b899c6bcbe27ac581660SELECT AES_ENCRYPT('hello', 'key');SELECT AES_DECRYPT(AES_ENCRYPT('hello', 'key'), 'key');-- helloSELECT SHA('hello');-- aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
控制流函数
1234567891011121314151617181920212223242526272829303132333435363738SELECT IF(1 > 2, 3, 4);-- 4SELECT IFNULL(1 ...
Java中常见面试题二(简单)
Java中常见面试题二(简单)
HashMap和Hashtable的区别?
线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!)
效率:因为Hashtable加了synchronized锁。所以HashMap 要比 Hashtable 效率高一点。另外,Hashtable 基本被淘汰,不要在代码中使用它
对 Null key 和 Null value 的支持: HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个;Hashtable 不允许有 null 键和 null 值,否则会抛出 NullPointerException。
初始容量大小和每次扩充容量大小的不同 :① 创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。之后每次扩 ...
Java中常见面试题一(困难)
Java中常见面试题一(困难)
Redis的缓存击穿及解决方案
缓存击穿:这个跟缓存雪崩有点像,但是又有一点不一样,缓存雪崩是因为大面积的缓存失效,数据库崩溃了,而缓存击穿不同的是缓存击穿是指存在一个热点数据Key,有请求不断来访问这个Key,这么多请求在同一段时间内访问这个热点数据,当这个 Key 失效时间到了的时候,持续的这么多请求直接怂到数据库上了,就在这个 Key 值上击穿了缓存。
解决方案:设置热点数据永不过期或者加上互斥锁就搞定了。
索引的建立原则, 如何避免索引失效
索引的建立原则索引的设计需要遵循一些已有的原则,这样便于提升索引的使用效率,更高效的使用索引。(1)对查询频次较高,且数据量比较大的表,建立索引。(2)索引字段的选择,最佳候选列应当从where子句的条件中提取,如果where子句中的组合比较多,那么应当挑选最常用,过滤效果最好的列的组合。(3)如果where后有多个条件经常被用到,建议建立符合索引,复合索引需要遵循最左前缀法则,N个列组合而成的复合索引,相当于创建了N个索引。复合索引命名规则index_表名_列名1_列名2_列明3比如:creat ...
Java中常见面试题一(中等)
Java中常见面试题一(中等)
SQL语句优化有哪些?数据库的优化怎样优化?
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。
应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。
乐观锁和悲观锁的解释及其应用场景
**悲观锁(Pessimistic Lock)**,顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
**乐观锁(Optimistic Lock)**,顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库 ...
Java中常见面试题一(简单)
Java中常见面试题一(简单)
面向对象的特征有哪些方面?
抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
Enumera ...
MySQL语法入门(一)
MySQL语法入门(一)
基本运算符使用
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960SELECT 1 + 2;-- 3SELECT 1 / 0;-- nullSELECT 1 + NULL;-- nullSELECT '2' * '4';-- 8SELECT '2f' + 3;-- 5SELECT 2.2 + 2;-- 4.2SELECT 1 = 2;-- 0SELECT 1 = 1;-- 1SELECT 1 = NULL;-- nullSELECT 1 <=> NULL;-- 0SELECT 'hello' = 'HELLO';-- 1SELECT 'hello' = ' HELLO ';-- 0SELECT BINARY 'hello& ...
Java中的桥接模式
桥接模式简介
桥接是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
品牌接口Brand1234//产品品牌public interface Brand { void name();}
实现类品牌A和品牌B123456789101112131415//A品牌public class ABrand implements Brand { @Override public void name() { System.out.print("A品牌"); }}//B品牌public class BBrand implements Brand { @Override public void name() { System.out.pri ...