每日算法&面试题,大厂特训二十八天——第六天(双指针)

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日算法&面试题,大厂特训二十八天——第六天(双指针)相关的知识,希望对你有一定的参考价值。

目录标题

导读

肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行十四天的一个小总结。还在等什么快来一起肥学进行十四天挑战吧!!

特别介绍

📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶

📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏

📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们

📣这是个冲刺大厂面试专栏还有算法比赛练习我们一起加油 上岸之路

算法特训十四天

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:

输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3(测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
示例 2:

输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为 34,我们返回第二个结点。
class Solution 
    public ListNode middleNode(ListNode head) 
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) 
            slow = slow.next;
            fast = fast.next.next;
        
        return slow;
    


给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1:


输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:

输入:head = [1], n = 1
输出:[]
示例 3:

输入:head = [1,2], n = 1
输出:[1]
 

class Solution 
    public ListNode removeNthFromEnd(ListNode head, int n) 
        ListNode dummy = new ListNode(0, head);
        ListNode first = head;
        ListNode second = dummy;
        for (int i = 0; i < n; ++i) 
            first = first.next;
        
        while (first != null) 
            first = first.next;
            second = second.next;
        
        second.next = second.next.next;
        ListNode ans = dummy.next;
        return ans;
    


面试题

你有哪些手段来排查 OOM 的问题?
1·增加两个参数 -XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath=/tmp/heapdump.hprof,当 OOM 发生时自动 dump 堆内存信息
到指定目录。
2·同时 jstat 查看监控 JVM 的内存和 GC 情况,先观察问题大概出在什么区域。
3·使用 MAT 工具载入到 dump 文件,分析大对象的占用情况,比如 HashMap 做缓存未
清理,时间长了就会内存溢出,可以把改为弱引用。
请你谈谈 mysql 事务隔离级别,MySQL 的默认隔离级别是什么?
为了达到事务的四大特性,数据库定义了 4 种不同的事务隔离级别:
1·READ-UNCOMMITTED(读取未提交):最低的隔离级别,允许脏读,也就是可能读取
到其他会话中未提交事务修改的数据,可能会导致脏读、幻读或不可重复读。
2·READ-COMMITTED(读取已提交): 只能读取到已经提交的数据。Oracle 等多数数
据库默认都是该级别 (不重复读),可以阻止脏读,但是幻读或不可重复读仍有可能发
生。
3·REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据
是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
4·SERIALIZABLE(可串行化):最高的隔离级别,完全服从 ACID 的隔离级别。所有的
事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏
读、不可重复读以及幻读。
5·MySQL 默认采用的 REPEATABLE_READ 隔离级别。

点击直接资料领取

这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。

以上是关于每日算法&面试题,大厂特训二十八天——第六天(双指针)的主要内容,如果未能解决你的问题,请参考以下文章

每日算法&面试题,大厂特训二十八天——第八天(递归|回溯)

每日算法&面试题,大厂特训二十八天——第十三天(数组)

每日算法&面试题,大厂特训二十八天——第九天(位运算)

每日算法&面试题,大厂特训二十八天——第二十一天(树)

每日算法&面试题,大厂特训二十八天——第二十七天(函数)

每日算法&面试题,大厂特训二十八天——第二十三天(树)