数据库锁的分类(粒度,级别)
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 数据库锁出现的原因是为了处理并发问题,因为数据库是一个多用户共享的资源,当出现并发的时候,就会导致出现
2019.4.7面试题
1.String a = “123”; String b = “123”; a==b的结果是什么? 这包含了内存,String存储方式等诸多知识点。 ans: 同样序列的字符串直接量为一个实例,所以其实引用变量a和b其实是指向同一个实例,地址也就相同。引用变量比较的是地址,所以第一个打印出来为true。 2.HashMap里的hashcode方法和equal方法什么时候需要重写?如果不重写会有什么后果?对此大家可以进一步了解HashMap(甚至ConcurrentHashMap)的底层实现。
vue配置全局less变量/方法 详细过程
核心:sass-resources-loader组件 实现过程如下: 1.安装
npm i sass-resources-loader -S 2.修改配置文件build/utils.js 2.1 在cssLoaders中添加如下代码:
// 全局less变量配置
function lessResourceLoader() {
var loaders = [
cssLoader,
'less-loader',
{
loader: '
vue打包静态资源路径报错
使用vue-cli创建的vue项目直接打包会出现静态资源找不到的问题,解决方案如下: 修改config/index.js的build配置,将assetsPublicPath的值修改为 ./ 再次打包如下,静态资源路径已经改为了./
vue解决ie与低版本浏览器es6兼容问题
使用vue-cli搭建vue项目打包后在ie上打开静态资源出现空白,但是在chrome上一切正常,经检测发现打包后的js存在兼容问题,ie等低版本浏览器对es6存在不支持情况,解决方法如下: 1. 安装babel-polyfill
npm i babel-polyfill -S 2. 在main.js引入abel-polyfill 完成!
node监听组件supervisor 监听node项目代码改变 更新服务
新建node项目,通过 node xx.js 启动项目,当代码发生改变需要重新启动项目,使用 supervisor组件 即可实时监测代码变化更新项目并自动重启项目,具体操作如下: 1.安装:
npm i supervisor -g 2.使用: 命令行使用 supervisor 代替 node 启动项目,当命令行提示如下信息时表示设置成功:
restful风格数据交互 前端封装
restful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计,核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。 交互方式主要有以下几种: get请求:用于查询后台数据库数据; post请求:用于向后台数据库新增数据; put请求:用于修改后台数据库数据; delete请求:用于删除后台数据库数据; 项目基于统一管理原则制定了以下请求封装供参考: 1.安装axios
npm i axios -S 2.新建文件,封装请求
import axios from
时间格式转换 - 最好用的前端组件moment
最近一个新的项目,因需求日期格式回显用户可设置,经过同行老司机指引发现Moment.js这一强大助力,感觉很好用! 1. 安装moment组件,也可以直接引入相关js代码
npm i moment -S 2. 使用
/**
* @param {String} date 需要转化的时间值,要求与ISO 8601格式匹配(不传入,默认使用当前时间);
* @param {String} rule 需要转换的时间格式
*/
moment(date).format(rule) ISO 8
开发环境、测试环境、生成环境区别 npm安装
环境简述 开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。 测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。 生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用的环境都以这个为基础,然后根据客户的个性化需求来做调整或者修改。 三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环
element Form resetFields踩过的坑
描述: 自己封装了修改(弹窗)组件,每次的打开修改弹窗后请求修改项数据进行回填,关闭弹窗时使用Form组件的resetFields方法重置表单,第一次使用该组件正常,第二次使用该组件在关闭时,会闪现第一次打开时的修改项的数据; 原因: form表单的重置是以第一次打开的数据作为重置标准,如果先打开的是更新,那么重置之后以第一次更新的数据作为标准; 解决方法: 每次关闭弹窗时销毁组件,每次打开该组件再对该组件的dom进行重新挂载,挂载完成后进行修改项数据请求回填; 使用: 通过v-if控制For
ElementUI el-time-picker踩坑-只显示小时、分钟,分并添加范围校验
开始时间设置:
<el-time-picker
v-model="form.preClockOffTime"
class="date-box"
format='HH:mm' 设置下拉框时间格式
value-format="HH:mm" 设置返回值时间格式
:picker-options="{
校验开始时间不的大于结束时间或最大时间值
selectableRange:`00:00:00 -${form.nex
uglify-webpack-plugin打包es6语法报错
最近闲来无事,就参照webpack官网搭建demo,在搭建生产环境时出现以下报错: 发现uglify-webpack-plugin插件打包时无法解析es6语法, 解决方法:配置公共webpack配置 1.安装 "babel-core" "babel-loader" "babel-preset-env"
npm i babel-core [email protected] babel-preset-env -D ps: babel-loader默认安装最新版本,需指定安装7.1.5版本,方可
import() webpack打包报错
按照webpack官网案例搭建了一个小的项目,在使用动态导入方式做代码分离时,惊现报错,报错如下: 一番搜索找到了以下解决方案: 解决过程如下: 1.安装babel-plugin-dynamic-import-webpack
npm i babel-plugin-dynamic-import-webpack -D 2.修改 .babelrc 配置文件,在plugins中添加如下配置 3.再次执行打包命令,打包成功
cnpm 替换 npm
原因:在开发过程中遇到了npm安装依赖不完整现象; 果断在此次项目开发改用了cnpm包管理器,替换npm为cnpm过程如下: 1. 安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org 控制台提示如下,代表安装成功: 也可用查看cnpm版本命令查看是否安装成功
cnpm -v 2. 更换包管理器
npm config set registry https://registry.npm.taobao.or
vue踩坑 页面未触发渲染
最近项目中数次遇到了 “页面没有按照预想渲染” 的现象,特推出以下两种解决思路: 1. $nextTic()方法 具体操作:在$nextTic()方法回调函数内进行data更新
this.$nextTick(() => {
// ...
}); 2. $forceUpdate()方法 具体操作:执行方法,即可使组件强制重新渲染
// ...
this.$forceUpdate();
react配置全局scss变量
自己在搭一个react的移动端demo,考虑到以后可能回做样式整体调整,就进行了scss变量全局的配置,配置过程如下: 1.安装sass-resources-loader
npm i -S sass-resources-loader 2.创建公共配置文件 我创建了两个scc配置文件,一个存放变量variable.scss,一个存放混合指令mixin.scss 3.设置配置文件 如果是creact-react-app脚手架搭建的项目,没有找到config文件夹下webpack.config.d
数据输入输出流DataInputStream,DataOutputStream
一、简介 DataInputStream,DataOutputStream可以按照基本数据类型大小读写数据 例如按Long大小写出一个数字,写出时该数据占8字节,读取的时候也可以按照Long类型读取,一次读取8个字节。 二、使用方式
public static void demo3() throws FileNotFoundException, IOException {
DataOutputStream dos = new DataOutputStream(new FileOutpu
两种方式实现键盘录入
一、方式一(IO流)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //InputStreamReader转换流
String line = br.readLine();
System.out.println(line);
br.close(); 二、方式二(Scanner)
Scanner sc = new Scanner(System.in);
String line = sc.nex
今日推荐
周排行