26届JAVA 学习日记——Day1

2024.11.02 周六
上午睡觉,下午练车,晚上回家吃饭又睡了一会。

八股

键入网址到网页显示,期间发生了什么?

  1. 浏览器做的第一步工作是解析URL,并根据确定的Web服务器和文件名生成HTTP请求消息。
  2. 查询服务器域名对应IP地址(DNS解析)。
  3. 将HTTP的传输工作交给操作系统中的协议栈。
  • 应用程序(浏览器)通过调用Socket库,来委托操作系统中的协议栈工作。
  • 协议栈上半部分是TCP和UDP协议,它们接受应用层(浏览器)的委托执行收发数据的操作。
  • 协议栈下半部分是IP协议控制网络包的收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由IP负责的。
  • IP中包括ICMP(告知网络包传送过程中产生的错误)和ARP(根据IP地址查询相应的以太网MAC地址)。
  1. 网卡驱动程序获取网络包之后,将其复制到网卡内的缓存区,在开头加上报头和起始帧分界符在末尾加上用于检测错误的帧校验序列,最后网卡将包转成电信号,通过网线发送出去。
  • 网络包只是存放在内存中的一串二进制数字信息,因此需要将数字信息转换成电信号,才能在网线上传输。
  1. 电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换成数字信号,根据MAC地址表查找MAC地址,将信号发送到相应的端口。
  • 交换机的端口不具有MAC地址
  • 当交换机无法判断应该把包转发到哪个端口 或 接收方MAC地址是一个广播地址(FF:FF:FF:FF:FF:FF),交换机会将包发送到除源端口之外的所有端口。
  1. 网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备,当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
  • 路由器的各个端口都具有MAC地址和IP地址
  • 在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。
  • MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。

算法

200.岛屿数量 (深度优先搜索dfs)
215.数组中的第k个最大元素(暴力解法:快速排序)

快速排序

通过筛选一个基准元素,将待排序列分隔成两个子序列,使其中一个子序列元素都小于基准元素,另一个子序列元素都大于基准元素,再对子序列进行快速排序直到整个序列有序。

//暂时没彻底搞懂快速排序,明天继续解决
class Solution {
    public int quickselect(int[] nums, int l, int r, int k) {
        //若left = right,即数组长度n=1时,返回索引为n-k的数即数组中倒数第k个值
        if (l == r) return nums[k];
        //将第一个元素作为基准元素开始快速排序
        int x = nums[l], i = l - 1, j = r + 1;
        //该循环结束后,左右指针停止移动,此时除第一个元素外,停止点左侧都小于基准元素,停止点右侧都大于基准元素
        while (i < j) {
            //do-while后i所指位置元素为左侧第1个大于基准元素的数,j为右侧第1个小于基准元素的数
            do i++; while (nums[i] < x); //当左侧指针所指元素小于基准元素,左指针右移
            do j--; while (nums[j] > x); //当右侧指针所指元素大于基准元素,右指针左移
            //当i<j时,将索引i,j的位置互换
            if (i < j){
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
            }
        }
        if (k <= j) return quickselect(nums, l, j, k);
        else return quickselect(nums, j+1, r, k);
    }    

项目

JavaWeb刚看完,大致能完成MVC的SpringWeb开发流程。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值