- 博客(42)
- 收藏
- 关注
原创 mysql建立索引原则
一、数据库索引创建规则1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: 正确选择复合索引中的主列字段,一般是选择性较好的字段; 复合索引的几个字段是否经常同时以AND方式出现在Where
2022-08-05 16:58:36 5023
原创 ACID实现
首先,mysql持久化通过缓存来提高效率,即在select时先查缓存,再查磁盘;在执行修改操作时,sql会先写入到redo.log日志,再写入缓存中。mysql的锁有表锁,行锁,间隙锁,好像还有一个锁数据库的,叫全局锁还是什么来着。一致性:就是事务再执行的前和后数据库的状态都是正常的,表现为没有违反数据完整性,参照完整性和用户自定义完整性等等。原子性:主要依靠undo.log日志实现,即在事务失败时执行回滚。undo.log日志会记录事务执行的sql,当事务需要回滚时,通过反向补偿回滚数据库状态。...
2022-08-05 14:06:47 273
原创 sql分组内排名取最大行记录
今天改一个需求,需要拿到分组后时间最大的一行记录,想到了排名,然后取排第一名的就好了,省略很多字段和表面,大意就是弄俩变量,一个id,一个rank,用case when判断,如果当前id还和上一个id (last_id变量)相同,rank+1,否则rank从头计数,刷新为1,然后每次再把当前id赋给last_id变量select xxxxfrom(select xxxx,case when t.id = @last_id then @rank:=@rank+1 else @rank:=1 end a
2022-05-31 14:08:09 931
原创 java日期工具类
//今天初始时间 public static String initDateByDay(){ Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Cale.
2022-05-27 17:01:14 139
原创 HttpClient发送Url解析Json字符串
今天需要数据对接入库,调用接口获取数据并做定时任务落入到自己的数据库中,接口中包含token,分页参数等。导入依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.5</vers
2022-05-18 16:39:49 495
原创 多线程的一些问题
应用场景异步处理,例如:发邮件、发微博、写日志等;分布式计算定期执行一些特殊任务:如定期更新配置文件,任务调度(如quartz),一些监控用于定期信息采集等TOMCAT处理多用户请求。针对特别耗时的操作。多线程同步执行可以提高速度。例如:定时向大量(100w以上)的用户发送邮件。多线程编程面临的挑战及解决思路问题一:上下文切换并发不一定快于串行,因为会有切换上下文的开销。【切换上下文:单核并发时,cpu会使用时间片轮转实现并发,每一次轮转,会保留当前执行的状态】。解
2022-04-23 15:10:46 1822
原创 多线程几篇文章
线程状态线程状态转换各种状态一目了然,值得一提的是"blocked"这个状态:线程在Running的过程中可能会遇到阻塞(Blocked)情况调用join()和sleep()方法,sleep()时间结束或被打断,join()中断,IO完成都会回到Runnable状态,等待JVM的调度。调用wait(),使该线程处于等待池(wait blocked pool),直到notify()/notifyAll(),线程被唤醒被放到锁定池(lock blocked pool ),释放同步锁使线程回到可运行
2022-02-08 16:57:56 133
原创 Mysql索引原理
索引是怎么提高查询效率的?可以为了提高查询效率增加索引么?mysql索引系统采用的数据结构是什么?为什么要使用B+树?聚集索引相对于非聚集索引的区别?什么是回表?什么是索引覆盖?什么是最左匹配原则?索引失效场景有哪些,如何避免?具体内容详见 传送门...
2022-01-26 21:50:57 982
原创 数据库事务一致性的理解
一致性的定义百度百科-一致性:一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。百度百科-事务一致性:一个或多个事务执行后,原来一致的数据和数据库仍然是一致的。它主要涉及事务的原子性。维基百科-一致性(数据库)一致性是数据库系统的一项要求:任何数据库事务修改数据必须满足定义好的规则,包括数据完整性(约束)、级联回滚、触发器等。我对一致性的理解“一致”是指数据库中的数据是正确的,不存在矛盾。事务的一致性是指事务执行前后,数据都是正确的,不存在
2022-01-25 12:34:54 17066 3
原创 反射中的Declared总结
1、declared的方法只获取当前类定义的。2、非declared只能获取public修饰的。3、Class、Method、Field如果使用非declared的方法获取都是可以获取父类的public修饰符对应的元素,Constructor只获取当前类。构造方法不能继承。4、Class使用非declared的方法会获取父类注解,其它只会获取当前元素注解。...
2022-01-23 12:52:10 1380
原创 java集合继承关系图
简述面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,Abstr.
2022-01-22 11:36:08 880
原创 Java对象类型向上转型和向下转型
向上转型也叫自动类型转换 小范围转成大范围向下转型也叫强制类型转换 大范围转成小范围Java中的继承机制使得一个类可以继承另一个类,继承的类称为子类,被继承的类称为父类。在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象,所以子类可以继承父类中所有的属性和方法,包括private修饰的属性和方法,但是子类只是拥有父类private修饰的属性和方法,却不能直接使用它,也就是无法直接访问到它(子类可以通过调用父类的public声明的g
2022-01-18 11:59:35 879
原创 Lucene倒排索引
关于搜索:传统关系型数据库和 ES 的差别ES搜索引擎原理传统关系型数据库搜索先设想一个关于搜索的场景,假设我们要搜索一首诗句内容中带“前”字的古诗。用传统关系型数据库和 ES 实现会有什么差别?如果用像 MySQL 这样的 RDBMS 来存储古诗的话,我们应该会去使用这样的 SQL 去查询:select name from poems where content like "%前%";这种我们称为顺序扫描法,需要遍历所有的记录进行匹配。不但效率低,而且不符合我们搜索时的期望。
2021-12-17 10:29:20 1052
原创 Redis为什么快
基于内存实现数据都存储在内存里,减少了一些不必要的 I/O 操作,操作速率很快。高效的数据结构底层多种数据结构支持不同的数据类型,支持 Redis 存储不同的数据;不同数据结构的设计,使得数据存储时间复杂度降到最低。合理的数据编码根据字符串的长度及元素的个数适配不同的编码格式。合适的线程模型I/O 多路复用模型同时监听客户端连接;I/O :网络 I/O多路:多个 TCP 连接复用:共用一个线程或进程单线程在执行过程中不需要进行cpu上下文切换,减少了耗时。..
2021-12-14 11:09:27 2785
原创 cookie、session、token区别
HTTP 是无状态的,HTTP 请求方和响应方间无法维护状态,都是一次性的,它不知道前后的请求都发生了什么。但有的场景下,我们需要维护状态。最典型的,一个用户登陆微博,发布、关注、评论,都应是在登录后的用户状态下的。为了维持前后请求,需要前端存储标记cookie 是一种完善的标记方式,通过 HTTP 头或 js 操作,有对应的安全策略,是大多数状态管理方案的基石session 是一种状态管理方案,前端通过 cookie 存储 id(session id),后端存储数据(redis库sessi..
2021-12-11 11:35:05 4212
原创 516. 最长回文子序列【动态规划】
问题描述:给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。输入:s = “bbbab”输出:4解释:一个可能的最长回文子序列为 “bbbb” 。输入:s = “cbbd”输出:2解释:一个可能的最长回文子序列为 “bb” 。算法思想:dp[i][j]表示字符串s[i…j]的最长回文子序列此时i<=j,如果i=j,则表示此时只有一个字符,它也就是子串,所以长度为1
2021-11-22 22:01:56 1904
原创 1143. 最长公共子序列【经典的动态规划,图文解析】
题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。输入:text1 = “abcde”, text2 = “a
2021-11-20 17:14:59 2048
原创 剑指 Offer 42. 连续子数组的最大和
题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路:类似于动态规划的最长递增子序列,dp[i]表示以nums[i]结尾的最大连续子数组的和代码实现:class Solution { public int maxSubArray(int[] nums) { i
2021-11-19 16:33:17 1852
原创 354. 俄罗斯套娃信封问题(良心注释)
问题描述给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]输出:3解释:最多信封的个数为 3, 组合为: [2,3] => [5,4]
2021-11-18 20:08:10 1229
原创 300. 最长递增子序列
经典的动态规划算法,但是这种时间复杂度是O(n2),用二分查找法应该能降到O(nlogn),但是我不会,有空再学类似的还有128题、673(300的进阶,让输出最长子序列的个数)class Solution { public int lengthOfLIS(int[] nums) { int [] dp =new int[nums.length]; 定义dp数组,dp[i]含义是以nums[i]结尾的最长子序列长度 Arrays.fill(dp,1); dp
2021-11-17 17:49:25 2169
原创 剑指 Offer II 103. 最少的硬币数目
class Solution { public int coinChange(int[] coins, int amount) { int[] dp = new int[amount+1]; //创建一个amount+1大小的动态数组,0~amount dp[0]=0; //面值为0的时候返回0个硬币 for(int i=1;i<=amount;i++) //给其余面值赋初始值amount+1,因为返回最多硬币的情况就是amoun
2021-11-16 15:46:46 2046
原创 Python批量爬网页的数据
需求分析需要从多个网址,爬一些指定需要的数据构造网址集合打开页面布局找到指定数据的xpath路径发现要爬的网址只有id不一样,每次替换即可,加入到list里保存一下逻辑处理写好逻辑,简单的筛选,得到需要数据,过程有点慢,学校发的电脑就16G,小卡,其中有个小坑,复制好的xpath,再table[4]后有个tbody,把这个删了才能拿到数据,不然获取的是空[ ]参考文章 https://blog.csdn.net/IT_XF/article/details/82184585
2021-10-14 21:07:20 784
原创 Python处理txt数据
今天跟py处理了个文件,唉,记录一下,好多方法都不熟,还都得百度拿到这样的数据,要求从1对多变成1对1的格式首先按行读数据,碰到带-的就跳过,把其他的数据存到List里存到里面都是一个个字符串想到按 \t 切割 分别拿到头部和剩余的那些遍历,分别把两部分对应存在各自的列表里,实现1对1用dataframe表格打开来看看,发现每个字符串开始的时候 “没去掉,末尾的”\n也没去掉,想了半天,本来想从读数据的时候下手,但不咋会,所以还是处理一下这里的repl
2021-10-09 20:49:33 500 2
原创 Java泛型方法返回值前面为什么要加上T
如下所示,方法返回值前面为什么要加上 <T> 呢? public static <T> void test(T a){ System.out.println(String.format("test %s",a)); }java类对象中如果想使用泛型需要将类定义如下也就是Class类名后加一个<T>如果静态方法中想用泛型应当也是要和Class声明类似的,所以这时候就需要在方法返回值前面加上一个<T>,用于告诉j
2021-09-29 10:25:28 2275
原创 Centos7把动态ip改成静态ip
Centos7把动态ip改成静态ip,折腾了快俩点,踩了几个坑,被高人点播了,来总结一下,希望下次配的时候带点脑子。。查看网关更改和设置虚拟网卡的ip更改配置文件IPADDR要和自己设置的虚拟网卡(上图)一个网段,这一点我踩坑了,导致智能ping通百度,却和外边的宿主机互相ping不通,其实还是计算机网络这些基础知识不了解。。。看到这边ip地址已经改为想要更改的静态ip了此时已经lping通了宿主机和百度此时宿主机windows也已经ping通了linux,完成...
2021-09-17 22:15:41 379
原创 Linux基本命令(更新中)
关机&重启命令shutdown -h now 立刻进行关机shutdown -h 1 1分钟后会关机shutdown -r now 现在重新启动计算机halt 关机,作用和上面一样reboot 现在重新启动计算机sync 把内存的数据同步到磁盘(不管是重启系统还是关闭系统,首先要运行sync命令)用户登录和注销su -用户名 切换用户su - 切换为rooteixt
2021-09-12 19:02:50 2408 1
原创 Linux目录结构
Linux目录结构/bin [重点] (/usr/bin、/usr/local/bin)•是Binary的缩写, 这个目录存放着最经常使用的命令/sbin(/usr/sbin、/usr/local/sbin)•s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。/home [重点]•存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。/root [重点]•该目录为系统管理员,也称作超级权限者的用户主目录。/lib
2021-09-10 20:06:09 92
原创 Linux中$home和波浪号~
在Linux中当前用户的主目录可以有三种表示方法,都是等效的[正常不改配置情况下]例如用户名为sy,进入当前用户的主目录/home/sy输入cd ~或输入cd $HOME或输入cd /home/syLinux下~、/home与/root的区别:1、在root用户下,~等同于/root2、在普通用户下,~等同于/home/当前的普通用户名...
2021-09-10 19:15:18 5062
原创 JWT的原理应用
一、什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。二、JWT的组成1、JWT生成编码后的样子eyJ0eXAiOiJKV1Qi
2021-09-06 21:02:22 179
原创 一文看懂Springboot的@Autowired和@Resource区别
@Autowired 和 @Resource 这两个注解大家想必都有在项目里面出现过,但是真的清楚这俩玩意的用法或者说是区别么?一直用的都是 @Autowired ?别人代码用什么就copy用什么,反正他没错,俺也不会错?它们都是一样的作用?只是名字不一样而已?如果你存在以上这些疑问,那么你看这篇文章必赚!上车!如果你不存在以上这些疑问,那么你看这篇文章也不亏!正文跟着我 了解下 @Autowired 和 @Resource 这两位兄台1.看看他们从哪里来?@Auto
2021-08-29 12:10:49 7570 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人