笔记
朝阳宋哈娜
这个作者很懒,什么都没留下…
展开
-
Java笔记4.6--mycat分库分表
一张表100w,按ID(分库字段)除以10取摸,分到10个库。1号库id最后位总是1,2号库id最后位是2,以此类推。不同的表尽量创建到不同的机器上,别10张表都在一个机器上,甚至一个数据库上,这样意义不大,实际操作时,可以分到5台服务器上,每台机器2个库,不同数据库上,表的结构是一样的。Mycat可以连oracle或者mysql。只把个人大数据量表拆分。比如把百万规模的order表分到10个库上,分库字段是id。在schema,xml中配置10个数据库地址。在rule.xml里定义待分库的表ord原创 2020-08-05 23:43:31 · 290 阅读 · 0 评论 -
Java笔记4.5--数据库调优
三范式:字段间不存在传递关系。就是说每个字段都跟主键有直接关系,而不能有间接关系。比如有张订单流水表,(订单编号,总价,商品编号,商品名)通过商品编号能再次传递找到商品名,所以不符三范式需要拆分成两个表,订单流水表,(订单编号,总价,商品编号)。商品表,(商品编号,商品名)能避免数据冗余和更新异常问题。案例:在过去一个月里,找出过去一个月的所有买过Java书籍的会员的邮箱,以便于发广告。可以从表中发现,三张表关联查询涉及到的数量太大了运行时间长的SQL会导致有更新操作的SQL原创 2020-08-05 22:00:30 · 220 阅读 · 0 评论 -
Java笔记4.4--JDBC简单预处理批处理防SQL注入
预处理批处理语法:PreparedStatement pstmt;String query = "insert into student valuse (?,?)";pstmt = connection.prepareStatement(query);pstmt.setString(1,"1");pstmt.setString(2,"Peter");pstmt.addBatch();pstmt.executeBatch();项目中一般PreparedStatement比Statemen原创 2020-08-05 10:42:42 · 166 阅读 · 0 评论 -
Java笔记4.3--Mysql事务
事务要么全做,要么全都不做。事务并发会引发脏读,不可重复读和幻读,事务隔离就是解决这个问题,有多种隔离级别。虽然也能通过JDBC代码改事务隔离级别,但是这是数据库层面的。低级的事务隔离级别支持更高的并发操作,系统代价也更小。慎用高级的事务隔离级别。脏读:一个事务读取了另一个事务尚未提交的数据。案例:是指一个事务读取了另一个事务尚未提交的数据。假设Mary的工资是1000,财务人员在某一时刻将Mary的工资改成8000(但未提交这个修改事务),此时Mary读取自己的工资,发现变为了80原创 2020-08-04 23:18:47 · 124 阅读 · 0 评论 -
Java笔记4.2--Mysql索引
(Mysql)索引数据结构:B+树聚簇索引叶节点是数据,非聚簇索引叶节点是数据的地址,一个表职能有一个聚簇索引。索引需要耗费空间,所以不是多多益善。权衡因素:1.建索引要空间,更改数据要重建索引2.表里数据量不大,可以不建索引3.数据量大,但是该字段需要大批量更新,慎重建索引,或者操作前关索引4.数量大,该字段重复性不高,且频繁读,可建索引索引的正确和错误用法:select name, age, score from student where name = 'To.原创 2020-08-04 22:16:38 · 107 阅读 · 0 评论 -
Java笔记4.1--Mysql之常见问题
常规用的是内连接(取交集):左连接:通过grop by 和 having 查重去重:一个表出现多个Id相同的重复数据。使用having外带子查询:select * from student where Id in (select Id from student group by Id having count(Id) > 1)同时使用delete删除重复的DELETE from student WHERE (id) IN (SELECT id FROM student原创 2020-08-03 21:59:16 · 119 阅读 · 0 评论 -
Java笔记3.6--简单总结
1.从虚拟机体系结构引出内存管理用完集合要及时clear,用完IO和JDBC后在finally里释放对象2.根据堆区结构,阐述垃圾回收流程分代管理,讲jdk1.7和jdk1.8的区别。讲述GC流程,说明时候触发轻量级GC,什么时候触发Full GC。判断对象可被回收的方式:对象上没有强引用,以及引用计数和根可达算法。引出内存调优,代码级别如何调优,如何排查OOM。3.进一步说明代码级别的调优比如不要频繁修改String。常用的命令参数。讲述弱引用,软引用,引出监控内存性能,排查O原创 2020-08-03 15:10:09 · 93 阅读 · 0 评论 -
Java笔记3.5--定位排查OOM
什么时候该排查:1.GC过程中,会Stop the World,不干其他活2.本该运行好的程序,在某个时刻卡住,业务日志没有异常3.通过CAT等监控工具,发现某段时间内存用量居高不下上线后一般接CAT等监控工具,监控内存。如果超出阈值,发出一报警邮件。4.稳定重现OOM,比如一天一次,或者每天频繁出现通过GC日志确认:1.能看到GC发生时间和回收的内存量。2.结合卡的时间点,确认是因为GC造成Stop the World。3.可定量观察到GC的频繁程度通过代.原创 2020-08-03 14:43:30 · 206 阅读 · 0 评论 -
Java笔记3.5--内部匿名类形参加final
jdk1.7以及之前,内部匿名类形参前都要加final。jdk1.8不需要,隐性加上了。jdk1.7以及之前:内部匿名类形参前加final,否则报错。内部类和外部类是平行的,没有隶属关系。外部类有可能会优先于内部类回收,如果不加final,参数就会被回收,导致于内部类无法使用。加final后,以常量方式存储在常量池,不是在堆中,所以外部类回收后该参数依然存在。引出话题:在回答final方法的用途时候可以说明。被问到内部类时候可以说明。项目中在消息模块或者其他模块用到线程池原创 2020-07-30 12:22:31 · 142 阅读 · 0 评论 -
Java笔记3.4--软引用弱引用在JVM中调优
定义:强引用:new出来的,比如String str = new String(“hello”)。对象上有强引用不会被回收。软引用:SoftReference<String> softRef = new SoftReference<String>(str);(其中str是引用)。如果只有软引用,而且当虚拟机堆内存不够时候会回收。弱引用:WeakReference<String> weakRef = new WeakReference<String>原创 2020-07-30 11:01:32 · 118 阅读 · 0 评论 -
Java笔记3.3--代码级别优化内存性能
Java代码出现内存泄漏:1.对象上有强引用2.虽然Java程序运行完后内存会回收,但是越早越好3.出现内存泄漏后,会导致Stop The World(一段时间内虚拟机什么也不做,单纯内存回收)和OOM异常深入了解finalize方法:1.object类的方法,任何类都可以重写2.当JVM通过根可达算法,判断某对象可以被回收后,会判断是否重写了fialize方法,如果没有,直接回收3.如果重写了,把该对象放入F-Queue队列,有线程专门遍历并执行该类的finalize方法原创 2020-07-29 23:57:00 · 249 阅读 · 0 评论 -
Java笔记3.2--GC流程理解
字节码和跨平台特性:.class格式的字节码形式运行虚拟机可以屏蔽不同操作系统的差异JDK是开发环境,JRE是运行环境JRE中包括了Java虚拟机和Java程序运行时所需的核心类库虚拟机结构:JVM栈是现成私有的堆区存放new出来的对象,jdk1.8中常量池和静态变量存在堆区元数据存在本地内存垃圾回收时的分代管理:jdk1.8中,元数据区替代持久代类的信息和编译后的代码数据等放元数据区JVM内存调优是针对堆区而言,再进一步是针对年轻代和年老代虽然J原创 2020-07-29 17:43:55 · 120 阅读 · 0 评论 -
LeetCode--19. 删除链表的倒数第N个节点
热门题,难度中等题。给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。很明显,经典的双指针,就算没看过双指针相关,也应该能想到两个遍历下标保持n的距离,当快的到了终点,那么现在的就是要删除的。要注意的一个地方就是养成考虑特殊情况的习惯,删除第一个。删除第一个的话就需...原创 2020-06-04 09:40:43 · 108 阅读 · 0 评论 -
LeetCode152. 乘积最大子数组
签到题,中等题。给你一个整数数组nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。这种题第一想法就是动态规划的思想,但是涉及到乘积与加减不一样,他很可能负负得正取到更大的。我就没想到除了当前最大以外,再设一个当前最小值,这样就可以避免遍历到下一个为负的情况了。我的代码逻辑是:以0为分段标记,记录当前段的值tmpNum,当前段中遇到...原创 2020-05-18 18:39:01 · 145 阅读 · 0 评论 -
LeetCode--25. K 个一组翻转链表
给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5难度是困难题,不过思路好想,就是实现的时候容易写错。我的思路:1.首...原创 2020-05-16 21:51:37 · 201 阅读 · 0 评论 -
LeetCode--560. 和为K的子数组
给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。刚开始看到的时候想到了用HashMap记录前n项和,以及用当前前n项和减去之前任意的,如果有值为k,那么就有一组存在,但是我没想到的是map&l...原创 2020-05-16 10:08:07 · 158 阅读 · 0 评论 -
LeetCode--50. Pow(x, n)
计算x的n次方。n为整数。-100.0 <x< 100.0 n是 32 位有符号整数,其数值范围是[−2^31,2^31− 1]中等题。这个题大家应该都能想到递归的方式计算,这里主要记录一下官方给的非递归解法。递归的代码如下: public double simPow(double x, int n){ //double tmp; if(n == 0) return 1.0; doub...原创 2020-05-11 15:49:30 · 172 阅读 · 0 评论 -
LeetCode--236. 二叉树的最近公共祖先
难度中等题。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。思路有多种。 1. 纯粹的自底向上。后序遍历中,先找到该节点,那么返回一个true。当某个节点的左右子树都返回true时,该节点就是要求的。如果两个点是祖先后代关系,那么返回为当前节点值等于其中一个查询值且一个子树为true...原创 2020-05-10 18:11:26 · 241 阅读 · 0 评论 -
LeetCode--221. 最大正方形
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4我的思路:我用的是暴力,但是过程有所优化。我找的是遍历过程中该点最大的正方形边长。优化思路是:假设当前节点dp(i,j)为0,那正常后移一位计算dp(i,j+1)。如果do(i,j)==1,标记tmpRes = 1,接下来计算dp(i+1,j+1),如果也是1,那就计算这个点对应的这个列是否都为1,如果有其原创 2020-05-08 23:22:47 · 105 阅读 · 0 评论 -
LeetCode--572. 另一个树的子树
给定两个非空二叉树 s 和 t,检验s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。难度是简单题。但是方法多种多样,有些方法考验功底的。我想到了两种。第一种:对s进行层次遍历,他的每个节点为根的子树与t进行比较。很明显这种方法好写,但是效率不高。第二种:对其进行先序排列,同时给叶节点的孩子节点设...原创 2020-05-07 23:27:18 · 242 阅读 · 0 评论 -
LeetCode--983. 最低票价
动态规划的思想。我们不仅要从开始往后找最优解。像这种能晚发生就晚发生的可以逆向,从后往前找。在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为days的数组给出。每一项是一个从1到365的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为costs[0] 美元;一张为期七天的通行证售价为costs[1] ...原创 2020-05-06 23:05:10 · 127 阅读 · 0 评论 -
LeetCode--98. 验证二叉搜索树
5.5日签到题。给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。我的思路:我想到的有两种解法: 1.形式上简单,时间空间复杂度较高。用递归直接中序遍历得到该二叉树的排序,如果符合条件,那么这个序列就是严格的递增序列...原创 2020-05-06 09:09:17 · 162 阅读 · 0 评论 -
LeetCode--45 跳跃游戏 II
签到题。先吐槽一下,标的是困难题,可是感觉难度还不如有些简单题。。。不知道怎么定的难度标准。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 ...原创 2020-05-04 12:08:29 · 804 阅读 · 0 评论 -
LeetCode--53 最大子序和
leetcode签到题描述 :给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。(备注是道简单题,但是可能刚开始细节没想好,所以修改了一个小时才完全改好细节。。。)输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。我的思路:首先定义三个变量 ...原创 2020-05-03 11:01:44 · 161 阅读 · 0 评论 -
LeetCode-365-水壶问题
有两个容量分别为x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的z升水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空官方给出的递归方式不太赞成,具体解释可以看官方,感觉还是考数学知识,贝祖定理。可以构建ax+by=z。找到x y的最...原创 2020-05-02 22:23:24 · 248 阅读 · 0 评论 -
LeetCode-3找到字符串中最长子不重复子串的长度
描述:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。难度:中等题。我的思路是:类似于局部最优的思想吧。把字符串遍历一遍,找到开头到遍历过程中的最长不重复子串长度,最后得到的就是结果。思想是:首先new一个HashMap,key是遍历过程中的字符,val是在字符串中的下标。 为了简化思想,构建三个变量: res,最终的长度;...原创 2020-05-02 14:52:02 · 336 阅读 · 0 评论 -
leetCode——836 签到 矩形是否重叠
题目很简单。给定两个整形数组,长度为4,分别为矩形左下角坐标和右上角坐标,判断是否重合。示例 1:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]输出:true示例 2:输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]输出:false这里有两种大方向思路:1.考虑重叠的情况 2.考虑不重叠的情况算法思维...原创 2020-03-18 23:39:59 · 160 阅读 · 0 评论