ARTS第七周

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。

Algorithm

本周的算法题是一道关于链表的题目19. Remove Nth Node From End of List,给定一个列表,要求移除倒数第n个节点,并返回头结点。
?

解题思路

由于我们并不知道列表有多长,所以得遍历列表探测当前节点是否是列表尾节点,又因为我们需要移除倒数第n个节点,因此我们使用两个间距为n的指针来指向前后两个节点,当前面的节点指向尾节点的时候,后面的指针指向的节点的下一个节点正好是我们需要移除的倒数第n个节点。
?

代码

   public ListNode removeNthFromEnd(ListNode head, int n) {
        //哨兵节点
        ListNode guard = new ListNode(0);
        guard.next = head;
        ListNode first = guard;
        ListNode second = guard;
        for (int i = 0; i < n + 1; i++) {
            first = first.next;
        }

        while (first != null) {
            first = first.next;
            second = second.next;
        }

        //当first走到尾节点的时候,second.next就是我们要移除的节点
        second.next = second.next.next;
        return guard.next;
    }

?

Review

Beancon API是一种基于js的web api,可以用于将少量数据从浏览器发送到给web服务端,而不用等待响应。在这篇文章里,我们将看到它能用来做什么,它和ajax技术的不同点,以及如何使用它。
?

Beancon能做什么

Beancon使用场景,例如Google Analytics只需要记录页面行为发送到服务器而无需获取服务器的响应。

另一种使用场景是从js代码中记录信息,它可以在游戏创建保存点,收集有关功能使用的信息,或记录多变量测试的结果,这些事情都可以考虑使用Beacon。
?

为什么我们要用Beancon

通常,你可以使用unload或beforeunload事件来执行日志记录。 当用户执行类似跟踪页面上的链接以导航时,会触发这些操作。 这里的问题是在其中一个卸载事件上运行的代码可以阻止执行并延迟卸载页面。 如果页面的卸载被延迟,那么加载下一页也会延迟,因此体验感觉非常缓慢。Beacon通过排队请求而不阻塞来解决这个问题,将控制权立即返回到您的脚本。 然后浏览器负责在后台发送该请求而不会阻塞。 这使得一切都变得更快,这让用户更快乐,让我们都能保住工作。
?

使用Beancon

使用Beancon很简单,代码如下:

let result = navigator.sendBeacon(url, data);

返回一个boolean类型的结果,如果浏览器接受请求并将其排队,则为true;如果执行此操作,则为false。
?

使用navigator.sendBeacon()

navigator.sendBeacon方法有两个参数,第一个参数是要请求的URL,请求类型是POST,发送第二个参数中所带的数据。

// URL to send the data to
let url = '/api/my-endpoint';
// Create a new FormData and add a key/value pair let data = new FormData(); data.append('hello', 'world');
let result = navigator.sendBeacon(url, data);
if (result) {
   console.log('Successfully queued!');
} else {
   console.log('Failure.');
}

?

浏览器支持

Beancon支持绝大多数浏览器,除了IE(支持Edge)和Opera mini,可以使用navigator.sendBeacon测试当前浏览器是否支持。

if (navigator.sendBeacon) {
   // Beacon code
} else {
   // No Beacon. Maybe fall back to XHR?
}

?

总结

除了上文,文中还展示了一个在页面上记录时间的实例。
?
Beancon API是一种非常有用的方法可以把数据从页面发回服务器,尤其是在记录上下文环境中。它支持的浏览器也非常广泛,它使您能够无缝地记录数据,而不会对用户的浏览体验和站点性能产生负面影响。请求的非阻塞性质意味着比XHR、Fetch等其他替代方案有更快的性能。
?
更多信息请查阅下列文章:

  • “W3C Beacon specification,” W3C Candidate Recommendation
  • “MDN Beacon documentation,” MDN web docs, Mozilla
  • “Browser support information,” caniuse.com
    ?

Tip/Techni

这周学习用pyqt5写了个带GUI的python小软件,但也仅仅是使用了pyqt的一点皮毛而已,在此只是推荐一下pyqt,作为使用python编写GUI的一个选择。
?

Share

今天分享一篇比较有意思的文章,来自于React团队成员、Redux作者Dan Abramov的年终总结Things I Don’t Know as of 2018,文章主要叙述了作者不是很擅长的一些知识,比如Unix命令、bash、低级语言、容器、python、node后端、java等等,作者在文章的结尾道出了他写作此文的意图:

  • 即使是你最喜欢的开发者也可能不知道很多你知道的东西。
  • 无论你的只是水平如何,不同时期的信心都会有很大差异。
  • 尽管存在只是缺口,但经验丰富的开发者术业有专攻。
    最后,作者说道:如果我对某个技术感到好奇,或者项目需要用到,我之后可以学习它。这不会使我的知识和经验贬值。我可以做很多事情。例如,在需要的时候再去学它。
    ?
    通过这篇文章,我感触比较深的有几点:
  • 从文中可以感受到作者的强烈的自信,敢于一一列出自己不精通的知识,觉得只要需要的时候再去学习它就可以了,没有因为有如此多知识缺口而焦虑。
  • 基础和学习能力很重要,知识是关联的,可以触类旁通,只要基础打得扎实,学习能力强,再学习其他的新知识就比较容易。
  • 每个人的时间精力都是有限的,把时间花在自己的专业领域,精通某一个领域、“专攻某个术业”才能有所成就。

原文地址:https://www.cnblogs.com/muxuanchan/p/10206058.html

时间: 2024-07-30 17:29:56

ARTS第七周的相关文章

《七周七数据库》读书分享

# 七周七数据库 读书分享会第一期 2017.02.12 <七周七数据库> - Eric Redmond ## 预备知识 ACID:原子 一致 隔离 持久 CAP原则:一致性 可用性 分区容错性,在分布式环境下,至多只能同时满足其二 "小明,你的数据库作业呢?""我可以今天提交一半的作业,或者明天提交全部的作业,但无法在今天提交全部的作业.""...小明你给我滚出去!" 小知识点: * 原子性:原子性代表中间状态的透明性,想象从a账户

第七周周记

第七周周记: 本周完成了 1.学习了高数的隐函数的求导和多元函数的求导,复习了偏导数和全微分. 2.学习了数据结构的顺序表和链式表的动态存储和应用,以及如何写代码. 3.HTML的网页设计:关于’滚动页面’的页面设计和开始学习用全代码做网页. 4.学会了在配置中设置网关,用命令行写配置和绘制一张交换机网络拓扑图. 5.再读了一本外国著作. 希望能够做好眼前事儿好好复习准备半期考,把以前落下的知识补回,更刻苦一点学习早日把知识掌握好. 周数 专业学习目标 专业学习时间 新增代码量 博客发表量 人文

第七周的问题总结

第七周的问题总结 阅读完了52.53班所有同学的第七周学习总结(大部分同学都没怎么提问题),归纳如下: 5201 问题1:为什么用中间位做索引? 解答:参看415页习题6.12和416页旁注.高位的话,任何时刻高速缓存都只保存着一个块大小的数组内容. 问题2:在这一节中好几个概念很容易混淆,在做题时就会产生错误.区分如下: 5204 1.linux下移动文件.复制文件cp [file_name] [destination]剪切文件mv [file name] [destination]如下图所示

学习进度条 第七周

这周由于是团队作业而且是大作业形式,代码除了复习数据结构算法写的代码其他基本没有写,安卓的代码只是下下来源码自己在看,自己的任务一旦确定就开始着手完成安卓应用.   第七周 所花时间(H) 11 代码量(行) 220 博客量(篇) 2 了解到的知识点 安卓开发的一些技巧

《Linux内核分析》第七周学习总结 可执行程序的装载

第七周.可执行程序的装载 一.可执行程序是如何产生的? (1).c文件gcc汇编形成.s和.asm汇编代码: (2)汇编代码经过gas变成.o目标文件: (3)目标文件变成可执行文件: (4)可执行文件loader之后存储. 预处理:gcc –E –o hello.cpp hello.c –m32 编译:gcc –x cpp-output –S –o hello.s hello.cpp –m32 //编译为汇编代码 gcc –x assembler –c hello.s –o hello.o –

大一下学期第七周周记

算一算虚度了一个学期了现在已经是大一下学期第七周了,还是一样的浑浑噩噩度过每一天,学习不尽人意,人际交往也坎坎坷坷没什么实质性的进展,每天都呆在宿舍里,感觉以后程序员的生活就是这样吗!!想想太恐怖了,赶紧喝口水压压惊.说到最近的代码学习方面,我感觉学会了制作网页小游戏的代码很欣喜,虽然不是很熟悉,但总有一点起色了,希望以后能让自己学到更多..也希望自己能更努力!

Linux内核分析——第七周学习笔记20135308

第七周 可执行程序的装载 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么来的 C代码—>预处理—>汇编代码—>目标代码—>可执行文件 .asm汇编代码 .o目标码 a.out可执行文件 预处理负责把include的文件包含进来及宏替换工作. 2.目标文件的格式ELF (1)常见的ELF格式文件: (2)ABI——应用程序二进制接口 在目标文件中,他已经是二进制兼容,即适应二进制指令. (3)ELF中三种目标文件: 一个可重定位(relocatable)文件保存着代码和

《七周七语言:理解多种编程范型》のruby课后习题答案

本系列是<七周七语言>的课后习题答案.这本书不拘泥于语法细节,而是横向比较各种编程语言(非热门)之间的编程范式. 是本对编程觉悟能有所帮助的好书,这里就不多做介绍了,感兴趣的同学不妨去看一下. 不得不说,Ruby的风格很黑客. 1. 打印字符串"Hello, world." puts "Hello, world." 2. 在字符串“Hello, Ruby.”中,找出"Ruby."所在下标. puts "Hello, Ruby

2014025688 《嵌入式程序设计》第七周学习总结

2014025688(30) <嵌入式程序设计>第七周学习总结 有名管道 FIFO也称为有名管道,它是一种文件类型.FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道,解决了不同进程之间的"代沟".普通的无名管道只能让相关的进程进行沟通(比如父shell和子shell之间).FIFO严格遵循先进先出(first in first out),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾.它们不支持诸如lseek()等文件定