- 博客(52)
- 收藏
- 关注
原创 java分布式锁
使用redis锁使用分布式锁可能存在的问题:问题:setnx刚好获取到锁,业务逻辑出现异常,导致锁无法释放解决:设置过期时间,自动释放锁。 在set时指定过期时间(保证原子性)问题:可能会释放其他服务器的锁。比如,某一个业务正常执行需要3秒,但由于某种原因执行了7s,3s后锁自动释放,其他进程进入,7s后该进程del释放的是其他进程的锁解决:setnx获取锁时,设置一个指定的唯一值(例如:uuid);释放前获取这个值,判断是否自己的锁问题:删除操作缺乏原子性 进程1经过了uuid的判断,但此时刚
2022-01-03 20:00:50 873 1
原创 利用Java客户端调用FastDFS
利用Java客户端调用FastDFS在项目resource中添加tracker.conf 配置文件创建FileUploadController控制器在项目resource中添加tracker.conf 配置文件tracker_server=192.168.200.128:22122# 连接超时时间,针对socket套接字函数connect,默认为30秒connect_timeout=30000# 网络通讯超时时间,默认是60秒network_timeout=60000创建FileUplo
2022-01-02 20:17:43 695
原创 Linux下安装anaconda,创建虚拟环境python3.6,安装tensorflow1.15.0
1.首先我们需要下载anaconda的安装包,由于在终端使用命令行进行操作,使用wget指令,在Linux终端输入wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh2.下载完成后在安装目录下之执行安装指令sh Anaconda3-2019.03-Linux-x86_64.sh3.安装完成后,终端输入conda init若提示conda命令找不到,则需要配置PATH4.创建虚拟环境conda c
2021-11-30 16:50:56 2303
原创 leetcode算法基础 动态规划 01背包
01背包模板 有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。public static void testWeightBagProblem(int[] weight, int[] value, int bagWeight){ int wLen = weight.length; //定义dp数组:dp[j]表示背包容量为j时,能获得的最大价值 int[]
2021-11-23 14:01:08 295
原创 西工大879考研11月后规划
一些不重要的碎碎念 转眼离20年考研已经快一年了,其实回想起来,考研确实会很痛苦,心态会经常有波动,但如果你能保持高强度学习坚持下来的话,你真的会发现什么都不事。 先说一下我的成绩,总体来说还是比较满意的,我也可以说自己是比较幸运的,有付出就看得见回报。总分422政治82英二77数二142专业课121最重要的事 最后两个月,我觉得最重要的事情。就是平稳,心态平稳,学习和作息平稳,身体健康平稳。一些考研群里,每天都有人制造焦虑,就看似很炸,你要
2021-11-03 23:16:30 237
原创 leetcode算法基础 单调队列及优先级队列
leetcode练习单调队列 239. 滑动窗口最大值优先级队列 347. 前 K 个高频元素单调队列 239. 滑动窗口最大值题目 单调队列要实现三个操作:移出滑动窗口左边界元素时,判断该元素和队列中头元素是否相同,相同则移除;加入队列时,判断加入元素是否大于队尾元素,如果大于,移除队尾元素直到队列空或者不大于队尾元素;返回当前滑动窗口的最大值,即单调队列的对头元素。 为了方便在滑动窗口移动时,单调队列的出队操作,可以将数组的下标存入队列,这样就可以直接判断该元素是否需要出队。class M
2021-10-24 10:49:07 255
原创 leetcode剑指Offer 链表(简单)
leetcode练习剑指 Offer 24. 反转链表剑指 Offer 35. 复杂链表的复制剑指 Offer 24. 反转链表题目一种思路是双指针,初始位置一个指向null,一个指向头结点。下面的方法是递归。public ListNode reverseList(ListNode head) { return recur(head, null); // 调用递归并返回}private ListNode recur(ListNode cur, ListNode pre) {
2021-10-11 15:27:07 79
原创 leetcode剑指Offer 二分查找(简单)
leetcode练习剑指 Offer 11. 旋转数组的最小数字剑指 Offer 53 - II. 0~n-1中缺失的数字剑指 Offer 11. 旋转数组的最小数字剑指 Offer 11. 旋转数组的最小数字题目public int minArray(int[] numbers) { int i = 0, j = numbers.length - 1; while (i < j) { int m = (i + j) / 2; if (number
2021-10-11 15:14:32 82
原创 leetcode剑指Offer 树(简单)
leetcode练习剑指 Offer 27. 二叉树的镜像剑指 Offer 28. 对称的二叉树剑指 Offer 32 - III. 从上到下打印二叉树 III记录一些很简单,但做题时又没有立马做出来的一些题目。剑指 Offer 27. 二叉树的镜像题目这道题用辅助栈或者辅助队列都是一样的效果。public TreeNode mirrorTree(TreeNode root) { if(root == null) return null; Stack<TreeNode>
2021-10-11 11:18:40 189
原创 leetcode算法基础 第十天 递归/回溯
leetcode练习40. 组合总和 II47. 全排列 II40. 组合总和 II题目解决数组里有重复元素的情况,就将数组排序,然后记录上次一次选择的元素,并在同层回溯中,不重复选择该元素,保证在每层回溯中,相同元素只会被选择一次。List<List<Integer>> re = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<
2021-10-06 18:25:14 129
原创 leetcode算法基础 第九天 递归/回溯
leetcode练习78. 子集90. 子集 II78. 子集题目这道题也是套回溯模板,确定好每次的startIndex以及结束条件即可。List<List<Integer>> re = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> subsets(int[] nums) {
2021-10-06 17:33:02 114
原创 leetcode算法基础 第八天 深搜/广搜
leetcode练习1091. 二进制矩阵中的最短路径130. 被围绕的区域797. 所有可能的路径1091. 二进制矩阵中的最短路径题目使用广搜,每次将八个方向的值为0点加入队列,加入队列时将值改为1,以此类推,直到找到最终位置。public int shortestPathBinaryMatrix(int[][] grid) { if (grid[0][0] == 1 || grid[grid.length-1][grid[0].length-1] == 1) return -1;
2021-10-06 17:18:27 167
原创 leetcode算法基础 第七天 深搜/广搜
leetcode练习117. 填充每个节点的下一个右侧节点指针 II117. 填充每个节点的下一个右侧节点指针 II题目这道题,比较简单的思想就是层次遍历,每次遍历一层的节点,每层的节点数由n记录,不能直接i < queue.size()因为队列是在不停变化的。public Node connect(Node root) { if (root == null) return null; Queue<Node> queue = new LinkedList<&g
2021-10-06 16:14:34 63
原创 leetcode算法基础 第六天 深搜/广搜
leetcode练习200. 岛屿数量547. 省份数量**200. 岛屿数量题目这道题是一道简单的深搜题,首先双层遍历找到第一个’1’所在的位置,岛屿数加1,然后开始深搜,并将所有走过的地方标位’0’,以此类推,直到所有的位置都为’0’。public int numIslands(char[][] grid) { if (grid == null || grid.length == 0) { return 0; } int count = 0; fo
2021-10-05 15:34:32 82
原创 leetcode算法基础 第四天 双指针
leetcode练习844.比较含退格的字符串986. 区间列表的交集11. 盛最多水的容器笔记:/*chs = [a,b,c,d]chs.toString() [C@5eobe858Arrays.toString(chs) [a,b,c,d]String.valueOf(chs) abcd*/844.比较含退格的字符串题目:这道题可以根据栈的思想,遇到字符就加入字符串,遇到退格就将字符换最后一位抛出。public boolean backspaceCompare(Strin
2021-09-20 17:12:49 80
原创 leetcode算法基础 第三天 双指针
双指针82. 删除排序链表中的重复元素 II[15. 三数之和](https://www.csdn.net/)82. 删除排序链表中的重复元素 IIpublic ListNode deleteDuplicates(ListNode head) { if (head ==null || head.next == null){ return head; } ListNode re = new ListNode(); re.next = head;
2021-09-15 08:52:14 71
原创 leetcode算法基础 第二天 二分查找
leecode练习153. 寻找旋转排序数组中的最小值162. 寻找峰值153. 寻找旋转排序数组中的最小值和之前一道题思路一致,每次判断是左边有序还是右边有序,左边有序将左边界加入最小值,否则将中间值加入最小值。public int findMin(int[] nums) { int re = Integer.MAX_VALUE; int left = 0, right = nums.length - 1; while (left <= right){
2021-09-14 21:54:06 65
原创 Python基础笔记 21.09.13
一些简单笔记Dataframe初始化写文件截取数组求数组平均值Linux服务器后台执行Python文件Dataframe初始化将数据存储为Dataframe格式并输出到文件中df = pd.DataFrame(columns=['userId', 'vector'])df = df.append({'userId':u_id,'vector':u_vector},ignore_index=True)outputpath = 'result/user_{}.csv'.format(epoch)df
2021-09-13 10:58:04 88
原创 leecode算法基础 第一天 二分查找
leetcode练习33搜索旋转排序数组34.在排序数组中查找元素的起始和结束位置33搜索旋转排序数组 如果中间的数小于最右边的数,则右半段是有序的,若中间数大于最右边数,则左半段是有序的,我们只要在有序的半段里用首尾两个数组来判断目标值是否在这一区域内,这样就可以确定保留哪半边了。public int search(int[] nums, int target) { int len = nums.length; int left = 0, right = len-1; wh
2021-09-13 09:46:58 111
原创 Java文件读写操作
文件读写操作文件读写文件按字节或者按字符输入分多次读入文件文件按行读写文件读写InputSteam和OutputSream是以字节为单位的,Reader,Writer都是以字符为单位的操作,可以有效避免中文乱码。文件按字节或者按字符输入文件读FileInputStream readFile = null;//FileReader readFile = null; try { readFile = new FileInputStream("FileInputStreamDemo.java")
2021-09-12 19:47:10 147
原创 leetcode算法入门 第十四天 位运算
leetcode练习190.点到二进制位136.只出现一次的数字190.点到二进制位这道题可以直接调Integer.reverse()函数,但不符合位运算的思想public int reverseBits(int n) { int a = 0; for(int i = 0; i < 32; i++){ a = a + ((1 & (n >> i)) << ( 31 - i)); } return a;}上面的思
2021-09-12 10:52:22 179
原创 leetcode算法入门 第十三天 位运算
leetcode练习231.2的幂191.位1的个数 第一次接触位运算的题目,看了别人的博客得到了两个结论:第一个,byte->int可以保证十进制数不发生变化,但是对应的二进制数会发生变化。所以负数补符号位扩展,保证十进制数不变。补零扩展,保证补码的一致性,但是表示的十进制发生变化。第二个:补零扩展,保证补码的一致性,但是表示的十进制发生变化。补零扩展,即&0xff的操作。231.2的幂/**位运算思路: * 2^x = n 因为n 与 n-1 必然为0 比如8(1000) 7(0
2021-09-11 19:56:51 109
原创 leetcode算法入门 十二天 动态规划
leetcode练习70.爬楼梯198.打家劫舍120.三角形最小路径和70.爬楼梯这道题和斐波那契数列很像,找到递推公式F(n) = F(n-1) + F(n-2)。但是这道题不能使用递归,会造成超时,只能迭代。public int climbStairs(int n) { if(n == 0 || n == 1) return 1; int a = 1, b = 1, c = 0; for (int i = 0; i < n - 1; i++){ c
2021-09-10 22:07:51 59
原创 leetcode算法入门 第十一天 递归/回溯**
leetcode练习77.组合39.组合总和131.分割回文串求字符串的所有子串回溯的模板void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; backtracking(路径,选择列表); // 递归 回溯,撤销处理结果 }}77.组合ArrayL
2021-09-07 13:49:24 98
原创 leetcode算法入门 第十天 递归/回溯
leetcode练习206.反转列表21.合并两个有序链表206.反转列表这道题其实没什么难度,思路对了很快就可以做出来,注意递归的思路。//迭代法public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; while(cur!=null) { ListNode next = cur.next; cur.next = pre;
2021-09-07 09:20:55 100
原创 leetcode 算法入门 第九天深搜/广搜
leetcode练习542.01 矩阵994.腐烂的橘子542.01 矩阵这道题和最大岛屿问题还是有一定区别的,使用深搜比较麻烦。其实可以将这道题转换成动态规划问题或者广搜问题会比较好解决一点。DP方法:先正序遍历矩阵,每次根据左方和上方已经得出的结果来更新矩阵。再逆序遍历矩阵,根据右方和下方值来更新矩阵。两次遍历得到最终矩阵。public int[][] updateMatrix(int[][] mat) { int row = mat.length; int col = mat[
2021-09-05 17:03:28 145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人