Algorithm:每周至少作一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。java
本周的算法题是一道关于链表的题目19. Remove Nth Node From End of List,给定一个列表,要求移除倒数第n个节点,并返回头结点。
node
因为咱们并不知道列表有多长,因此得遍历列表探测当前节点是不是列表尾节点,又由于咱们须要移除倒数第n个节点,所以咱们使用两个间距为n的指针来指向先后两个节点,当前面的节点指向尾节点的时候,后面的指针指向的节点的下一个节点正好是咱们须要移除的倒数第n个节点。
python
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的文章是Logging Activity With The Web Beacon API。Beancon API是一种基于js的web api,能够用于将少许数据从浏览器发送到给web服务端,而不用等待响应。在这篇文章里,咱们将看到它能用来作什么,它和ajax技术的不一样点,以及如何使用它。
react
Beancon使用场景,例如Google Analytics只须要记录页面行为发送到服务器而无需获取服务器的响应。web
另外一种使用场景是从js代码中记录信息,它能够在游戏建立保存点,收集有关功能使用的信息,或记录多变量测试的结果,这些事情均可以考虑使用Beacon。
ajax
一般,你可使用unload或beforeunload事件来执行日志记录。 当用户执行相似跟踪页面上的连接以导航时,会触发这些操做。 这里的问题是在其中一个卸载事件上运行的代码能够阻止执行并延迟卸载页面。 若是页面的卸载被延迟,那么加载下一页也会延迟,所以体验感受很是缓慢。Beacon经过排队请求而不阻塞来解决这个问题,将控制权当即返回到您的脚本。 而后浏览器负责在后台发送该请求而不会阻塞。 这使得一切都变得更快,这让用户更快乐,让咱们都能保住工做。
算法
使用Beancon很简单,代码以下:后端
let result = navigator.sendBeacon(url, data);
返回一个boolean类型的结果,若是浏览器接受请求并将其排队,则为true;若是执行此操做,则为false。
api
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等其余替代方案有更快的性能。
更多信息请查阅下列文章:
这周学习用pyqt5写了个带GUI的python小软件,但也仅仅是使用了pyqt的一点皮毛而已,在此只是推荐一下pyqt,做为使用python编写GUI的一个选择。
今天分享一篇比较有意思的文章,来自于React团队成员、Redux做者Dan Abramov的年终总结Things I Don’t Know as of 2018,文章主要叙述了做者不是很擅长的一些知识,好比Unix命令、bash、低级语言、容器、python、node后端、java等等,做者在文章的结尾道出了他写做此文的意图: