MyISAM

3年程序员不敌刚毕业大学生,Redis面试三连问瞬间破功……

懵懂的女人 提交于 2020-07-24 22:34:30
有个读者是小作坊走出来的小猿,项目经验并不出彩,没有高并发、分布式经验,公司的前端、后台、服务器和数据库都部署在同一台机器上。面试时为了不显得自己太low,不经意间提了提在GitHub上有自己的开源框架,但是面试官似乎并不care。 面试中被问到了著名的redis哲学三连,“是什么?为什么?怎么用?” 不得不把肚子里仅有的关于Redis的知识都搜刮了一遍,仍然没有给出面试官想要的答案。这还不够,被继续追问Redis的数据存储方式、操作方法、读写操作在底层都是如何实现的。 除了低头委屈说不会,此时已经意识到了自身能力的严重缺失。平常只要坦白一点,对方会给个台阶下。这次都快被搞哭了,也没见面试官手下留情…… 接着就是心理防线基本被攻破,追问索引的实现原理,创建一个索引怎么能加快查询效率。 结果也猜到了,只能再一次厚着脸皮主动承认答不出来,走回家已经是浑浑噩噩飘飘忽忽。 大家也知道平时只泛泛读一些技术书籍、技术文章,根本很难抓住技术的本质,干了三五年之后,感觉并没有积累到什么,跟刚毕业的大学生能力差不多。本质原因,是没有辨析清楚自己应该积累究竟是什么样的能力。 以Spring、Redis、Mysql、Redis为例,这些作为互联网面试必备的技术点,其底层原理及源码实现是必须要细过的知识点。 Mybatis相信很多人都会使用

MySQL my.cnf参数配置优化详解

扶醉桌前 提交于 2020-07-24 07:10:03
# 客户端 # 以下选项会被MySQL客户端应用读取。注意只有MySQL附带的客户端应用程序保证可以读取这段内容。如果你想你自己的MySQL应用程序获取这些值。需要在MySQL客户端库初始化的时候指定这些选项。 [client] #password = [your_password] port = @MYSQL_TCP_PORT@ socket = @MYSQL_UNIX_ADDR@ # MySQL 服务端 [mysqld] # 一般配置选项 port = @MYSQL_TCP_PORT@ socket = @MYSQL_UNIX_ADDR@ # back_log 是操作系统在监听队列中所能保持的连接数,队列保存了在MySQL连接管理器线程处理之前的连接。如果你有非常高的连接率并且出现”connection refused” 报错,你就应该增加此处的值。检查你的操作系统文档来获取这个变量的最大值。如果将back_log设定到比你操作系统限制更高的值,将会没有效果。 back_log = 300 # 不在TCP/IP端口上进行监听。如果所有的进程都是在同一台服务器连接到本地的mysqld,这样设置将是增强安全的方法。所有mysqld的连接都是通过Unix sockets 或者命名管道进行的。注意在windows下如果没有打开命名管道选项而只是用此项(通过 “enable-named

MySQL数据库操作规范

*爱你&永不变心* 提交于 2020-07-23 18:47:03
MySQL数据库操作规范 文档说明: 该文档旨在对MySQL数据库的使用做一个统一的约定和规范;以便使大家更明确、更有效的用好数据库,最终使数据库发挥更好的作用,从而提升产品的质量。 一、基础规范 1.1、【强制】使用InnoDB存储引擎。 解读:InnoDB存储引擎是MySQL默认存储引擎,支持事务和行级锁,并发性能更好,CPU及内存缓存页优化使得资源利用率更高,并且MyISAM在8.0中考虑移除了。 1.2、【强制】使用统一的字符集(utf8或utf8mb4),如果有存储emoji表情之类的,则需要使用utf8mb4,否则使用utf8即可。 解读:无需转码,无乱码风险;utf8mb4向下兼容utf8但存储使用的空间会比utf8略大。 1.3、【强制】表、字段必须加入中文注释,注释要言简意赅。 解读:便于识别表和字段的用途,有利于维护; 反例:t_company_organization_scope_employee 可以采用缩写改成t_com_org_scope_emp 1.4、【强制】禁止使用存储过程、视图、触发器、Event。 解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移到业务层

Digital Ocean Database Issue related to MyISAM

霸气de小男生 提交于 2020-06-16 04:07:19
问题 Our Laravel app uses InnoDB as well as MyISAM tables and it was working fine until recently the Servers have been moved to Digital Ocean in order to use their "Distributed Database System". Now when I run the migrations, it works fine until it finds the first table migration which tries to create MyISAM table and script crashes giving following error: Storage engine MyISAM is disabled (Table creation is disallowed) Could anyone tell me how can I ENABLE the Storage engine MyISAM in Digital

【转载】MySQL版本升级之5.6到5.7

◇◆丶佛笑我妖孽 提交于 2020-05-08 20:03:03
文一 两种升级方式 In-Place Upgrade : Involves shutting down the old MySQL version, replacing the old MySQL binaries or packages with the new ones, restarting MySQL on the existing data directory, and running mysql_upgrade . Logical Upgrade : Involves exporting existing data from the old MySQL version using mysqldump , installing the new MySQL version, loading the dump file into the new MySQL version, and running mysql_upgrade . 升级实践(采用in-place方式) #关闭快速关闭服务选项,防止关闭服务后有脏页未刷进磁盘,升级后表格式变化无法进行recovery mysql -u root -p123456 -S /tmp/mysql_3306.sock -e "SET GLOBAL innodb_fast_shutdown=0" #关闭MySQL服务 mysqld

02_数据库基础之(二)sql语句入门

冷暖自知 提交于 2020-05-08 07:53:32
1.基本增删改查操作 1 #一。 数据类型 常用的3中 2 # 1 .字符串 例如:你的名字 我是中国人 在数据库中要使用 ‘’引起来 ' 苹果手机 ' 3 # 2 .整数类型 例如: 你的年龄 23 ,办公室的人数 5 个 ,直接使用 5000 4 # 3 .时间 当着一个字符串用 5 6 #二。几乎所有的编程标点符号都要使用 英文状态下的 7 8 #三。数据库中不区分大小写,但是 生产上的 规范 关键字大写 INSERT ,其他的小写 9 10 新增 11 需求:添加一条数据到产品表 产品名称为苹果手机 卖价为5000 12 INSERT INTO product (product_name,sale_price) VALUES ( ' 苹果手机 ' , 5000 ) 13 14 删除 15 需求:删除产品表中id = 20的数据 16 DELETE FROM product WHERE id = 20 17 # = > < >= <= 18 # product_name = ' 联想M115 ' 19 # 或OR 且AND 非! 两个条件同时满足 AND 20 需求:删除产品表中id = 20并且product_name = ' 联想M115 ' 的数据 21 DELETE FROM product WHERE id= 20 AND product_name = '

MySQL开发——【数据库、数据表的基本操作】

放肆的年华 提交于 2020-05-08 06:29:05
启动MySQL服务器端 CMD 启动 MySQL服务器端 1 net start(启动) | stop(停止) | restart(重启)服务名称(mysql) 连接MySQL服务器端 CMD 连接 MySQL服务器端 1 mysql - h localhost或127. 0.0 . 1 - P 3306 - u root - p 密码 2 注意:在应用过程中,其实如果是本机, - h与 - P是可以省略不写的 退出MySQL服务器端 CMD 退出 MySQL服务器端 1 quit或exit 使用SQL语句【查看】数据库 ①显示 所有 数据库,基本语法: 1 show databases; // 显示所有数据库 2 特别注意:每一条SQL语句的末尾必须分号(英文状态下) ②显示 指定 数据库,基本语法: 1 show databases like ‘匹配符’; 2 匹配符: 3 % :匹配任意个字符,如info % 4 _ : 匹配任意某个字符,只匹配一个字符,如o_ 使用SQL语句【创建】数据库 基本语法: 1 create database 数据库名称 [ 库选项 ] ; 2 库选项: 3 字符集:存储数据时需要使用的字符集,utf8或gbk 4 校对集:数据比较时所使用的比对规则,_bin,_ci,_cs,一般是默认的 ①默认情况下不能使用关键字作为数据库的名称

MySQL高可用之组复制(4):详细分析组复制理论

纵然是瞬间 提交于 2020-05-07 19:17:03
MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制(4):组复制理论透彻分析 这一篇对MySQL组复制做个详细的整理和解释,是 MySQL组复制官方手册 的整理版和总结。 <a name="blog1"></a> 1.组复制插件架构图 MySQL组复制是一个MySQL插件,它基于常规的MySQL复制,利用了基于 行格式的二进制日志和GTID 等特性。下图是MySQL组复制的整体框架图。 以下是对该图中各组件的大致介绍,涉及到的术语先浏览一遍,后面会详细解释。 从上图的最顶端开始,有一系列的API控制组复制插件如何和MySQL Server进行交互(图中灰色方框)。 中间有一些接口可以使信息从MySQL Server流向组复制插件,反之亦然。这些接口将MySQL Server核心部分和插件隔离开来。在Server到插件的方向上,传递一些通知信息,例如server正在启动,server正在恢复,server已准备好接收连接,server将要提交事务等等。另一方向,即插件到server的方向上,插件会通知server对事务进行提交,终止正在进行的事务,将事务放进relay-log中排队等等。 从API往下是一些响应组件

初学mysql(二)

有些话、适合烂在心里 提交于 2020-05-06 23:39:07
1.MYSQL优势(一般中小型企业公司使用MYSQL) 1.运行速度快;快不快要靠编写大型项目才可看出 2.使用成本低;普通用户几乎不收费,企业收费但是只会收取初步费用,开放原代码 3.可移植性强;可以直接导出文件,也可随时打开文件 4.适用用户广;适合所有人群使用(初学者还有公司) 2.MYSQL的运行机制 理解Java代码通过接口在连接池内验证授权,如果验证不成功则返回不成功的代码给到Java,如果研制成功找到缓存,则将找到的缓存返回给Java, 如果未找到缓存则优化、解析、查询,在储存引擎寻找相应内容。 3.MYSQL的配置 1.端口号:3306 (可在防火墙中找到) 2.默认字符:utf8 (如果不同则有时会乱码) utf8(一种Unicode编码,解决国际上字符不统一的多字节编码,通用性强) 3.将bin写入目录中 4.设置密码,账户名默认为:root 4.MYSQL安装目录 1.my.ini:记录MYSQL配置信息,可修改配置内容,如端口号,字符集等(my.ini可在电脑MYSQL文件中找到) 2.修改my.ini之后必须重启MYSQL服务才可以进行修改成功 5.dos运行MYSQL 打开DOS命令输入 : mysql -u root -p 密码 则可以在DOS命令中登录 6.sql代码(分号是结束符,不可缺少) 1.创建数据库:create database 数据库名

已拿offer热乎乎的蚂蚁金服面经分享,建议收藏(Java岗、附答案)

醉酒当歌 提交于 2020-05-06 09:13:59
前言: 由于作者面试过程中高度紧张,本文中只列出了自己还记得的部分题目。 经历了漫长一个月的等待,终于在前几天通过面试官获悉已被蚂蚁金服录取,这期间的焦虑、痛苦自不必说,知道被录取的那一刻,一整年的阴霾都一扫而空了。 笔者面的是阿里的Java研发工程师岗,面试流程是3轮技术面+1轮hr面。 1.意外的一面 一面的时候大概是3月12号,面完等了差不多半个月才突然接到二面面试官的电话。一面可能是简历面,所以问题比较简单。 ArrayList和LinkedList区别 ArrayList 是一个可改变大小的数组。当更多的元素加入到ArrayList中时,其大小将会动态地增长。内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组, LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList。 当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义。 什么情况会造成内存泄漏 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点: 首先,这些对象是可达的,即在有向图中,存在通路可以与其相连; 其次,这些对象是无用的,即程序以后不会再使用这些对象。 如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏