程序员眼中的日期与时间

本文使用了 JavaScript 脚本来生成动态网页内容。请确保已开启浏览器的 JavaScript 支持

大多数的应用程序都需要同日期(date)与时间(time)打交道,这取决于具体用例。一些应用程序使用日期与时间来决定何时用户可以获得日常登录奖励。另一些应用则需要根据用户所在地的时区来向他们展示下订单的时间。这些种种用例要求我们的程序员使用一套成熟且精密的方式来管理日期与时间,并且了解在日期与时间处理时会遇到的一些常见问题及其解决方案。

一张装饰用图片,展示了使用马赛克风格瓷砖拼装的树叶图案,经过染色滤镜效果处理
摄于新加坡滨海市区线市中心站,2023 年春季

为什么 GNU yes 程序这么快

几乎所有人在学习一门新的程序设计语言时,首先学到的功能便是将一段字符串——通常是“Hello, world!”——输出到屏幕上。在 *NIX 系统中,就一直存在着这样一个功能简单的程序,能够重复地将字符 “y”(或是其他什么东西)输出到屏幕上,通常用在一些需要用户重复输入确认指令的场景下:这个程序叫做 yes。

*NIX:表示类 Unix 操作系统,这通常包括 FreeBSD、GNU/Linux、MINIX 以及 macOS 等

Wikipedia

计算机中的字节序

字节(Byte)是计算机内存中的最小可寻址单位。计算机对于较大的对象使用多个字节将其表示:在将这些字节存入内存中时,计算机必须决定以何种顺序存储这些数据;同样地,在网络中传输大对象时,多个字节的传输顺序也至关重要——这些彼此相连的计算机系统必须确立一种统一的多字节数据传输方式,才可能互相协作。

这种事先约定的对多字节数据的存储以及传输使用的顺序,被称为字节序(又称“端序”,Endianness)。理解字节序对构建较底层程序以及深入理解计算机系统有帮助。

超文本传输协议(HTTP)中的响应状态码

本文内容评论 RFC 7231 第六章节

超文本传输协议(HTTP)的有趣之处在于,对于客户端向服务器发送的任意有效的请求,服务器都会做出响应。在这些响应报文中,包含了一组由三位数字组成的状态码,被称为响应状态码(Response Status Code),以表示服务器理解、尝试执行客户端所发出请求的结果。我们熟悉的 404(找不到网页)就是标准中定义的响应状态码之一。在本文中,我们首先回顾 HTTP RFC 标准中对于响应状态码的相关定义,然后对标准中定义的常见响应状态码给出解释。

HTTP 方法及其幂等性

本文内容评论 RFC 7231 第四章节

当我们试图通过浏览器的刷新功能重新加载购物网站的下单页面时,我们时常会遇到类似“要重新显示网页,浏览器可能需要重新提交请求”的提示——这表明用户浏览器认为重复向该网页提交数据可能会造成未预期的副作用(例如重复下单)。而对于另一些,无论用户执行多少次都不会影响系统状态的请求(比如获取用户购物车信息),我们则称它们是幂等(Idempotency)的:这个从数学中引入的术语表示某个元素无论经过多少次特定运算后,结果仍然不变。

互联网中的跨域资源共享(CORS)策略

本文参考了来自 MDN Web Docs 的诸多内容。

网站开发者在开发调试过程中常会遇到有关浏览器阻止对跨域资源(Cross-Origin Resource,COR)进行任意访问的问题:当位于某个域(如 example.com)的网站想要去访问位于另一个域(比如 user.example.com)的资源时,同源访问(跨域资源共享)的相关策略便会生效。在上例中,开发者或许只是想动态拉取位于 user.example.com/user.json 的用户列表文件,用于在网页中向用户展示,而现代浏览器的跨域资源共享(Cross-Origin Resource Sharing,CORS)策略却禁止了这种访问方式。发生了什么?

为什么要有指针和引用类型?

……显然,我们能通过名字使用对象。然而在 C++ 中,大多数对象都“有身份”;也就是说对象位于内存的某个地址中,如果我们知道对象的地址和类型,就能访问它……

翻译自 Bjarne Stroustrup 《The C++ Programming Language》(Fourth Edition),Chapter 7.

@Lollipop9z(失效链接) 同学在上次与我讨论时提出了这个很有趣的问题。由于 lollipop 之前有学习 Python 程序设计语言的背景,所以对于 C++ 等语言中为何提供这些特性感到困惑。事实上,很多学习过包含指针和/或引用概念程序设计语言的同学也仍然对于为什么会存在这些语言元素的原因缺乏思考。下述代码以 C++ 为例。