浮躁 没有目标,现在感觉做啥都不想老老实实的干,老是想搞快钱
.Net Core定时调度hangfire:让应用程序在IIS上始终运行 第一步、设置应用程序池
1、在应用程序池的基本设置中,将.NET CLR 版本 设置为 v4.0.30319,管理管道模式为 “集成”
2、在高级设置中,将启动模式设置为 “始终运行”,将空闲超时(分钟)设置为 0
第二步、设置配置编辑器
点击进入配置编辑器
选择system.webServer/applicationInitialization节点,将doAppInitAfterRestart设为true,并点击"集合"行的后方省略号点击添加,输入如下两个内容:
hostName:Hangfire 应用程序的 URL 主机
initializationPa 完美解决dotnet-install.sh下载出错 问题现象
Linux正常通过dotnet-install.sh安装dotnet(本篇以安装dotnet-runtime为例)时,会显示以下信息:
dotnet-install: Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:
dotnet-install: - The SDK needs to be installed without user interaction and without admin rights.
dotne mysql主从同步方式(mysql主从同步实现) 主从同步的定义
主从同步允许您将数据从一个数据库服务器复制到另一个数据库服务器。 复制数据时,一个服务器作为主服务器(master ),其余的服务器作为从服务器(slave )。 由于复制是异步进行的,从服务器不需要总是连接到主服务器,从服务器也可以通过拨号间歇地连接到主服务器。 配置文件允许您指定所有数据库、数据库甚至数据库上的表的复制。
使用主同步的好处:
通过增加从服务器来提高数据库性能,在主服务器上执行写入和更新,在从服务器上向外部提供读取功能,可以动态调整从服务器的数量,从而调整数据库的整体性能。
提高数据的安全性。 数据被复制到从服务器,从服务器可以结束复制过程,因此可以在从服务器 谈谈如何在EF CORE中实现读写分离:构建高性能的EF CORE 前言:
其实在部分公司不是很推崇使用ORM框架,说是ORM框架存在性能问题;这句话可以说是让ORM蒙受不白之冤;笔者认为:没有低性能的框架,只有不会使用框架的开发者!更多时候,是因为数据库的性能问题;ORM在开发中可以说是被殃及的池鱼!那么本篇文章就介绍如何通过EFCore如何来配合数据库提高性能;那么如何来做的,得先从数据库下手,最常规,最推崇的就是数据库读写分离;那么如何使用EFCore配合使用数据库读写分离呢?
数据库读写分离
在实际开发工作中,对数据的操作有一个二八原则,20%的操作是数据的增删改,80%的操作是数据库查询,那么把这80%的数据存储在多个数据库中,有选择性的去查询数据; 定时器中断控制LED #include <REGX52.H>
#include <INTRINS.H>
typedef unsigned int u16; // 对系统默认数据类型进行重定义
// 定义LED1管脚
sbit LED1 = P2 ^ 0;
/*
定时器中断模式1初始化 1ms 触发
t:0 定时器0,1 定时器1
*/
void timeInterruptModeOneInit(bit t)
{
// 选择为定时器0模式,工作方式1 |为或运算符 等同于 0x00000000 | 0x00000001
if(t==0){
TMOD |= 0X01;
ET0 = 最全的MyBatis使用指南 1. 为啥要用 MyBatis
我们作为一个程序员,主要工作归根结底就是和数据打交道。而使用 java 操作数据库的原始方式就是 JDBC。
先看看使用 JDBC 方式是如何操作数据库的:
// 1. 加载配置文件
Properties pro=new Properties();
pro.load(new FileReader("resource/jdbc.properties"));
// 2. 获取配置文件中连接数据库的信息
String url=pro.getProperty("url");
Stri C# 小端转大端 Little Endian to Big Endian 什么是大端和小端
Big-Endian和Little-Endian的定义如下:
Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:
1)大端模式:
低地址 -----------------> 高地址
0x12 | 0x34 | 0x56 | 0x78
2)小端模式:
低地址 ------------------> 高地址
0x78 | 0x56 | 0x34 | 外部中断控制LED #include <REGX52.H>
#include <INTRINS.H>
// 定义LED1管脚
sbit LED1 = P2 ^ 0;
/*
*外部中断0初始化
*触发方式 type 1:下降沿 0:低电平
*/
void externalInterrupt0Init(bit type)
{
IT0=type;
EX0=1;//打开INT0的中断允许
EA=1;//打开总中断
}
/**
* 11.0592MHZ毫秒级延迟
*/
void Delayms(unsigned int m) //@11.0592MHz
{
Ubuntu之搭建nginx图片服务器 背景
客户端访问服务器端图片时,需要在服务器端部署图片服务器,本文采用nginx的方案
安装nginx
建议采用源码安装nginx,这样配置文件比较全,如果使用apt-get安装过nginx,建议先卸载掉,卸载方式如下
注意点:首先需要停止nginx的服务
sudo service nginx stop
删除nginx,–purge包括配置文件
sudo apt-get --purge remove nginx
自动移除全部不使用的软件包
sudo apt-get autoremove
列出与nginx相关的软件 并删除显示的软件
dpkg --get-selections|grep n Linux开放指定端口命令(CentOS) 1、开启防火墙
systemctl start firewalld
2、开放指定端口
firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
--zone #作用域
--add-port=1935/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
3、重启防火墙
firewall-cmd --reload
4、查看端口号
netstat -ntlp //查看当前所有t vue h5 video 多视频无缝切换 思路
页面中创建两个 video 标签
在组件加载时同时加载两个视频资源(autoplay),暂时不播放的视频在 canplay 事件中调用暂停方法,使之实现预加载
使用绝对定位将预加载的视频移出可视窗口
第一个视频结束后,通过 ended 事件播放之前预加载的视频,同时将当前 src 切换为下一个需要播放的视频地址,完成缓存
核心代码
<video ref="video" :class="{'video-hide':!playVideoTag}" autoplay @ended="onEnded( node实现多路视频播放的流媒体服务器 1. node-rtsp-stream
通过node调用, ws方式, 输出的是MPEG-TS格式的视频流; 接着通过JSMpeg喂给canvas;
缺点 : 只能同时播放一路视频
优点 : 低延时,1s
改进 : 可以自行二次封装,支持多路播放;
2. ke-rtsp
一种基于Media Source Extensions(简称MSE)技术实现的html5实时视频直播方案。Node.js调用ffmpeg包装rtsp流,然后通过socket.io转发包装后的流,前端html5获取流数据并通过MSE把流一点一点喂给video标签进行视频播放。能够支持谷歌浏览器、火狐浏览器、Edge浏览器、安卓原 海康SADPTool代码实现 SADPTool原理:
向239.255.255.250:37020发送基于ONVIF协议的 udp 组播,设备会监听 239.255.255.250:37020,收到指令,会向 发送组播的机器,返回设备信息,也会向239.255.255.250:37020 发送 设备信息的 组播。
发送 报文(Uuid是Guid,每次都生成一个新的)
<?xml version="1.0" encoding="utf-8"?><Probe><Uuid>12D17626-0DE1-48DB-97E3-40B106467932</ 海康摄像头通过isapi 操作摄像头 HttpHelper.cs
/// <summary>
/// get 请求
/// </summary>
/// <param name="url"></param>
/// <param name="headers"></param>
/// <returns></returns>
public static async Task<string> GetAsync(string url, IList<KeyValuePair<str MySQL之库表设计 引言
为掘金社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!
MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表结构,这种随心所欲的设计方式,无疑给开发造成了很大困扰。
但实际上设计DB库表结构时,也有一些共同需要遵守的规范,这些规范在数据库设计中被称为“范式”,理解并掌握这些设计时的规范,能让咱们在项目之初,设计的库表结构更为合理且优雅。数据库范式中,声名远扬的有三大范式,但除此之外也有一些其他设计规范,如:
①数据库 C# 中的 HashSet HashSet 是一个优化过的无序集合,提供对元素的高速查找和高性能的set集合操作,而且 HashSet 是在 .NET 3.5 中被引入的,在 System.Collection.Generic 命名空间下,这篇就来讨论一下如何使用这个 HashSet。
要运行本篇文章的案例代码,你需要安装一下 Visual Studio 2019,如果没有的话可以到官网下载一下。
使用 VS 创建一个 .NET Core 控制台程序
首先,我通过 VS2019 创建一个 .NET Core 控制台程序,创建可以参考下面步骤:
打开 Visual Studio IDE
点击创建 Create new p 青语言 无意中发现最新发布的中文编程语言,基于.net开发的,比较感兴趣,研究研究
官网地址 https://qingyuyan.cn/
C# 堆与栈 前言:今天我们着重讲解.Net下的栈(Stack)和托管堆(Heap)(简称堆)。如果你想提高程序性能,理解栈和堆,那学习这块更是必须的!
一、C#中的值类型和引用类型
在讲堆与栈之前,我们先看看值类型和引用类型,这样更能帮助我们理解堆与栈。
通过上面这个表格,我们可以看到,类型被分为两种:值类型(基本数据类型、枚举类型、结构类型)和引用类型(类、接口、数组)。
下来,我们进行简单理解:
值类型只需要一段单独的内存,用于存储实际的数据(单独定义的时候放在栈中)。
引用类型需要两段内存。
第一段存储实际的数据,它总是位于堆中。
第二段是一个引用,指向数据在堆中的存放位置。
C# interface (接口) 定义
在 C# 语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的。一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承。无论是表示类之间的继承还是类实现接口、接口之间的继承,都使用“:”来表示。
接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。
定义接口语法:
interface 接口名称
{
接口成员;
}
接口命名通常以 I 字母开头,例如Itest。
接口成员, C# class(类) class (类)
定义为 class 的类型是引用类型。 在运行时,如果声明引用类型的变量,此变量就会一直包含值 null,直到使用 new 运算符显式创建类实例,或直到为此变量分配可能已在其他位置创建的兼容类型的对象
//Declaring an object of type MyClass.
MyClass mc = new MyClass();
//Declaring another object of the same type, assigning it the value of the first object.
MyClass mc2 = mc;
创建对象时,在该托管堆上为 C# global global
global关键字,就是字面的意思,全局。
其实有些时候会犯一些错误,就是类名取了一个跟系统类名雷同的情况,其实这是设计上的失误,但是会出现一个情况就是没改了,那么global关键字就起到了作用。
如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace globalFunc
{
class Program
{
static void Main(string[] args)
{
C# using using 的使用
引入命名空间
在 C# 编程中,命名空间在两个方面被大量使用。 首先,.NET 使用命名空间来组织它的许多类,如下所示:
System.Console.WriteLine("Hello World!");
System 是一个命名空间,Console 是该命名空间中的一个类。 可使用 using 关键字,这样就不必使用完整的名称,如下例所示:
using System;
Console.WriteLine("Hello World!");
引入指定命名空间后我们就可以使用指定命名空间的对象了
命名空间具有以下属性:
它们组织大 C# Main 函数 Main() 和命令行参数
Main 方法是 C# 应用程序的入口点。 (库和服务不要求使用 Main 方法作为入口点)。Main 方法是应用程序启动后调用的第一个方法。
C# 程序中只能有一个入口点 如下示例:
class TestClass
{
static void Main(string[] args)
{
// Display the number of command line arguments.
Console.WriteLine(args.Length);
}
}
自 C# 9 起,可以省略 Main 方法,并像在 M 初识C# C#(读作See Sharp),它是一门高级编程语言,所谓高级是指,编程分为几个阶段:
机器语言
由0和1组成,这也是机器能识别的语言,为什么机器能识别呢,简单来说1代表高电压,0代表低电压,硬件中通过高低电压控制其行为,故称其为机器语言
汇编语言
也称之为低级语言,由于0和1对于人类来说不好记,故在机器语言的基础上发展出汇编语言,汇编语言需要编译器将其转换为机器语言
高级语言
主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。编写的程序称之为源程序
像 C,C++,C#,Java...都是高级语言,在这里我们就是学习的 c# 更换桌面壁纸 public class WinAPI
{
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
}
private void changeImg()
{
string bmpPath = @"C:\Docum 使用.net 6.0框架的WPF应用如何引用System.Windows.Forms这个dll 在.net 6.0的WPF应用中,想使用OpenFileDialog 这个类或者FolderBrowserDialog这个类,是无法找到System.Windows.Forms这个dll引用的,即使从系统C盘里搜索到System.Windows.Forms.dll放到项目里,也会出现异常,而无法识别WPF自带的一些初始化方法。
OpenFileDialog还好,因为他有两个命名空间都有它,一个是Microsoft.Win32,一个是System.Windows.Forms,无法引用System.Windows.Forms还可以退而求其次使用 using Microsoft.Win32;
以前的 小米错过了做自己的手机操作系统最佳时期 在国外西方国家禁止华为使用使用安卓操作系统的时候,华为迎难而上,推出自己的操作系统,虽然它到底是不是一个完全区别于安卓的一个系统备受争议,但华为的举动向外界发出了一个信号,那就是自己开发了一个完全属于自己的操作系统,即使还没有太多的开发者追随,但是在这个关键的社会注意力都集中到手机操作系统的时机,华为把握住了,国外围剿华为限制安卓使用此乃天时,国内人民极大的关心并希望推出自己的手机操作系统,此乃人和,由于华为的国外市场占有很大的份量,西方国家限制其使用安卓对它有重大影响,反而是小米,因其主要市场是亚洲中国,导致其对此压力并不大,小米对推出自己的手机操作系统动力并不强,而且小米认为重新培养一个操 ASP.NET Core 搭配 Nginx 的真实IP问题 一.前言
Nginx(Engine X)是一个高性能HTTP和反向代理服务,是由俄罗斯人伊戈尔·赛索耶夫为访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 如果你是一名 ASP.NET Core 开发人员,并且你的 ASP.NET Core 应用部署在Linux上,相信你应该或多或少与 Nginx 有过接触,在我们将 ASP.NET Core 部署在 Linux 上时,它是被用做反向代理的最好选择之一。今天和大家聊一聊当我们使用了 Nginx 反向代理后,我们程序中获取真实IP(客户端真实ip,本文简称“真实IP”)的问 单片机串口接收发送数据 STC89C516RD+ 串口接收发送数据
#include <REGX52.H>
#include <Time.H>
/**
* @brief 初始化串口通信
*
*/
void UART_Init(unsigned char baud)
{
TMOD |= 0x20; // 计时器工作模式2
SCON = 0x50; // 串口工作模式1
PCON = 0x80; // 波特率加倍
TH1 = baud;
TL1 = baud;
ES = 1; // 打开串口中断
EA = 1; // 打 8051单片机中断寄存器 中断允许寄存器IE
寄存器
地址
7
6
5
4
3
2
1
0
IE
0xA8
EA
ES
ET1
EX1
ET0
EX0
EA:CPU 中断允许(总允许)位
ES:串行口中断允许位
ET1:定时/计数器 T1 中断允许位
EX1:外部中断 0 允许位
ET0:定时/计数器 T0 中断允许位
EX0:外部中断 0 允许位
中断请求标志 TCON
寄存器
地址
7
6
5
4
3
2
1
0
TCON
0x88
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TF1:定时/计数器 T1 溢出中断请求标志位
TR1:T1 运行控制位 单片机STC89C52控制LCD1602显示器 实现环境 STC89C516RD+
相关代码如下
LCD1602.c
#include <REGX52.H>
//引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0
//函数定义:
/**
* @brief LCD1602延时函数,12MHz调用可延时1ms
* @param 无
* @retval 无
*/
void LCD_Delay()
{
unsigned char i, j;
i = 2;
j = 239;
do
{
w vscode 开发51单片机 我安装并测试成功的环境:
操作系统:Windows 10 (22H2)
单片机:STC89C52RC
Python version: 3.7.6
在这之前,给51单片机写程序是用 Keil 5(编写+编译)、STC-ISP(烧录),由于切换应用比较麻烦,并且不够美观,所以尝试使用熟悉的 Visual Studio Code 来完成这些操作。
安装 stcgal
stcgal 是用来向STC单片机烧录程序的命令行工具,在 VS Code 中需要调用它来完成一键烧录操作。
需要安装好 Python 和 Pip:
PS C:\Users\username\Desktop> python -V
网络编程之化身一个请求感受浏览器输入URL后奇妙的网络之旅! 引言
在浏览器上输入一个URL后发生了什么? 这也是面试中老生常谈的话题,包括网上也有大量关于这块的内容:
从百度的搜索结果来看,能够搜到七千多万条记录,因此本篇不会再以那种前篇一律的方式赘述,而是以目前较新的网络内容,结合系统中的大部分服务,将自己类比成一个请求,切身感受到每个技术栈的具体细节,彻底从“根儿上”理解客户端请求-服务端响应的全过程。
本篇以https://www.juejin.cn/为例进行分析,当然,这里假设掘金后端是Java做的(实际上掘金好像是基于Node做的后端)。
一、地址栏输入后本地会发生的事情
当我们在浏览器的地址栏中,输入xxx内容后,浏览器的进程首先会 MySQL之死锁问题 引言
经过《MySQL锁机制》、《MySQL-MVCC机制》两篇后,咱们已经大致了解MySQL中处理并发事务的手段,不过对于锁机制、MVCC机制都并未与之前说到的《MySQL事务机制》产生关联关系,同时对于MySQL锁机制的实现原理也未曾剖析,因此本篇作为事务、锁、MVCC这三者的汇总篇,会在本章中补全之前空缺的一些细节,同时也会将锁、MVCC机制与事务机制之间的关系彻底理清楚。
一、MySQL中的死锁现象
还记得咱们在《MySQL锁机制》这篇文章中,描述事务、连接、线程三者关系的那段话嘛?
所谓的并发事务,本质上就是MySQL内部多条工作线程并行执行的情况,也正由于MySQL是多线程应 MySQL之MVCC机制 引言
在《MySQL锁机制》这篇文章中,咱们全面剖析了MySQL提供的锁机制,对于并发事务通常可以通过其提供的各类锁,去确保各场景下的线程安全问题,从而能够防止脏写、脏读、不可重复读及幻读这类问题出现。
不过成也萧何败也萧何,虽然MySQL提供的锁机制确实能解决并发事务带来的一系列问题,但由于加锁后会让一部分事务串行化,而MySQL本身就是基于磁盘实现的,性能无法跟内存型数据库娉美,因此并发事务串行化会使其效率更低。
也正是由于上述原因,因此MySQL官方在设计时,抓破脑袋的想:有没有办法再快一点!!最终,MVCC机制就诞生了,相较于加锁串行化执行,MVCC机制的出现,则以另一种形式解决了 MySQL索引原理 引言
本篇也是MySQL索引机制的终章,在经过《索引初识篇》、《索引应用篇》两篇后,已经对索引有了很高的掌握度了,但MySQL的索引机制,自始至终对于我们都是一个黑盒般的存在,我们并不清楚建立索引后MySQL会发生什么,也并不清楚使用索引查询时会如何检索…。甚至在前两篇文章中,对于索引咱们也留下了很多很多的疑惑:
那么!《索引原理篇》它现在终于来了!但对于索引原理及底层实现,相信大家多多少少都有了解过,毕竟这也是面试过程中出现次数较为频繁的一个技术点。在本文中就来一窥MySQL索引底层的神秘面纱!
一、MySQL索引为何使用B+树结构?
MySQL的索引机制中,有一点可谓是路人皆知,既默 51单片机LED灯光闪烁示例代码 单片机型号 STC89C516RD+
#include <REGX52.H>
#include <INTRINS.H>
void Delayms(unsigned int m) //@11.0592MHz
{
unsigned int n;
for(n=0;n<m;n++){
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1){
P2_0=0 MySQL索引应用 引言
数据库索引,绝对是MySQL的核心功能之一,如果没有索引机制的数据库,那数据的检索效率绝对是令人无法接受的,毕竟没有索引的表数据,就如同一个普通的文本文件存储在磁盘中。在《索引上篇》中,我们对于MySQL提供的索引机制,从引入,到创建、使用、分类、管理…等进行了全面阐述,相信经过上一篇的讲解后,大家对MySQL索引机制建立了系统化的认知,而本篇则会以上篇为基础,对索引机制进一步加深掌握。
不过在上篇中虽对数据库索引机制有了完善认知,但还不够,因为上篇仅是单纯的认知阶段,能否真正的在实际项目中运用好索引机制,还需要具备丰富的经验以及一些原则与方法论,比如下述一些关于索引的问题:
索引虽然 MySQL之索引初识 引言
由于MySQL是作为存储层部署在业务系统的最后端,所有的业务数据最终都要入库落盘,但随着一个项目在线上运行的时间越来越久,数据库中的数据量自然会越来越多,而数据体积出现增长后,当需要从表查询一些数据时,效率会越发低下。在正常情况下,表的查询性能和数据量是成反比的,也就是数据越多,查询越慢。
这是什么原因导致的呢?由于MySQL默认的查询方式导致的,举个例子~
SELECT * FROM `zz_student`;
+------------+--------+------+--------+
| student_id | name | sex | height |
+----- MySQL锁机制 引言
锁!这个词汇在编程中出现的次数尤为频繁,几乎主流的编程语言都会具备完善的锁机制,在数据库中也并不例外,为什么呢?这里牵扯到一个关键词:高并发,由于现在的计算机领域几乎都是多核机器,因此再编写单线程的应用自然无法将机器性能发挥到最大,想要让程序的并发性越高,多线程技术自然就呼之欲出,多线程技术一方面能充分压榨CPU资源,另一方面也能提升程序的并发支持性。
多线程技术虽然能带来一系列的优势,但也因此引发了一个致命问题:线程安全问题,为了解决多线程并发执行造成的这个问题,从而又引出了锁机制,通过加锁执行的方式解决这类问题。
多线程、线程安全问题、锁机制,这都是咱们的老朋友了,相信之前曾认 MySQL事务篇 引言
众所周知,MySQL数据库的核心功能就是存储数据,通常是整个业务系统中最重要的一层,可谓是整个系统的“大本营”,因此只要MySQL存在些许隐患问题,对于整个系统而言都是致命的。那此刻不妨思考一个问题:
MySQL在接受外部数据写入时,有没有可能会发生问题呢?
有人也许会笑着回答:“那怎么可能啊,MySQL在写入数据时怎么会存在问题呢”。
的确,MySQL本身在写入数据时并不会有问题,就算部署MySQL的机器断电/宕机,其内部也有一套健全的机制确保数据不丢失。但往往风险并不来自于表象,虽然MySQL写入数据没问题,但结合业务来看就会有一个很大的隐患,此话怎讲呐?先看案例:
-- 从库存 MySQL日志 引言
任何项目都会有日志,MySQL也不例外,而且MySQL更是其中的佼佼者,日志种类繁多,而本篇的目的就是全解MySQL中的各类日志,如撤销日志、错误日志、慢查询日志、中继日志、回滚日志…
其实日志的作用不言而喻,无论是线上排查,亦或是性能优化,几乎都需要从日志中来获得信息作为依据,而MySQL中,很多很多的功能也都需要基于日志实现,比如事务回滚、数据持久化、数据恢复、数据迁移、MVCC机制…,因此本篇去阐述日志,也是为了方便撰写后续的其他文章。
OK,废话不多说了,咱们现在就开始吧~
一、Undo-log撤销日志
Undo即撤销的意思,但咱们通常也习惯称它为回滚日志,在日常开发过程中, SQL语句执行过程 一、一条SQL是如何诞生的?
SQL语句都诞生于客户端,主要有两种方式产生一条SQL,一种是由开发者自己手动编写,另一种则是相关的ORM框架自动生成,一般情况下,MySQL运行过程中收到的大部分SQL都是由ORM框架生成的,比如Java中的MyBatis、Hibernate框架等。
同时,SQL生成的时机一般都与用户的请求有关,当用户在系统中进行了某项操作,一般都会产生一条SQL,例如我们在浏览器上输入如下网址:
https://juejin.cn/user/862486453028888/posts
此时,就会先请求掘金的服务器,然后由掘金内部实现中的ORM框架,根据请求参数生成一条SQ nuxt 引入富文本编辑器wangEditor,刷新就会报错?试试这个 引入wangEditor,第一次进入使用一切正常,一旦刷新,就会报错navigator is not defined或者document.getElementsByTagName is not a funciton.
为什么会出现这样的情况呢?
刷新的时候nuxt.js 会在服务器端渲染页面,而navigator和document是window对象,在客户端在可以访问的,所以会报错。
那该怎么解决呢?
其实非常简单,服务器端不能渲染,那等到服务器端渲染完了我们再加载组件就可以了。怎么做呢?可以用Vue的component标签,来动态的获取组件。
我们先看下官网文档,再根据官方文档进行修改。
官 MySQL架构 引言
无论你是前端还是后端,只要是一个合格的开发者,对于MySQL这个名词相信都不陌生,MySQL逐渐成为了最受欢迎的关系型数据库,无论你是大前端,亦或是Java、Go、Python、C/C++、PHP....等这些语言的程序员,对于MySQL是必然要掌握的核心技术之一,程序员不能没有MySQL,就像西方不能失去耶路撒冷一般。
当然,MySQL也不仅仅是唯一的数据库,与它类似的关系型数据库竞品还有很多,例如Oracle、SQLServer、PostgreSQL、DB2....,这其中使用最为广泛的是Oracle,但Oracle实际上并不怎么受程序员欢迎,或者说Oracle并不怎么受中小企业的B