专注、坚持

日拱一卒 - 21.08.14 & 08.15

2021.08.15 by kingcos
Preface · 序
公众号内容同步备份。
  • 本篇文章首发自我的公众号:

萌面大道


Life

  • 🎵 Tennessee - Hans Zimmer

今天(8.14)在 B 站看了一位小姐姐使用相机记录上半年的影集,其中有一个评论说得很赞,大致意思是无论她拍得好坏起码她先拿起相机勇敢地去拍了,当然,她拍的确实也很棒。

五月末六月初,是最后在原来办公地点的日子。我不是个特别爱热闹的人,反倒是有些社恐,因此上班的活动地点也几乎是围绕着办公室周围,常去的店也是那几家,常和人也是那几个。每天看到的景也差不多,但总有某些时刻愿意打开相机去记录一下,也许只是背后的天空有些漂亮:

210531 🌆

打开 iPhone 的实况照片(Live Photos)功能,稳住手机并按下快门,编辑照片调整为长曝光,穿梭的车流便出现了:

210602 🚗

Business

特斯拉 · Tesla

今天分享一个关于特斯拉的内容。Elon Musk 曾经说:

19.05.19 Elon Musk

当然,这并不是说特斯拉完全没有营销,相反 Elon Musk 本人的「带货」能力就很强。Alex Garcia 总结了这家公司营销中的 16 条经验:

  1. Use Social (preferably a person)
  2. Create a newsletter
  3. Rotate referral programs
  4. Generate Hype
  5. Create epic events with epic moments
  6. Create scarcity
  7. Customer-Service is the best marketing
  8. Create WTF moments
  9. Share the vision
  10. Build in public
  11. Generate free ads
  12. Own a title
  13. UCG is social proof
  14. Experience driven lead gen
  15. Reduce friction
  16. Tackle objections

经验之所以为经验,是由实践得来的,但这也并不是说只需要模仿和学习就可以达成一样的效果。就像阿干(干嘉伟)曾经说过的运营方法论:「解构、观测、对标、学习、重构」,对标和学习之后仍需要重构。一家突破性的公司,必然不是仅仅在一方面领先,就像苹果,不仅仅做出了触摸屏的手机,也革新了音乐、摄影、零售店等等领域。

另外值得一提的是,早在 2014 年 Elon Musk 在南加州大学的演讲中也提到了这一点(补充下后半句:「We put all of the money into R&D and manufacturing and design」):

2014 at USC

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> {
      // ...
  }
}

_NativeSetinsertNew 内部调用了 _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>
}

晚安,明天见。

阅读原文