Blog

大学生活像极了一个被精心布局的异彩纷呈的迷宫

Content #

当政府权力渗入高校治理的环节,且大学坚持知识生产和育人使命时,现实中的大学生活就远非市场逻辑所能理解的了,而是充满了与市场理性无关的许多其他内容。可以这么说:从新生入学的那天起,直到他/她有一天忽然意识到自己快要毕业了,这一过程的丰富性甚至可能让他/她短暂地忽视就业市场的竞争规则。

事实上,在我国一流大学的校园里,占据学生们大量时间和精力的各类课内外活动,诸如讲座、社团、党校、学生会、社会实践、志愿服务、学术科创竞赛等等,大都与就业准备并无显然的联系。生机勃勃的校园里充斥着一张张令人炫目的活动海报,看似杂乱无章,实则各有其理:讲座主要由院系举办,目的是增强学术交流、拓宽师生的知识面;以兴趣爱好为基础组建的各类学生社团则有助于丰富校园生活、促进兴趣和特长发展;党团组织活动是吸纳、培养党员和发扬党的先进性的抓手;学术科创项目意在激发学生的科研潜力和创新能力;各类社会调研、实践和志愿服务活动则扮演着落实思想政治教育、培养社会主义核心价值观的第二课堂角色……学校表彰奖励优秀学生的评价体系很大程度上基于学业水平、品德和校园活动参与度,与市场上对就业能力的评估标准关联度不大。学校提供的针对毕业生就业的政策也以全局的国家利益为先,对学生的价值感召——例如那句耳熟能详的“到祖国最需要的地方去”——往往带着浓厚的集体主义的家国情怀,而非谋求个人利益最大化的市场逻辑。

总之,市场化在大学内外部发生程度的不同,使得“成为好学生”和“找着好工作”对应着不同的游戏规则,这无疑加大了学生安排大学生活的难度。当大学生懵懵懂懂地踏入名校校园,很可能会发现其间的生活像极了一个被精心布局的异彩纷呈的迷宫:并不存在一条“主路”或某种标准走法——似乎每一天的过法都有许多种可能,每个人在路口处需要不断地做选择,每一条小路(例如科研、学生会、社团等)都各有乾坤,且大多与迷宫外的世界保持着一定的距离。他们在各个小路之中穿行探索,一边选择自己的路线,一边在路途上收集着有价值的筹码(成绩、经历、奖项等)。他们与其他探索者之间是一种心照不宣的竞争关系,因为筹码的数量是有限的;当他们到达迷宫出口的时候,他们需要将口袋里的筹码拿出来,用它们来兑换成下一个旅程的入场券。不过,对不同社会出身的探索者来说,这个迷宫的神秘度是不同的。有人对里面的布局相当了解,有人半知半解,而有人只能通过道听途说略知一二。尤其关键的是:并不是所有人都很清楚当中的游戏规则,譬如迷宫的尽头究竟有哪几个出口,而每个出口处有用的筹码又有什么不同。

From #

金榜题名之后

book:金榜提名之后

Content #

“资本化过程”(capitalizing process)来源于 布迪厄的文化资本(cultural capital)理论,指家庭赋予的经济、文化和社会资源在大学场域里被转化为竞争优势或劣势的过程,这一过程意味着学生的社会出身对他们的文化资本及习性的模塑。

“投入过程”(engagement process)来源于汀托和Kuh的 学习社交融入理论 (academic and social integration theory),指学生主动投入到大学的各类教育性实践活动的过程,这一过程意味着学生入校后发挥能动性的努力。

“价值选择过程”(valuation process)则来源于文化社会学中关于文化与行动之关联的两种理论路径——价值观驱动范式和文化“工具箱”范式,指大学生为自己的毕业出路树立价值目标,从而对自身的毕业去向作出选择的过程。

政治管理精英和专业技术精英是中国职业流动机制中的两条分立的路径

社会出身弱势的几个维度。 优势阶层的父母与低阶层的父母在帮助孩子的层面有很大不同。 习性分裂的体验(a habitus divided against itself)目标掌控者与直觉依赖者

习性、资本和场域在教育不平等中的关系

名校大学生工作意义来源的三角图式结构

大学生出路产生机制的四分类 四种类型的毕业出路获得机制

精英大学中羁绊低阶层学生的文化障碍

vlookup

Content #

Calc的vlookup函数调用的格式?

VLOOKUP(SearchCriterion; Array; Index; Sorted)

注意Array的第1列是索引列,不能自行指定索引列。

Sorted默认为TRUE,表示数组的第一列是升序排列的,即使要查找的值在第一列中不存在,vlookup也会得到结果。将Sorted设置为FALSE,则会将搜索的值与第一列的值去比较,如果找不到,会得到Error。

From #

Cookie的安全性

Content #

在 JS 脚本里可以用 document.cookie 来读写 Cookie 数据,这就带来了安全隐患,有可能会导致“跨站脚本”(XSS)攻击窃取数据。

属性“HttpOnly”会告诉浏览器,此 Cookie 只能通过浏览器 HTTP 协议传输,禁止其他方式访问,浏览器的 JS 引擎就会禁用 document.cookie 等一切相关的 API,脚本攻击也就无从谈起了。

另一个属性“SameSite”可以防范“跨站请求伪造”(XSRF)攻击,设置成“SameSite=Strict”可以严格限定 Cookie 不能随着跳转链接跨站发送,而“SameSite=Lax”则略宽松一点,允许 GET/HEAD 等安全方法,但禁止 POST 跨站发送。

还有一个属性叫“Secure”,表示这个 Cookie 仅能用 HTTPS 协议加密传输,明文的 HTTP 协议会禁止发送。但 Cookie 本身不是加密的,浏览器里还是以明文的形式存在。

Viewpoints #

From #

19 | 让我知道你是谁:HTTP的Cookie机制

Cookie的有效期

Content #

Cookie 的有效期可以使用 Expires 和 Max-Age 两个属性来设置。

“Expires”俗称“过期时间”,用的是绝对时间点,可以理解为“截止日期”(deadline)。“Max-Age”用的是相对时间,单位是秒,浏览器用收到报文的时间点再加上 Max-Age,就可以得到失效的绝对时间。

Expires 和 Max-Age 可以同时出现,两者的失效时间可以一致,也可以不一致,但浏览器会优先采用 Max-Age 计算失效期。

比如在这个例子里,Expires 标记的过期时间是“GMT 2019 年 6 月 7 号 8 点 19 分”,而 Max-Age 则只有 10 秒,如果现在是 6 月 6 号零点,那么 Cookie 的实际有效期就是“6 月 6 号零点过 10 秒”。

Viewpoints #

From #

19 | 让我知道你是谁:HTTP的Cookie机制

重定向状态码(301和302)

Content #

301 俗称“永久重定向”(Moved Permanently),意思是原 URI 已经“永久”性地不存在了,今后的所有请求都必须改用新的 URI。

浏览器看到 301,就知道原来的 URI“过时”了,就会做适当的优化。比如历史记录、更新书签,下次可能就会直接用新的 URI 访问,省去了再次跳转的成本。搜索引擎的爬虫看到 301,也会更新索引库,不再使用老的 URI。

302 俗称“临时重定向”(“Moved Temporarily”),意思是原 URI 处于“临时维护”状态,新的 URI 是起“顶包”作用的“临时工”。

浏览器或者爬虫看到 302,会认为原来的 URI 仍然有效,但暂时不可用,所以只会执行简单的跳转页面,不记录新的 URI,也不会有其他的多余动作,下次访问还是用原 URI。

Viewpoints #

From #

18 | 四通八达:HTTP的重定向和跳转

队头阻塞(Head-of-line blocking)

Content #

“队头阻塞”是由 HTTP 基本的“请求 - 应答”模型所导致的。

因为 HTTP 规定报文必须是“一发一收”,这就形成了一个先进先出的“串行”队列。队列里的请求没有轻重缓急的优先级,只有入队的先后顺序,排在最前面的请求被最优先处理。

如果队首的请求因为处理的太慢耽误了时间,那么队列里后面的所有请求也不得不跟着一起等待,结果就是其他的请求承担了不应有的时间成本。

Viewpoints #

From #

17 | 排队也要讲效率:HTTP的连接管理

TCP的队头阻塞

RDD分区

Content #

RDD可看作是分区(Partition)组成的数组。每个分区指向一个存放在内存或者硬盘中的数据块(Block),而这些数据块是独立的,它们可以被存放在系统中的不同节点。

RDD 只是抽象意义的数据集合,分区内部并不会存储具体的数据。

RDD 中的每个分区存有它在该 RDD 中的 index。通过 RDD 的 ID 和分区的 index 可以唯一确定对应数据块的编号,从而通过底层存储层的接口中提取到数据进行处理。

在集群中,各个节点上的数据块会尽可能地存放在内存中,只有当内存没有空间时才会存入硬盘。这样可以最大化地减少硬盘读写的开销。

虽然 RDD 内部存储的数据是只读的,但是,我们可以去修改(例如通过 repartition 转换操作)并行计算单元的划分结构,也就是分区的数量。

Viewpoints #

From #

13 | 弹性分布式数据集:Spark大厦的地基(上)

窄依赖(Narrow Dependency)和宽依赖(Wide Dependency)

Content #

窄依赖就是父 RDD 的分区可以一一对应到子 RDD 的分区,宽依赖就是父 RDD 的每个分区可以被多个子 RDD 的分区使用。

显然,窄依赖允许子 RDD 的每个分区可以被并行处理产生,而宽依赖则必须等父 RDD 的所有分区都被计算好之后才能开始处理。

一些转换操作如 map、filter 会产生窄依赖关系,而 Join、groupBy 则会生成宽依赖关系。因为 map 是将分区里的每一个元素通过计算转化为另一个元素,一个分区里的数据不会跑到两个不同的分区。而 groupBy 则要将拥有所有分区里有相同 Key 的元素放到同一个目标分区,而每一个父分区都可能包含各种 Key 的元素,所以它可能被任意一个子分区所依赖。

Spark 之所以要区分宽依赖和窄依赖是出于以下两点考虑:

  1. 窄依赖可以支持在同一个节点上链式执行多条命令,例如在执行了 map 后,紧接着执行 filter。相反,宽依赖需要所有的父分区都是可用的,可能还需要调用类似 MapReduce 之类的操作进行跨节点传递。
  2. 从失败恢复的角度考虑,窄依赖的失败恢复更有效,因为它只需要重新计算丢失的父分区即可,而宽依赖牵涉到 RDD 各级的多个父分区。

Viewpoints #

From #

13 | 弹性分布式数据集:Spark大厦的地基(上)