mysql记录
备注:来源于掘金小册(花了30大洋)
散碎小点
mysql服务器程序被称为mysql数据库实例,简称数据库实例
mysql服务进程默认名称为mysqld,客户端默认名称为mysql
输入命令返回结果过程的本质就是一个进程间通信的过程,一般支持三种通信方式:TCP/IP / 命名管道和共享内存 / Unix域套接字文件(了解)
服务端处理来自客户端的请求大致分为三部分:连接管理 -> 解析优化 -> 存储引擎
连接管理可采用上述的三种方式建立连接。当客户端发起连接请求的时候,需要携带主机信息,用户名,密码,服务器对这些信息进行验证,认证失败则拒绝连接。可使用SSL来保证数据传输安全性
解析优化分为:查询缓存,语法解析,查询优化
查询缓存:从5.7开始不推荐查询缓存,并在8.0移除,只做了解即可。移除原因:虽然可提高性能,但需要维护缓存造成的开销,每次需要更新缓存,维护该缓存的内存区域
语法解析:sql语句如何执行?服务端需要对该语句进行判断与校验
查询优化:服务端会将sql语句进行与具有划来保证执行效率
存储引擎:常见的有MyISAM与InnoDB。负责对表中数据进行提取与写 ...
谈谈枚举
问题如果实际业务中需要字典项,通常有以下几种做法
数据库存对应的k,v
数据库利用视图透视case when拿取结果
代码中使用EnumMap
代码中用枚举
其实就是分为了数据库和代码维护的方式,运行效率来说肯定是直接写到代码中更快,但维护起来就是数据库的优势了,所以说在数据不经常变动的情况下一般是存到代码中,反之存入数据库中。
使用枚举和常量类的区别以下是代码对比
1234public class ObjectConstant { /** 完成 */ public static final String FINISH = "FINISH";}
1234public enum ObjectEnum { /** 完成 */ FINISH;}
如果定义重复的值“FINISH”常量类并不会提示,可能会造成重复问题,枚举类编辑器会给出提示
enum相当于一个类,但不可被继承,表示对应的实例是有限的
总结来说eunm做了很多限制更加规范
枚举的使用场景
作为常量使用,比如星期一到星期日,通常配合swi ...
踩坑记录
post入参问题问题描述:在使用@PostMapping注解时,导致入参错误的问题,代码如下
1234@PostMapping(value = "xxx")public Result<Void> xxx(Long id) throws Exception { // TODO}
问题解析:如果不指定接收类型,会从Content-Type中的x-www-form-urlencoded中接收值,使用@RequestBody注解指定后,会从请求体raw中进行取值,但Long类型(前端传的是json串,类型不匹配)无法进行反序列化(错误如下)所以在接收的时候建议使用get的方式进行请求
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of java.lang.Long out of START_OBJECT token; nested exception i ...
Map排序问题
场景描述导出Excel,标题没有按照规则排序,如图(红框的展示结果同导出的Excel)
排序规则,由数据库给出,根据给定的sortTag进行排序
问题分析:该集合(keysdata)类型为Map<String,LinkedHashMap<String,List<Object>>>,需要对其中的LinkedHashMap<String,List<Object>>进行排序,而该列的首行并不需要参与排序。该排序相当于用另一个集合的数据对该集合进行排序
思路
首先需要新建一个map集合对象,用于存放生成的数据,为什么不能将生成的数据直接生成于原有集合上?LinkedHashMap只保证顺序,不保证有序,在原有集合上更新数据并不会改变结果顺序(Map特性。虽然结果是有序的)
其次需要一个数组用来判断排序的大小(可以理解为一个辅助数组),这里不能直接使用int,因为lambda不能直接使用外部定义的局部变量,java线程模型中栈帧的私有很可能会导致并发问题。可以使用原子类AtomicInteger进行替换,但不适合该计算场景,也过于复杂了 ...
一问一答之JVM
说下JVM的内部组成与作用
执行引擎(java -> class)
类加载器(加载class)
运行时数据区域(加载到内存中指这里)
本地库接口(运行需要本地接口支持)
本地方法库(接口需要依赖本地方法库)
联系:编译器会将java代码转为class字节码,类加载器将字节码加载到内存中,放在方法区内,字节码是JVM的一套指令集规范,并不能作用于操作系统,需要由JVM的解释执行引擎翻译为CPU的底层指令,整个过程需要调用本地方法库来实现这个功能
简单来说就是堆栈方法区和程序计数器
程序计数器作用
读取指令,实现流程控制(选择、循环、顺序、异常处理)
多线程情况下,记录线程当前位置
唯一不会出现OOM的地方,随线程生命周期决定(不涉及对象内存分配,也不承载对象引用)
虚拟机栈会出现两个错误。StackOverFlowError 和 OutOfMemoryError
StackOverFlowError:若Java虚拟机栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前Java虚拟机栈的最大深度的时候,就抛出StackOverFlowError错误。
每次调用方 ...
面试经历
个人篇说说个人情况,普通本科,软件工程,从传统的计算机软件行业起步,一年后找工作实现了Double,虽然对于互联网“人均水平”来讲不值一提。但对于我来说一直在按照制定的计划中稳步进行。不是人人都是985,211,但可以通过自己的能力获得一个不错的待遇,IT最大的魅力就在于此!写这篇文章一用于个人记录,二就当分享。自己本身优秀就没必要看下去了
跳槽想法第一次跳槽主要是没有成长吧,1年 = 10年。对于一个应届毕业生来讲,其实学校基本已经定义了你的一个“身价”,薪资这块不是当前阶段纠结的点,选一个好的平台是无比重要的,我刚毕业可能也没意识到这一点,想着在北京能有份工作就不错了。我第一份工作是做一个企业应用方向的,比较稳定,技术挑战少。而且公司比较扣,我也没什么好讲的,干的这些活确实不值得拿一个高薪
第二次跳槽这个不算作跳槽,我们业务线大砍,我就是那条线的o(╥﹏╥)o不过还是拿到了N+1的补偿,怎么说呢,我觉得这家还不错,出手大方,不压工资(1号发),年终随春节发放,裁员有补偿,五险一金按最高比例缴(公积金有基数)等等吧,我觉得很多公司是给不了的换工作需要准备什么程序员也就三五年方向选择期 ...
JVM笔记
内存分配数据区域1.8之前
线程共享:堆、方法区
线程私有:本地方法栈、虚拟机栈、程序计数器
1.8之后
线程共享:堆、元空间
线程私有:本地方法栈、虚拟机栈、程序计数器
程序计数器作用
读取指令,实现流程控制(选择、循环、顺序、异常处理)
多线程情况下,记录线程当前位置
唯一不会出现OOM的地方,随线程生命周期决定
虚拟机栈会出现两个错误。StackOverFlowError 和 OutOfMemoryError
StackOverFlowError: 若 Java 虚拟机栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前 Java 虚拟机栈的最大深度的时候,就抛出 StackOverFlowError 错误。
OutOfMemoryError: Java 虚拟机栈的内存大小可以动态扩展, 如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。
每次调用方法都会创建栈帧(包括局部变量表、操作数栈、动态链接、返回地址)
用来保存局部变量、参加方法计算与返回
本地方法栈
使用Native方法服务,也会出现上述两种错误
Nat ...
后端的vue笔记
下面是我作为后端对vue的看法后端程序员应该对vue了解多少
前言vue知识点总结,我认为的后端需要了解的程度,学习永远是学的多,会的少。学的尽可能的往深里研究,毕竟以后也没这机会了
前置需要掌握一定的ES6相关语法,我这里也总结了一点,可以去网上了解更多
es6属性的简写
什么时候方法的()可以省略必须满足两个条件,类似下图
事件监听
方法没有参数
当条件为false的时候,v-if不会存在dom中,v-show会出现,加了一个样式dispaly:none。就是F12查看的时候有没有 使用建议:如果频繁切换使用v-show,只切换一次v-if
let i in 遍历的对象,此时i是当前索引 let i of 遍历的对象,此时i是当前对象
如果需要以下三个需求应该怎么写代码
筛选数组中小于100的数字
将筛选出的结果x2
将结果进行相加
最直接的方法就是套的写,官方叫做链式编程,也叫函数式编程
1234567let total = nums.filter(function(n){ return n < 100 }).map(fu ...