Preface · 序
公众号内容同步备份。
- 本篇文章首发自我的公众号:
Life
- 🎵 Tennessee - Hans Zimmer
今天(8.14)在 B 站看了一位小姐姐使用相机记录上半年的影集,其中有一个评论说得很赞,大致意思是无论她拍得好坏起码她先拿起相机勇敢地去拍了,当然,她拍的确实也很棒。
五月末六月初,是最后在原来办公地点的日子。我不是个特别爱热闹的人,反倒是有些社恐,因此上班的活动地点也几乎是围绕着办公室周围,常去的店也是那几家,常和人也是那几个。每天看到的景也差不多,但总有某些时刻愿意打开相机去记录一下,也许只是背后的天空有些漂亮:
打开 iPhone 的实况照片(Live Photos)功能,稳住手机并按下快门,编辑照片调整为长曝光,穿梭的车流便出现了:
Business
特斯拉 · Tesla
今天分享一个关于特斯拉的内容。Elon Musk 曾经说:
当然,这并不是说特斯拉完全没有营销,相反 Elon Musk 本人的「带货」能力就很强。Alex Garcia 总结了这家公司营销中的 16 条经验:
- Use Social (preferably a person)
- Create a newsletter
- Rotate referral programs
- Generate Hype
- Create epic events with epic moments
- Create scarcity
- Customer-Service is the best marketing
- Create WTF moments
- Share the vision
- Build in public
- Generate free ads
- Own a title
- UCG is social proof
- Experience driven lead gen
- Reduce friction
- Tackle objections
经验之所以为经验,是由实践得来的,但这也并不是说只需要模仿和学习就可以达成一样的效果。就像阿干(干嘉伟)曾经说过的运营方法论:「解构、观测、对标、学习、重构」,对标和学习之后仍需要重构。一家突破性的公司,必然不是仅仅在一方面领先,就像苹果,不仅仅做出了触摸屏的手机,也革新了音乐、摄影、零售店等等领域。
另外值得一提的是,早在 2014 年 Elon Musk 在南加州大学的演讲中也提到了这一点(补充下后半句:「We put all of the money into R&D and manufacturing and design」):
Code & Notes
Set 扩展
之前我们举例了 Java 中的 HashSet
,这次我们回归 Swift。Swift 中的 Set
插入元素的方法是 insert
,查看源码可以看出其内部是由 _variant
实现的:
// Set.swift
extension Set: SetAlgebra {
@inlinable
@discardableResult
public mutating func insert(
_ newMember: __owned Element
) -> (inserted: Bool, memberAfterInsert: Element) {
return _variant.insert(newMember)
}
}
@frozen
public struct Set<Element: Hashable> {
@usableFromInline
internal var _variant: _Variant
}
_variant
的类型是 _Variant
,定义在 SetVariant
中对 Set
的扩展,但其插入方法内又调用了 asNative.insertNew
,而 asNative
是 _NativeSet
类型:
// SetVariant.swift
extension Set {
@usableFromInline
@frozen
internal struct _Variant {
@usableFromInline
internal var object: _BridgeStorage<__RawSetStorage>
}
}
extension Set._Variant {
@inlinable
internal mutating func insert(
_ element: __owned Element
) -> (inserted: Bool, memberAfterInsert: Element) {
let (bucket, found) = asNative.find(element)
if found {
return (false, asNative.uncheckedElement(at: bucket))
}
let isUnique = self.isUniquelyReferenced()
asNative.insertNew(element, at: bucket, isUnique: isUnique) // 🌟
return (true, element)
}
}
extension Set._Variant {
@usableFromInline @_transparent
internal var asNative: _NativeSet<Element> {
// ...
}
}
_NativeSet
的 insertNew
内部调用了 _unsafeInsertNew
,而后者又调用了 hashTable.insertNew
,这里可以说明 Swift 中的 Set
的本质与 Java 类似,仍然是哈希表:
// NativeSet.swift
@usableFromInline
@frozen
internal struct _NativeSet<Element: Hashable> {
/// See the comments on __RawSetStorage and its subclasses to understand why we
/// store an untyped storage here.
@usableFromInline
internal var _storage: __RawSetStorage
}
extension _NativeSet { // Insertions
@inlinable
internal func _unsafeInsertNew(_ element: __owned Element) {
_internalInvariant(count + 1 <= capacity)
let hashValue = self.hashValue(for: element)
// ...
let bucket = hashTable.insertNew(hashValue: hashValue) // 🌟
uncheckedInitialize(at: bucket, to: element)
_storage._count &+= 1
}
/// Insert a new element into uniquely held storage.
/// Storage must be uniquely referenced.
/// The `element` must not be already present in the Set.
@inlinable
internal mutating func insertNew(_ element: __owned Element, isUnique: Bool) {
_ = ensureUnique(isUnique: isUnique, capacity: count + 1)
_unsafeInsertNew(element)
}
}
extension _NativeSet { // Primitive fields
@inlinable
internal var hashTable: _HashTable {
@inline(__always) get {
return _storage._hashTable
}
}
}
关于 Swift 标准库中 HashTable
实现我抽出了一部分可以运行的代码,放在了 GitHub gist 上,附在文末左侧阅读原文处。我们这里不再深入该实现细节,有需要的可以自行研究。整体来看这块的实现还是挺绕的,没有 Java 看起来直截了当。Swift 中的 HashTable
是由 UnsafeMutablePointer
(C 语言中的非 const
指针)实现存储的:
// https://gist.github.com/kingcos/b80987a2afde9894e1fd6262b0978f9a
struct HashTable {
var words: UnsafeMutablePointer<Word>
}
晚安,明天见。