
Java
文章平均质量分 78
Java-interview
这个作者很懒,什么都没留下…
展开
-
凡事千万不要看表面,SQL这八大坑一定不要再踩了
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。好吧,可能90%以上的 DBA 解决该问题就到此为止。但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,程序员仍然会抱怨:我只取10条记录为什么还是慢?要知道数据库也并不知道第1000000条记录从什么地方开始,即使有索引也需要从头计算原创 2021-06-05 14:39:00 · 198 阅读 · 0 评论 -
看完这超详细的MySQL 主从复制还不懂,你只能回家养猪了!
我们在平时工作中,使用最多的数据库就是 MySQL 了,随着业务的增加,如果单单靠一台服务器的话,负载过重,就容易造成宕机。这样我们保存在 MySQL 数据库的数据就会丢失,那么该怎么解决呢?其实在 MySQL 本身就自带有一个主从复制的功能,可以帮助我们实现负载均衡和读写分离。对于主服务器(Master)来说,主要负责写,从服务器(Slave)主要负责读,这样的话,就会大大减轻压力,从而提高效率。简介随着业务的增长,一台数据服务器已经满足不了需求了,负载过重。这个时候就需要减压了,实现负载均衡读原创 2021-05-28 20:56:42 · 162 阅读 · 0 评论 -
三面美团被问:MySQL的B+Tree索引到底是咋回事?聚簇索引到底是如何长高的?这不是必过?
你肯定知道MySQL进行CRUD是在内存中进行的,也就是在Buffer Pool中。然后你也知道了当内存中没有MySQL需要的数据时,MySQL会从Disk中通过IO操作将数据读入内存中。读取的单位呢就是:数据页一般数据页长下面这样没错,数据页中存储着真实的数据,而且数据页在内存中是以双向联表的方式组织起来的!如下图而在B+Tree的设定中,它要求主键索引时递增的,也就是说如果主键索引时递增的话,那么就要求右侧的数据页中的所有数据均比左侧数据页中的数据大。但是很明显上图并不符合,因此需要通过页分裂原创 2021-05-27 21:56:21 · 228 阅读 · 1 评论 -
大学毕业没有项目经验,全靠老师给的SpringBoot源码教程(已开源附源码资料)
项目介绍:这是一个基于SpringBoot的旅游项目,有前台介绍界面,也有后台管理系统需要的基础知识:Mybatis+Spring+SpringMVC+SpringBoot+Thymeleaf+ajax+Spring Security项目采用全注解的实现方式,没有繁琐的配置文件项目地址:github.com/anPetrichor…前台首页后台首页后台访问地址:http://localhost:8080/loginManage项目中配置类:定义一个LoginAOP切面类,必须先登原创 2021-04-24 15:54:29 · 310 阅读 · 1 评论 -
通过本文彻底搞懂MySQL锁原理分类,再来看分布式锁你还会觉得难嘛?
锁是计算机协调多个进程或线程并发访问某一资源的机制。锁保证数据并发访问的一致性、有效性;锁冲突也是影响数据库并发访问性能的一个重要因素。锁是Mysql在服务器层和存储引擎层的的并发控制。加锁是消耗资源的,锁的各种操作,包括获得锁、检测锁是否是否已解除、释放锁等。锁机制共享锁与排他锁共享锁(读锁):其他事务可以读,但不能写。排他锁(写锁) :其他事务不能读取,也不能写。粒度锁MySQL 不同的存储引擎支持不同的锁机制,所有的存储引擎都以自己的方式显现了锁机制,服务器层完全不了解存储引擎.转载 2021-04-23 21:25:39 · 384 阅读 · 0 评论 -
火了?700页机器学习笔记,完全开放下载!
作者:梁劲(Jim Liang),来自SAP(全球第一大商业软件公司)。书籍特点:条理清晰,含图像化表示更加易懂,对公式有详细的注解等。内容概要:主要分为基本概念、常用算法和其他三部分。正是对机器学习的过程中的痛苦有切身体会,作者希望能做一份教程,以浅显易懂的方式去讲解它,降低大家的学习门槛。作者为此花费了数月时间,经常做到深夜,把自己的学习笔记整理成了这份教程。电子书PDF获得方式为了节约大家的时间,我已经将这份书籍的电子版 PDF 打包好了。获取步骤如下:暗号:77全部教程包含三大部分.原创 2021-04-06 20:50:31 · 233 阅读 · 0 评论 -
Java程序员必须知道的MySQL优化原理
说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用 SELECT*、不使用NULL字段、合理创建索引、为字段选择合适的数据类型… 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。MySQL逻辑架构如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。MySQL逻辑原创 2021-04-06 16:37:20 · 241 阅读 · 0 评论 -
连肝一个月,终于完成了这份36万字面试手册
一直想整理一份面试手册,之前虽然也整理过,放在GitHub上目前Star数过千了。但是内容上来讲,涉及到的技术栈并不全面,内容上也不细致。索性重新整理了一份。内容包括网络协议、Java基础、进阶、字符串、集合、并发、JVM、数据结构、算法、MySQL、Redis、Mongo、Spring、SpringBoot、MyBatis、SpringCloud、Linux以及各种中间件(Dubbo、Nginx、Zookeeper、MQ、Kafka、ElasticSearch)等等…最后整理完,统计出来有24W个词原创 2021-04-06 15:22:05 · 231 阅读 · 1 评论 -
Redis单线程已经这么快了,6.0为什么还要引入多线程?能带来什么优势?
Redis作为一个基于内存的缓存系统,一直以高性能著称,因没有上下文切换以及无锁操作,即使在单线程处理情况下,读速度仍可达到11万次/s,写速度达到8.1万次/s。但是,单线程的设计也给Redis带来一些问题:只能使用CPU一个核;如果删除的键过大(比如Set类型中有上百万个对象),会导致服务端阻塞好几秒;QPS难再提高。针对上面问题,Redis在4.0版本以及6.0版本分别引入了Lazy Free以及多线程IO,逐步向多线程过渡,下面将会做详细介绍。单线程原理都说Redis是单线程的,那原创 2021-04-02 17:43:15 · 150 阅读 · 0 评论 -
最简单的方式实现Java代码热部署
一.思路监听java文件最后修改时间,如果发生变化,则表示文件已经修改,进行重新编译编译java文件为 class文件通过手写类加载器,加载 class文件 ,创建对象反射创建对象 / 进行调用,(如果是web项目可以将创建的对象添加到spring容器中)调用测试二.知识点 1. 自定义类加载器 继承 URLClassLoader 或 ClassLoader 都可以,继承 URLClassLoader 重写findClass(String name)方法即可实现加载原创 2021-04-02 16:22:46 · 500 阅读 · 0 评论 -
JDK动态代理的实现
JDK的动态代理的类看不见摸不着,虽然可以看到效果,但是底层到底是怎么做的,为什么要求实现接口呢?从Proxy.newProxyInstance入手 public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, Invoc.原创 2021-04-02 14:18:50 · 172 阅读 · 1 评论 -
javascript最常用的封装方法
1,获取链接上的参数getQueryString = (name, search) => { search = search || window.location.search.substr(1) || window.location.hash.split("?")[1]; let reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); let r = search.match(reg); if (r != nul原创 2021-04-01 20:53:21 · 234 阅读 · 0 评论 -
开源一套后台管理系统,让你告别996
前言作为一个程序员,最苦逼的就是老板随口就给你提的需求:“小田啊,这几天你给我弄一个管理系统给客户用”。老板的一句话总是害得我们天天加班,更可怕的是,每次开个新项目,总是要从用户、角色、菜单、接口等等从头开始写代码,重复工作实在太多。那么如果我告诉你,我可以给你整一套框架,你只要根据业务定义好实体类,其他的建表sql、service、controller、dao甚至前端增删改查代码都给你一键生成,是不是觉得瞬间加快了效率?这就是single-demo-boot(前后端分离单体项目快速开发框架) 可以转载 2021-03-31 19:40:46 · 961 阅读 · 0 评论 -
XSS和CSRF双重攻击!让你欲罢不能
一. 什么是 XSS攻击Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。XSS 常见的注入方法:在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。在标签属性中,恶意内容包含引号,从而原创 2021-03-31 16:23:34 · 282 阅读 · 0 评论 -
深入了解Java类加载
Java语言支持动态加载和动态连接,这意味着我们可以编写一个面向接口的应用程序,在运行时再指定具体的实现类。这种支持动态扩展的语言特性使得Java应用程序具备高度的灵活性。本文将对Java的类加载机制做简要的分析,包括类加载的过程和类加载器。类加载的过程下图描绘了Java中类的生命周期:类的完整生命周期包括:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Un.原创 2021-03-31 14:48:14 · 150 阅读 · 2 评论 -
让我们一起来看看2021年JavaScript的发展前景是怎样的的
在Web开发中,我们的世界瞬息万变,但我们能够了解2021年web 的发展趋势吗?通过研究2020年开发者调查的数据,我发现了一些有趣的事。让我们深入研究并探索我们从数据中得到的发现吧。包管理器去年,我建议我们注意PNPM的兴起,它的目的是避免版本冲突,它有一些热情的拥护者,去年在Github上达到了9.5千颗星,显然PNPM赢得了开发者的青睐。然而,我觉得在2021年,它不太可能在使用率上认真竞争,因为Yarn和NPM在实时项目中的嵌入程度,以及两者在发布新功能上投入的精力。其中一些功能是直接针对P原创 2021-03-31 14:15:33 · 581 阅读 · 1 评论 -
IO流学习笔记
目录1.流的概念2.流的分类2.1 按流向分类2.2 按单位分类2.3 按功能分类3.字节流3.1文件字节流3.2字节缓冲流3.3对象流4.字符流4.1文件字符流4.2字符缓冲流4.3打印流5.转换流6.File类7.FileFilter接口8.Properties集合1.流的概念流:内存与存储设备之间传输数据的通道2.流的分类2.1 按流向分类输入流:将<存储设备>中的内容读到<内存>中输出流:将<内原创 2021-03-30 16:28:18 · 120 阅读 · 2 评论 -
Bitmap实现用户签到
很多应用上都有用户签到的功能,尤其是配合积分系统一起使用。现在有以下需求:签到1天得1积分,连续签到2天得2积分,3天得3积分,3天以上均得3积分等。如果连续签到中断,则重置计数,每月重置计数。显示用户某月的签到次数和首次签到时间。在日历控件上展示用户每月签到,可以切换年月显示。…功能分析对于用户签到数据,如果直接采用数据库存储,当出现高并发访问时,对数据库压力会很大,例如双十一签到活动。这时候应该采用缓存,以减轻数据库的压力,Redis是高性能的内存数据库,适用于这样的场景。如果采用S原创 2021-03-30 14:11:35 · 917 阅读 · 0 评论 -
mysql数据库超详细理解
数据库分类 关于数据库的分类其实可以从各个纬度来进行划分,但是我们最常使用的分类还是根据他们存取数据的特点来进行划分,主要分为关系型数据库和非关系型数据库。关系型数据库关系型数据库管理系统(Relational Database Management System:RDBMS)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数据逻辑组织的系统。 关系型数据库:如 MySQL、Oracle数据库、PostgreSQL、Acce原创 2021-03-27 21:13:10 · 306 阅读 · 0 评论 -
MySql快速安装小技巧及优化
MySQL 是什么MySQL 是一个免费、开源的关系型数据库管理软件,在互联网行业被广泛使用。MySQL 存储引擎MySQL中采用的是插件式存储引擎架构,可以根据需要选择不同的存储引擎。现在互联网普遍使用的都是 InnoDB 存储引擎,常见的面试题是 InnoDB 存储引擎和 MyISAM 存储的对比,比如像下面这样问:Innodb 和 MyISAM 的区别是什么?可以从如下的角度进行回答:事务:InnoDB 支持事务,MyISAM 不支持事务锁:InnoDB 支持行级锁,MyISAM原创 2021-03-27 17:18:00 · 274 阅读 · 1 评论 -
Annotation理解及运用
什么是Annotation我们在平时的开发过程中看到很多如@Override,@SuppressWarnings,@Test等样式的代码就是注解,注解是放到类、构造器、方法、属性、参数前的标记。Annotation概念Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序原创 2021-03-27 13:27:34 · 1113 阅读 · 0 评论