(1),2024年最新nginx教程pdf

🌳2.算法为什么要从双指针学习开始?

===================

😭1.高校缺乏系统的算法学习

相信大多数的初学者都是大一学生,学生开设的数据结构与算法我也上过,课程进度快课时少,侧重于数据结构,对于算法只粗略涉及部分基础的排序算法。许多对算法感兴趣的学生根本不知道如何去学习算法,进而像无头苍蝇一样,四处碰壁最后放弃

😭2.初学者容易好高骛远

双指针算法可能有的人都没听过,但一说到什么动态规划,贪心算法,递归。他嘎嘎带劲的开始讲起来,给他一道题他能写一个钟,写的代码又长bug又多,找一个钟bug,最后把答案的代码扒下来提交,又看不懂。久而久之就失去了对算法的兴趣。

😀3.双指针简单,逻辑性强,可作为学习算法的基础

双指针是一种很底层的算法,它可以作为其他的算法的基础,就像某些排序算法,其实都是以双指针的思想。它的逻辑生动形象,通过画图,很容易让初学者接受,并感受到算法的奥妙和趣味,算法能力提高以后,对于后续更难的算法学习才有了一定的基础。正所谓要会跑得先会走,双指针正是我们学习算法的开胃菜。

🌳3.什么是双指针?

===========

很多小白都是从C语言开始学习,听到C指针,就以为是C语言里的指针,这里千万不能搞错,双指针是一种思想,在任何语言都是适用的。它一般是分为左指针和右指针,左指针我们通常为int left,右指针为int right。首先我们要明白,数组在代码中应用的场景是非常广泛的,我们访问数组元素时通过它的下标访问,而它的下标为是int变量的,所以我们的左右指针其实是一个int变量的整数。它们时刻保存着数组中某两个下标。

🌷 下面为双指针最基础的应用场景:

如图我们能看出:指针只是我们虚拟想象出来的,它只是好像指向数组某个数据域,其实它只是一个简单的int变量,我们通过访问它来访问它指向数组的元素。比如我要获得左指针left的值,这个数组是arr,我可以写arr[left],获得右指针的值为arr[right]。我们通过对变量的加减来实现指针的移动,**比如我left++,left就向右移动一位到了下标为1的位置,right–,右指针就指向到了下标为n-2的位置。**就这样通过不断的移动,达到我们在算法题目中要求,这就是双指针思想。

🌳4.双指针的应用场景

============

🎨 1.同向快慢双指针


首先我们要清楚,双指针虽然叫分为左右双指针,但它刚开始并不一定是一个在左一个在右,只是在它们不断的移动过程中,会有快慢之分,所以我们为了区别才称之为快慢指针,所以在最开始定义时,它们有可能是在同一边出发的。下面通过一道力扣真题来初步尝试一下。

🌞 删除有序数组的重复项

题目

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

给上题目链接:删除有序数组的重复数

💚 思路:做算法题和做数学题一样,我们需要抓住关键信息,这个数组是**有序数组。**同样我们要分析这个有序的含义,既然是有序的,那么重复的元素肯定是相邻的。即当我们的快慢指针同时从左侧开始运动后,每次快指针移动一格后同时与前一位进行判断是否相等,如果相同那快指针就继续移动,当我们判断到不相等时,这时说明我们的快指针指向了一个新元素,这时将快指针的元素赋值给慢指针,然后两个指针同时向右移动1位,直到快指针遍历完整个数组,这时慢指针前面的元素全都是不重复的,我们返回慢指针的值就是答案。觉得还有点抽象的可以搭配下面图食用

❤️ 核心:慢指针指待赋值的位置,快指针用来遍历数组查找新元素

❗️ PS:循环考虑时,需要先判断数组长度,如果为0,我们直接返回0即可。如果不为0,那么无论最后怎么删除,最少也会剩一个元素,所以我们快慢指针的起始位置都在下标为1处,希望能认真理解这里的意思

😍代码展示:

public int removeDuplicates(int[] nums) {

int n = nums.length;

if (n == 0) {

return 0;

}

int fast = 1, slow = 1;

while (fast < n) {

if (nums[fast] != nums[fast - 1]) {

nums[slow] = nums[fast];

++slow;

}

++fast;

}

return slow;

}

🎨 2.相向左右双指针


前面一种是同向的双指针,下面这种是相向的双指针,也就是一左一右的左右指针,前一种通常是快指针遍历完则结束循环得到答案。而这种相向通常是左右指针满足某种条件时或者两者相遇时结束循环,去感受两者的区别和魅力

🌞 删除有序数组的重复项

题目:给定一个已按照 非递减顺序排列  的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。

函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

给上题目链接:两数之和||——输入有序数组

💚 思路:因为我们需要找到两个数相加等于目标数target,因为数组是一个非递减的数组,所以当我们的两个指针指向数组的两端,此时他们相加有一个和我们设为sum。如果左指针向右移动,右指针不动,此时sum要么不变要么变大,不可能变小,因为数组是非递减的。反之如果右指针向左移动,左指针不动时,sum要么变小要么不变。那每次我们对sum和target进行比较,如果sum小于target,我们是不是需要让sum变大?那我们把左指针右移一位继续判断,sum还小与target,左指针就继续移。当突然发现sum一下变得比target大了,我们就需要把右指针左移,让sum变小,就在这不断的平衡中,终有两个位置,使得sum等于target,就是此时两指针的位置。因为题目说了仅存在一个有效答案,如果没有我们就返回两个-1即可。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后的内容

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)

如何准备面试?

1、前期铺垫(技术沉积)

程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

下面是我会看的一些资料笔记,希望能帮助大家由浅入深,由点到面的学习Java,应对大厂面试官的灵魂追问

这部分内容过多,小编只贴出部分内容展示给大家了,见谅见谅!

  • Java程序员必看《Java开发核心笔记(华山版)》

  • Redis学习笔记

  • Java并发编程学习笔记

四部分,详细拆分并发编程——并发编程+模式篇+应用篇+原理篇

  • Java程序员必看书籍《深入理解 ava虚拟机第3版》(pdf版)

  • 大厂面试必问——数据结构与算法汇集笔记

其他像Spring,SpringBoot,SpringCloud,SpringCloudAlibaba,Dubbo,Zookeeper,Kafka,RocketMQ,RabbitMQ,Netty,MySQL,Docker,K8s等等我都整理好,这里就不一一展示了。

2、狂刷面试题

技术主要是体现在平时的积累实用,面试前准备两个月的时间再好好复习一遍,紧接着就可以刷面试题了,下面这些面试题都是小编精心整理的,贴给大家看看。

①大厂高频45道笔试题(智商题)

②BAT大厂面试总结(部分内容截图)

③面试总结

3、结合实际,修改简历

程序员的简历一定要多下一些功夫,尤其是对一些字眼要再三斟酌,如“精通、熟悉、了解”这三者的区别一定要区分清楚,否则就是在给自己挖坑了。当然不会包装,我可以将我的简历给你参考参考,如果还不够,那下面这些简历模板任你挑选:

以上分享,希望大家可以在金三银四跳槽季找到一份好工作,但千万也记住,技术一定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-zyBiH9b3-1712757927995)]

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值