Mark

delete后加 limit是个好习惯么 !

十年热恋 提交于 2021-01-03 11:37:34
作者: _陈哈哈 blog.csdn.net/qq_39390545/article/details/107519747 在业务场景要求高的数据库中,对于单条删除和更新操作,在 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 会覆盖在之前删除的数据上

JVM垃圾回收机制是怎样的,何时触发YoungGC或FullGC操作?

点点圈 提交于 2021-01-03 00:17:04
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于 JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)关于垃圾回收 JAVA的垃圾回收需要完成三件事情: 1、哪些内存需要回收 2、什么时候回收 3、如何回收 下面就从这三个问题出发去了解Java的垃圾回收机制。 (二)哪些垃圾需要回收 在垃圾回收之前,首要的问题是确定哪些垃圾需要被回收,现在Java通过根搜索算法(GC Roots Tracing)来判断一个对象是否存活,这个算法的思路就是通过一系列名为“ GC Roots ”的对象作为起始点,从这些节点向下搜索,当GC Roots到达不了这个某个对象时(或者说某个对象没有被任何其他对象所引用),就证明这个对象是不可用的,这些对象会被判定为需要回收的对象。 如图,ObjC是不可达的,这个对象就是需要被回收的对象。 在Java语言中,可作为GC Roots的对象包括下面这些: 1、虚拟机栈(栈帧中的本地变量表)中引用的对象 2、方法区中的类静态属性引用的对象 3、方法区中的常量引用的对象 4、本地方法栈(Native方法)引用的对象 (三)什么时候回收 关于如何回收的问题,我参考了《深入理解Java虚拟机》,根搜索算法中不可达的对象,并不是立刻就会被回收,而是会经过一次标记: 如果对象没有覆盖finalize()方法,或者finalize(

初始化

ぃ、小莉子 提交于 2021-01-01 19:35:24
原文链接 http://zhhll.icu/2020/04/29/java%E5%9F%BA%E7%A1%80/java%E5%9F%BA%E7%A1%80%E4%B9%8B%E5%88%9D%E5%A7%8B%E5%8C%96/ 初始化顺序 在类中变量定义的顺序决定了它们初始化的顺序。 public class House { // 构造器之前 Window w1 = new Window(1); House(){ System.out.println("House()"); Window window = new Window(11); } // 构造器之后 Window w2 = new Window(2); void f(){ System.out.println("f()"); } Window w3 = new Window(3); public static void main(String[] args) { House house = new House(); house.f(); } } public class Window { public Window(int mark){ System.out.println("Window("+mark+")"); } } 执行结果 Window(1) Window(2) Window(3) House()

CSS3-flex弹性布局之flex属性

左心房为你撑大大i 提交于 2020-12-31 10:14:40
flex属性 前置 flex大致分为两类属性: 容器属性 和 项目属性 (容器内部项目的属性)。 这里的flex属性如 flex:1 就给容器内部项目的设置属性。 <mark>示例</mark> html <div id="wrap"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> <mark>解释</mark> 这里的wrap就是容器,item我们称作项目。 我们还需要知道 flex 属性是 flex-grow , flex-shrink 和 flex-basis 的简写,默认值为 0 1 auto 。后两个属性可选。 接下来我们逐一介绍这三个属性: 1.flex-grow 2.flex-shrink 3.flex-basis flex-grow flex grow 属性设置flex容器中的 可用空间 应分配给该项的大小。 如果所有同级项目都具有相同的值,则所有项目将获得相同的可用空间份额,否则将根据定义的不同比率进行分配。 <mark>示例</mark> css :root { background-color: #fff; --border: 1px solid

MapStruct

泄露秘密 提交于 2020-12-31 00:11:06
1.什么是MapStruct      简单来说,MapStruct 可以将某几种类型的对象映射为另外一种类型,如将多个 DO(业务实体对象) 对象转换为 DTO(数据传输对象),避免了在业务代码内new DTO对象和不断的进行set方法 2.如何使用MapStruct    (1)引入Maven依赖      <!--mapStruct依赖--> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <scope>provided</scope> <version>1.2.0.Final</version> </dependency>   (2)使用     此处假设将两个实体对象(StudentInfo,classInfo)转换为一个DTO(StudentInfoDTO)      @Data public class StudentInfo { /** * 姓名 */ private

java gc

瘦欲@ 提交于 2020-12-28 08:06:40
Garbage Collection 自动垃圾回收即在堆空间中识别被引用的对象以及未被引用的对象, 然后删除未被引用的对象的过程。 基本步骤: Marking(标记): 识别被引用的对象, 以及未被引用的对象。 所有的对象都会被扫描。 Normal Deletion(正常删除): 删除未被引用的对象, 引用的对象会被保留, 并且memory allocator会保存空闲块的引用。 或: Deletion with Compacting(删除并压缩): 删除未被引用的对象, 把被引用的对象移动到一起, 方便后面的内存分配。 Generatiional Garbage Collection 标记并压缩对象是不够高效的, 并且多数对象只存活很短的时间, 因此就有了Generational Garbage Collection。 由此, Java堆被分成了三块:新生代, 老年代和永生代, 其中新生代被分为eden, s0, s1三块。 新生代是对象被新建以及变老的地方, 当新生代空间被填满时就会运行minor garbage collection(小型垃圾回收)。 老年代是存储存活时间较长的对象的地方, 基本上jvm会为新生代的对象设置一个阈值, 当新生代的对象经历过指定的次数没有被回收就会被移入老年代。 老年代运行的垃圾回收叫做major garbage collection

java面试题之synchronized和lock有什么区别

情到浓时终转凉″ 提交于 2020-12-27 00:58:59
synchronized和lock的区别: 类别 synchronized lock 存在层次 java的关键字,在jvm层面上 是一个类 锁的释放 1、以获取锁的线程执行完同步代码,释放锁 2、线程执行发生异常,jvm会让线程释放锁 在finally中必须释放锁,不然容易造成线程死锁 锁的获取 假设A线程获得锁,B线程等待, 如果A线程阻塞,B线程会一直等待 分情况而定,lock有多个锁获取的方法,可以尝试获得锁, 线程可以不用功一直等待 锁状态 无法判断 可以判断 锁类型 可以重入,不可以中断,非公平 可重入 可以判断 可公平 性能 少量同步 大量同步 synchronized使用方式及原理: 作用在方法上: public synchronized void test(){}//作用在方法上JVM采用ACC_SYNCHRONIZED标记符来实现同步的; 作用在代码块上: synchronized (SynchronizedTest. class ){}//作用在同步代码块上JVM是采用monitorenter和monitorexit两个指令来实现同步的; java对象头:   synchronized用的锁是存在java对象头里的,java对象头一般占有两个机器码(在32位虚拟机中,1个机器码等于4字节,也就是32bit),那么什么是java对象头呢

斯坦福被炮轰:用算法分配5000支新冠疫苗,医护人员只有7支

一曲冷凌霜 提交于 2020-12-25 09:19:52
本文经AI新媒体量子位(公众号ID:qbitai)授权转载,转载请联系出处 本文 约1500字 ,建议阅读 5 分钟 你怎么看?该怎么分? “5000支新冠疫苗,只有7支是为医护人员准备的。” 这是斯坦福最新被曝光的「疫苗分配计划」。 辉瑞疫苗紧急获得FDA批准之后,斯坦福大学有了第一批5000支疫苗接种对象名单。 但在这些接种对象中,医护人员名额只占0.1%。 嗯,只有7个人被选中。 但在斯坦福大学,有1300多名医护人员、研究员,相当于只有0.5%医护人员被分配到此次名单里。 相反的,一些在家工作、不需要每日面对新冠患者的资深教员,反而大批量的被选中接种疫苗。 而这件事的始作俑者,竟是一个 算法 ? 斯坦福医学发言人Lisa Kim表示, 我们对疫苗分配计划执行中的错误承担全部责任。 我们原本意图是制定一个道德、公平的疫苗分配程序。 对此,LeCun在社交网络上炮轰:这个“算法程序”是人用Excel选的吧。 事件详情 这件事之后,斯坦福大学医学中心不太平静。 有超过100多名医生举行了抗议活动,不少医生举出「SHAME ON STANFORD」,「LACK OF PRIORITY」。 还有一些人表示,一线医生是这次疫情的HERO,但得到的支持却为ZERO。 其中,一位急诊室的医生Daniel Hernandez博士说, 我在这里抗议是因为我们被多次许诺,将在第一波接受疫苗接种。

Jvm参数调优

核能气质少年 提交于 2020-12-23 08:31:39
-Xms4096m:初始堆内存4g -Xmx4096m:最大堆内存4g -Xmn1024m:年轻代1g -Xss256K:每个线程占用的空间 -XX:+DisableExplicitGC:禁止显示调用gc -XX:MaxTenuringThreshold=15:在年轻代存活次数 -XX:+UseParNewGC:对年轻代采用多线程并行回收 -XX:+UseConcMarkSweepGC:年老代采用CMS回收 -XX:+CMSParallelRemarkEnabled:在使用UseParNewGC 的情况下, 尽量减少 mark 的时间 -XX:+UseCMSCompactAtFullCollection:在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少 -XX:LargePageSizeInBytes=128m:指定 Java heap的分页页面大小 -XX:+UseFastAccessorMethods:get,set 方法转成本地代码 -XX:+UseCMSInitiatingOccupancyOnly:指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集 -XX

STM32 PWM输出

╄→尐↘猪︶ㄣ 提交于 2020-12-22 06:21:38
PWM 脉冲宽度调制 由TIMx_ARR确定频率,由TIMx_CCRx确定占空比 两种PWM模式 1 TIMx_CNT<TIMx_CCRx 时为有效电平 2 TIMx_CNT>TIMx_CCRx 时为有效电平 PWM输出配置步骤 使能时钟(定时器时钟和相关IO口时钟) RCC_APB1PeriphClockCmd(); RCC_APB2PeriphClockCmd(); IO口做为复用功能输出,初始化IO口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//选择对应的引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PC端口 如果IO口要做重映射,还要使能AFIO时钟 //未做重映射 定时器初始化 TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM