Mark

delete后加 limit是个好习惯么

╄→尐↘猪︶ㄣ 提交于 2020-08-13 05:59:09
在业务场景要求高的数据库中,对于单条删除和更新操作,在delete和update后面加limit 1绝对是个好习惯。比如,在删除执行中,第一条就命中了删除行,如果SQL中有limit 1;这时就return了,否则还会执行完全表扫描才return。效率不言而喻。 那么,在日常执行delete时,我们是否需要养成加 limit 的习惯呢?是不是一个好习惯呢? 在日常的SQL编写中,你写delete语句时是否用到过以下SQL? delete from t where sex = 1 limit 100; 你或许没有用过,在一般场景下,我们对 delete 后是否需要加 limit 的问题很陌生,也不知有多大区别,今天带你来了解一下,记得mark! 写在前面,如果是清空表数据建议直接用truncate,效率上truncate远高于delete,应为truncate不走事务,不会锁表,也不会生产大量日志写入日志文件;truncate table table_name 后立刻释放磁盘空间,并重置auto_increment的值。delete删除不释放磁盘空间,但后续insert会覆盖在之前删除的数据上。详细了解请跳转另一篇博文 《delete、truncate、drop的区别有哪些,该如何选择》 下面只讨论delete场景,首先,delete后面是支持limit关键字的,但 仅支持单个参数

JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

旧街凉风 提交于 2020-08-13 05:31:27
如果想了解Java内存模型参考: jvm内存模型-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东) 相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋。 一、 技术背景你要了解吧 二、 哪些内存需要回收? 2.1 引用计数算法 2.1.1 算法分析 2.1.2 优缺点 2.1.3 是不是很无趣,来段代码压压惊 2.2 可达性分析算法 2.3 Java中的引用你了解多少 2.4 对象死亡(被回收)前的最后一次挣扎 2.5 方法区如何判断是否需要回收 三、常用的垃圾收集算法 3.1 标记-清除算法 3.2 复制算法 3.3 标记-整理算法 3.4 分代收集算法 3.4.1 年轻代(Young Generation)的回收算法 3.4.2 年老代(Old Generation)的回收算法 3.4.3 持久代(Permanent Generation)的回收算法 四、常见的垃圾收集器 五、GC是什么时候触发的(面试最常见的问题之一) 5.1 Scavenge GC 5.2 Full GC 结束语 一、 技术背景你要了解吧   按照套路是要先装装X,谈谈JVM垃圾回收的前世今生的。说起垃圾回收(GC)

Java基础之Synchronized原理

↘锁芯ラ 提交于 2020-08-13 05:00:00
思维导图svg: https://note.youdao.com/ynoteshare1/index.html?id=eb05fdceddd07759b8b82c5b9094021a&type=note 在多线程使用共享资源的时候, 我们可以使用synchronized来锁定共享资源,使得同一时刻,只有一个线程可以访问和修改它,修改完毕后,其他线程才可以使用。这种方式叫做互斥锁。 当一个共享数据被当前正在访问到线程添加了互斥锁之后,在同一时刻,其他线程只能等待,直到当前线程释放该锁。 synchronized可以添加互斥锁,并且保证被其他线程看到。 synchronized的三种应用方式 synchronized关键字最主要有以下3种应用方式,下面分别介绍 修饰实例方法,作用于当前实例加锁,进入同步代码钱要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁 synchronized作用于实例方法 我们设置类变量 static 为共享资源, 然后多个线程去修改。修改的含义是: 先读取,计算,再写入。那么这个过程就不是原子的,多个线程操作就会出现共享资源争抢问题。 我们在实例方法上添加synchronized,那么,同一个实例执行本方法时,抢到锁到可以执行。 public

详解图的各种令人心慌的概念和四种图的存储结构(整理到吐)

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-12 19:51:17
写在前面 :博主是一位普普通通的19届二本大学生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话 花开堪折直须折,莫待无花空折枝 :博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。 目录 : 1.图的基本概念 无向图有向图 完全有向图完全无向图 弧头和弧尾 入度和出度 (V1,V2) 和 <V1,V2> 集合 VR 的含义 路径和回路 权和网的含义 稀疏图和稠密图 连通图和强连通图 生成树生成森林 极大连通图和极小连通图 2.图的顺序存储结构(邻接矩阵) 3.图的邻接表存储结构 4.图的十字链表存储结构 1.图的基本概念 1.1无向图有向图 1.无向图:如果任意两个顶点之间的边都是无向边,那么该图称为无向图 2.有向图:如果任意两个顶点之间的边都是有向边,那么该图称为有向图 无向图: 有向图: 1.2完全有向图完全无向图 完全图:若图中各个顶点都与除自身外的其他顶点有关系,这样的无向图称为完全图,完全图分为完全有向图和完全无向图 完全无向图: 完全有向图: 在n个顶点的无向完全图中,有n(n-1)

全球资产管理平台提供商:Charles River Development 应用

蹲街弑〆低调 提交于 2020-08-12 17:10:28
Charles River Development 概述 于2006年出台的合格境内机构投资者 (QDII) 政策允许经过批准的中方银行、基金、证券机构和保险公司代表客户投资国际资产。这一政策最初仅限于固定收益和货币市场产品,后来发展成也包括股票基金。 QDII 政策让中国的资产经理有机会重新评估他们的前台和中台运作,专注于在更多种类的业务中自动化和简化他们的投资管理作业。在过去,这些作业都是通过表格或适 用于单一市场和单一币种的中国本地的系统进行的。QDII经理现在正在寻求类似Charles River Development这样的富有经验的国际技术提供商来改善他们的投资作业,以让他们的跨 境投资和中国国内投资业务采用行业最佳做法。 公司介绍 Charles River Development是一家荣获大奖的创新化技术系统和服务提供商,服务于全球30多个国家的机构投 资者、共同基金、银行、对冲基金、财富管理、保险和养老金行业内的315家以上的投资公司。 Charles River Investment Management Solution (Charles River IMS)是一种全面的前台和中台软件套件,适用于所有资产类别。这一系统通过与其完全集成的Charles River网络进行全球实时 FIX电子交易。Charles River Development也提供项目实施

【整理】JVM知识点大梳理

為{幸葍}努か 提交于 2020-08-12 15:05:41
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 ----来源:百度百科 前言: Java 虚拟机,是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件( .class )。 跨平台的是 Java 程序(包括字节码文件),,而不是 JVM。JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的 JVM 。 JVM 组成部分 类加载器,在 JVM 启动时或者类运行时将需要的 class 加载到 JVM 中。 内存区,将内存划分成若干个区以模拟实际机器上的存储、记录和调度功能模块,如实际机器上的各种功能的寄存器或者 PC 指针的记录器等。 执行引擎,执行引擎的任务是负责执行 class 文件中包含的字节码指令,相当于实际机器上的 CPU 。 本地方法调用,调用 C 或 C++ 实现的本地方法的代码返回结果。 1、类加载器

Pytest单元测试框架

不打扰是莪最后的温柔 提交于 2020-08-12 10:05:45
一、简介   pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。 二、安装   安装方法: 1 pip install -U pytest   安装成功,查询安装的版本号 1 pytest --version pytest常用的插件 pytest-selenium   集成 selenium pip install allure-pytest   生成漂亮的allure测试报告 pip install pytest-sugar   优化运行效果 pip install pytest-rerunfailures   执行用例失败后重新运行 pip install pytest-xdist   多线程并行与分布式执行 pip install pytest-assume   多条断言前面报错后面依然执行 pip install pytest-cover   测试覆盖率 三、Demo   新建test_one.py,输入以下代码,cmd至文件目录下,输入pytest运行 1 def func(x): 2 return x + 1 3 def test_answer(): 4 assert func(3) == 5 5 # assert func(3) == 4   运行pytest命令,或py

99 道 Java 多线程面试题,看完我跪了!

孤人 提交于 2020-08-12 05:52:47
今天给大家更新的是一篇关于多线程面试的文章,是根据时下热门的面试内容给大家进行总结的,如有雷同,请多见谅。 本篇文章属于干货内容!请各位读者朋友一定要坚持读到最后,完整阅读本文后相信你对多线程会有不一样感悟,下次面试和面试官也能杠一杠相关内容了。 1.什么是进程? 进程是系统中正在运行的一个程序,程序一旦运行就是进程。 进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。 2.什么是线程? 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 3.线程的实现方式? 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future 4.Thread 类中的start() 和 run() 方法有什么区别? 1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。然后通过此Thread类调用方法run(

他在太空中飘了一年,完成了400多项科学实验|专访

試著忘記壹切 提交于 2020-08-12 04:02:56
  斯科特 · 凯利 (Scott Kelly) 和马克 · 凯利(Mark Kelly)是人类航天领域最传奇的双胞胎兄弟,两人都作为 NASA 的宇航员多次进入太空。      图丨左边是 Scott,他在国际空间站生活了一年;右边是他的双胞胎兄弟 Mark,他在地球上负责控制工作(来源:NASA)   斯科特 · 凯利曾经幻想能飞去火星,虽然最终未能如愿,但阴差阳错成为了国际空间站上的“人类试验品”,为未来的人类火星之旅留下了宝贵的实验数据。   凯利兄弟一同参与了 NASA 火星计划中颇具野心的任务之一——双胞胎实验计划。斯科特和他的双胞胎哥哥马克共同参与了该实验计划,斯科特在太空生活,马克则留在地球。科学家期望通过对比他们两人的身体变化,能更进一步地了解太空生活对人体的影响。    图 | 马克(左)和斯科特(右)   这个实验让斯科特在空间站连续待了 340 天,从而创造了人类在太空中连续工作时长的新纪录。在此期间,斯科特绕地球飞行 2.3 亿公里,拍摄太空照片 713 张,完成了 400 多项科学实验。他在社交网络上的关注人数突破百万,时任美国总统奥巴马更是多次在推特上与他互动。斯科特堪称美国航天史上的代表性宇航员。   作为经历了 4 次太空飞行的航天老手,斯科特曾 3 次率队在空间站工作,加上这次近一年时间的太空之旅,斯科特的总体太空任务时间达到了 520 天

JVM 学习笔记(五)

让人想犯罪 __ 提交于 2020-08-12 02:21:22
前言:   前面的文件介绍了JVM的内存模型以及各个区域存放了那些内容,本编文章将介绍JVM中的垃圾回收Garbage Collector,和大家一起探讨一下。 如何确定一个对象是垃圾:   这里介绍两种方法: 引用计数法   对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何指针对其引用,它就是垃圾。 可达性分析   通过GC Root的对象,开始向下寻找,看某个对象是否可达。能作为GC Root:类加载器、Thread、虚拟机栈的本地变量表、static成员、常量引用、本地方法 栈的变量等。 垃圾回收算法:   已经能够确定一个对象为垃圾之后,接下来要考虑的就是回收,怎么回收呢?得要有对应的算法,下面聊聊常见的垃圾回收算法。 标记-清除(Mark-Sweep) 标记   找出内存中需要回收的对象,并且把它们标记出来。此时堆中所有的对象都会被扫描一遍,从而才能确定需要回收的对象,比较耗时。 如图:绿色的区域表示当前存活的对象,灰色表示垃圾对象,白色表示没有用到的内存碎片。 2. 清除   清除掉被标记需要回收的对象,释放出对应的内存空间。 有以下缺点: 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另 一次垃圾收集动作。 (1