牛客网 迷宫问题 DFS 递归 两种方式 牛客网-迷宫问题主要思路1. 像3个方向递归2. 不能数组越界3. 不能是墙4. 在当前递归分支下,没有走过。跟算24点一样,还是通过两种方式控制递归退出:1. 通过全局变量2. 通过函数返回值。这里通过函数返回值,直接用静态函数就行了,并且不会有并发冲突。公共类Coordinpackage cn.line.nowcoder.huawei.hj43;/** * 用于保存路径 * 也可以直接用int[2]来实现 */public class Coord
牛客网 24点 DFS 递归 两种方式 题目连接:牛客网-算24点自己些的递归,是通过全局控制变量,来控制递归结束的。后来看了网友的代码,还有通过返回值来控制递归结束的。在这里记录一下。下面的代码里,函数dfs是通过全局变量found来控制递归退出的。函数dfs2是通过返回值来控制递归退出的。package cn.line.nowcoder.huawei.hj67;import java.util.Scanner;public class Main { public static void ma
记直接插入排序,为什么必须从后往前遍历 从前往后遍历找到插入位置@Slf4jpublic class InsertSort { @Test public void test() { int[] arr = new int[]{5, 3, 7, 6, 4, 1, 0, 2, 9, 8}; log.info("init: {}", Arrays.toString(arr)); insertSort(arr); log.info("result: {}", Arr
LeetCode 链表 双指针 234 题目本身比较简单,主要是快慢指针的思路值得记一下,后续可能还会有其他应用。 public boolean isPalindrome(ListNode head) { if (head.next == null) return true; ListNode fast = head; ListNode slow = head; ListNode preSlow = null, nextSlow;
LeetCode 链表 双指针 206 92 25 206:简单的pre + cur的双指针public ListNode reverseList(ListNode head) { if (head == null || head.next == null) return head; ListNode pre = null; ListNode cur = head; ListNode tmp; while (cur.next != null) { tmp = cur.next
LeetCode 19 61 链表 双指针 题目-19题目-6119: public ListNode removeNthFromEnd(ListNode head, int n) { ListNode ret = new ListNode(0, head); ListNode pre = ret; ListNode rear = pre; while (n-- >= 0) { // n-- > 0 rear = rear.ne
ARM64内存中的dirent,记一个判断文件后缀的方式 dirent结构struct dirent { long d_ino; /* inode number 索引节点号 */ off_t d_off; /* offset to this dirent 在目录文件中的偏移 */ unsigned short d_reclen; /* length of this d_name 文件名长 */ unsigned char d_type; /* the type of
项目优化之垂直拆分 和 水平拆分 垂直拆分数据层-表将单表中的常用字段和不常用字段,拆分到两个表,减少每次读无效字段导致的IO损失。数据层-库多个子系统的表,集中在单个DB里,为这些系统创建各自的DB,减少单个DB的压力。业务层多个子系统集中在单个项目里,将子系统独立成项目单独部署,增大吞吐量,还能有针对性地横向拓展。水平拆分数据层-表单表中的记录过大,树的高度过高导致查询缓慢。将全部记录按某个字段,分类到多个表中。例如,身份证表,按地区拆分。数据层-库单库的机器性能成为瓶颈。将身份证表,
Mybatis Springboot配置 基本的增删改查 文章主要是记录一次demo的搭建过程,方便以后回顾。只贴出了关键代码和指明了关键位置。不过也算是比较完整了。springboot配置i. pom.xml主要是这几个依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId
Java 通过线程池运行Runnable Callable FutureTask,通过Future获取返回值 Callable是可以获取返回值的Runnable,不过Callable只能通过线程池,来直接的提交任务。如果通过Runnable来执行任务,则只能通过FutureTask来获取返回值。线程池ExecutoerService的execute()方法,只接收Runnable入参。要想获取任务返回值,只能通过FutureTask。submit()方法,可以接收Runnable和Callable入参。获取返回值,既可以通过Future+Callable,也可以通过FutureTask+Runnab
Java Runnable Callable FutureTask的关系概括和使用方式 直接通过new Thread().start()来运行多线程/** * Runnable * Callable * FutureTask */@Slf4jpublic class ThreadTest { public static void main(String[] args) throws ExecutionException, InterruptedException { new Thread(new Runnable() { // 最基础的新建线程的方式~
ARM64汇编,跳转命令B\CBZ,字节码 B无条件跳转一条汇编指令 __text:000000010333E3D4 B loc_10333EA74对应字节码A8 01 00 14其中,0x14是B对应的字节码,0x1A8是对应的偏移0x10333EA74 - 0x10333E3D4 = 0x6A0 =0x1A8 * 4这里*4推测是一条指令4个字节的意思。CBZ有条件跳转一条汇编指令 __text:00000001031CAE70 ...
ARM汇编指令 CSEL CSET CSEL X7, X2, X0, EQ ; if (cond == true) X7 = X2, else X7 = X0CSET W0, EQ ; if (cond == true) W0 = 1, else W0 = 0
ARM汇编指令 UXTW/UXTH/UXTB, SXTW/SXTH/SXTB UXTW:Zero-extend single-word例如:需要ADD X0, X0, W1时,需要把W1拓展成X1:ADD X0, X0, W1, UXTW需要LDR X0, [X0, W1]时,同理:LDR X0, [X0, W1, UXTW]遇到后边带上一个立即数的情况:LDR W0, [X0, W1, UXTW #2],先把W1作Zero-extend处理,然后left-shift by 2,然后进行LDR。题外话:一般这种情况,由于内存中是按字节存储,想读..
ARM64 记一个标准的循环的汇编代码 __text:0000000103D26604__text:0000000103D26604 ; =============== S U B R O U T I N E =======================================__text:0000000103D26604__text:0000000103D26604__text:0000000103D26604 ; __int64 __fastcall Rename_103D26604_BS_XOR(__int64 a1, _
curl 代理测试 username:password curl -x proxy_address -U username:password target_address-x 不是 -X-U 不是 -u可以带上-v,看看详细请求/响应