BigBird Config
BigBird Config
  • 27
  • 22 433

วีดีโอ

กำจัด Thread.sleep ออกจาก Java unit test
มุมมอง 1.8Kวันที่ผ่านมา
การใช้ Thread.sleep() ใน unit test มักจะทำให้ test ใช้เวลาประมวลผลนานเกินความจำเป็น และยังทำให้ผลการทำงานไม่แน่นอน บางครั้งผ่าน บางครั้งไม่ผ่าน อยากจะเสนอแนะวิธีกำจัดมันออกไปจาก unit test
เรียนรู้การใช้ HAProxy ร่วมกับ Consistent Hashing
มุมมอง 4.5K21 วันที่ผ่านมา
โปรแกรมเมอร์ backend คงจะคุ้มเคยกันดีกับ HAProxy ซี่งเป็น load balancer ที่ได้รับความนิยมเป็นอย่างมาก วิดีโอนี้ผมได้ลองใช้ HAProxy ร่วมกับ Consistent Hashing จำลองการกระจาย load ใน distributed system.
Object ที่ไม่เป็นมิตรในการใช้งานสักเท่าไหร่นัก
มุมมอง 24321 วันที่ผ่านมา
เมื่อโปรแกรมเมอร์บ้านๆอย่างผม ผ่านไปเจอ Object อันหนึ่งที่ไม่เป็นมิตรในการใช้งานสักเท่าไหร่นัก จึงมาบ่นให้ฟัง
เก็บตกบรรยากาศ Agoda Dev Day
มุมมอง 127หลายเดือนก่อน
เก็บตกบรรยากาศ Agoda Dev Day ซึ่งเป็น internal tech conference ของบริษัทครับ
เรียนรู้ Consistent Hashing คืออะไร
มุมมอง 3.1Kหลายเดือนก่อน
แนะนำ Consistent Hashing ซึ่งเป็นเทคนิคสำคัญในการจัดการ load / data ใน distributed system. อีกทั้งยังเป็นเรื่องที่ถูกถามบ่อยในการสัมภาษณ์งาน system design.
HashMap กับ multi-threads มันจะพังได้แบบไหนบ้าง
มุมมอง 192หลายเดือนก่อน
ทุกคนคงรู้ว่า HashMap ธรรมดามันไม่ thread-safe. วันนี้ลองเอามาใช้กับ multi-threads ดู เพิ่งรู้ว่าผลลัพธ์มันออกมาแบบนี้
เดินทางไปสัมภาษณ์งาน on-site ต่างประเทศ เทคนิคเตรียมตัวเล็กน้อย
มุมมอง 7Kหลายเดือนก่อน
เทคนิคการเตรียมตัวเล็กน้อยจากประสบการณ์จริงของผม ในการเดินทางไปสัมภาษณ์งาน on-site ต่างประเทศ
ทำงานต่างประเทศ ครั้งหนึ่งได้ feedback จาก manager ที่ค่อนข้างรุนแรง
มุมมอง 295หลายเดือนก่อน
เล่าความหลังทำงานต่างประเทศ ครั้งหนึ่งได้ feedback จาก manager ที่ดีมากคนหนึ่งว่าผมกำลังทำให้เกิด silent failure
Java ReadWriteLock อาจจะไม่ช่วยเพิ่ม performance ของโปรแกรมในบางกรณี
มุมมอง 1812 หลายเดือนก่อน
ผมได้ผ่านไปเห็นวิดีโอหนึ่งกล่าวว่า เมื่อเอาไปใช้จริงแล้ว overhead ของ ReentrantReadWriteLock ค่อนข้างสูง และบ่อยครั้งมากที่สูงเกินประโยขน์ที่มันทำให้โปรแกรม ผมเลยอยากลองทดสอบดูว่า มันดีกว่า ReentrantLock ธรรมดาในเคสไหน Usage Considerations for Java ReentrantReadWriteLock th-cam.com/video/p4TqsdcJzAg/w-d-xo.html
KafkaSeries 1 : ติดตั้ง cluster แบบ KRAFT mode (แบบไม่ใช้ Zookeeper)
มุมมอง 1812 หลายเดือนก่อน
Kafka cluster installation ในแบบ KRAFT mode ซึ่งเป็นการติดตั้งแบบไม่ใช้ Zookeeper
Bloom Filter ฉบับผู้ใช้งาน
มุมมอง 1.9K2 หลายเดือนก่อน
แนะนำ use case จริงในการใช้งาน bloom filter
ผมเรียกตัวเองว่า software engineer ได้หรือไม่
มุมมอง 1.6K2 หลายเดือนก่อน
ผ่านไปเจอคอมเมต์หนึ่งในวิดีโอกล่าวถึงการใช้คำว่า software engineer น่าสนใจเลยอยากแชร์มุมมองของผม Source Video : th-cam.com/video/8c8Y70YKOFw/w-d-xo.html
tcp_retries2 กับ server ที่ตายไม่สงบ
มุมมอง 1652 หลายเดือนก่อน
เคสปัญหาจริงที่ server ตายไปในลักษณะแปลกประหลาด ต้องใช้ การปรับค่า net.ipv4.tcp_retries2 ช่วยในการแก้ปัญา
เล่าความหลัง เจอ deadlock ครั้งแรกในชีวิต
มุมมอง 1223 หลายเดือนก่อน
เล่าเครื่องตอนผม investigate issue อันหนึ่งบน production แล้วพบว่ามันเคือ deadlock.
Java concurrency : คำถามสัมภาษณ์งานต่างประเทศ
มุมมอง 3423 หลายเดือนก่อน
Java concurrency : คำถามสัมภาษณ์งานต่างประเทศ
Java HashMap ทำงานอย่างไร
มุมมอง 1173 หลายเดือนก่อน
Java HashMap ทำงานอย่างไร
Dublin walking around, Book of Kells , Dublin castle.
มุมมอง 42ปีที่แล้ว
Dublin walking around, Book of Kells , Dublin castle.
Killarney - Ring of Kerry by bus
มุมมอง 56ปีที่แล้ว
Killarney - Ring of Kerry by bus
Cork : walking around + Blarney Castle
มุมมอง 71ปีที่แล้ว
Cork : walking around Blarney Castle
Cork , Ireland - Saint Fin Barre's Cathedral
มุมมอง 101ปีที่แล้ว
Cork , Ireland - Saint Fin Barre's Cathedral
Howth, Dublin, Ireland
มุมมอง 63ปีที่แล้ว
Howth, Dublin, Ireland
ฝนตก ทริปล่ม
มุมมอง 26ปีที่แล้ว
ฝนตก ทริปล่ม
Walk and talk in Dublin
มุมมอง 50ปีที่แล้ว
Walk and talk in Dublin
Life Alone.
มุมมอง 23ปีที่แล้ว
Life Alone.
Random moments in Dublin
มุมมอง 45ปีที่แล้ว
Random moments in Dublin
Intro
มุมมอง 622 ปีที่แล้ว
Intro

ความคิดเห็น

  • @PavinWannasirilak
    @PavinWannasirilak 17 ชั่วโมงที่ผ่านมา

    ขออนุญาตแชร์ความเห็นผมด้วยนะครับ น่าสนใจดีครับ ผมคิดว่าท่านี้ค่อนข้างเป็นการ tweak ให้มันทำงานตามต้องการ มากกว่าความเป็นธรรมชาติที่มันควรจะเป็นครับ ปัญหามันคือแค่ topics ที่ถูก pass ไปเพื่อทำการ clean ถูก pass ไปแค่ครั้งเดียว ตอนสร้าง cleaner และยังไม่ได้ถูก clean ในทันทีด้วย "ทั้งที่มันควรถูกส่งไปใหม่ทุกๆครั้งที่เมื่อต้องการ clean" ตรงนี้ครับที่ผมว่ามันผิดธรรมชาติไปนิดจึงต้องมีท่ายากปรับแก้ไขให้เข้ารูปเข้ารอย ส่ิงที่ทำให้ส่ง topics ไปใหม่ไม่ได้ทุกๆครั้งๆที่ต้องการ clean เพราะ logic ยังปนกันอยู่ระหว่าง "การตั้งเวลาการทำงานของ worker" และ "การ clean topics" ถ้า cleaner รับผิดชอบแค่หน้าที่ว่า clean topics ต้องทำยังไง และให้การตั้งเวลาเป็นหน้าที่ของ AggregatorService ปัญหานี้จะจบทันทีเลยครับ สิ่งที่ผมพูดก็คือ เราจะย้าย worker ไปเป็น property ของ Aggregator แทน จากนั้นภายใน method run() ก็สั่ง worker.schedule() แบบเดียวที่ทำใน cleaner แล้ว argument ที่ pass ให้กับ schedule() คือ callback ที่ภายในสั่ง cleaner.cleanStaleMessages(topics) จบเลยครับ แต่ถ้าหากกลัวว่าหากมี service อื่นที่มี topcis เป็น property แบบนี้เหมือนกันแล้วต้องการคลีน เราจะต้อง duplicate logic ที่ service ต้องมี worker คอยตั้งเวลาทำทุกๆ 1 ชั่วโมงแบบนี้ไปเรื่อยๆเหรือเปล่า เราก็สามารถแยก logic ตรงนั้นออกมาเป็นคลาสได้อีกครับ เช่น oneHourWorker.schedule(() => {// ทำอะไรก็ได้ทุกๆ 1 ชั่วโมง }) คือแยก logic ออกมาทำหน้าที่เดียวเลยครับคือ spawn thread มาตั้งเวลา แบบนี้ก็อาจจะมีคำถามอีกว่างั้นจะทำทั้งหมดนี้ต้อง import class หลายๆคลาสที่ทำหน้าที่แยกกันมาทุกครั้งเลยหรือเปล่า งั้นไปสุดทางเลยได้ครับ เราสามารถ compose class ใหม่มาให้มันมีหน้าที่แบบเฉพาะเจาะจงยิ่งขึ้นได้ เช่นชื่อคลาส ScheduleTopicsCleaner ทำให้เวลาจะทำงานแบบนี้ก็ import แค่ custom class นั้นคลาสเดียว แต่ไม่สูญเสียความ flexible แบบเต็มเปี่ยมที่เรามีแต่ละคลาสย่อยๆทำหน้าที่ของตัวเองได้ดีแล้ว อันนี้ขอยกตัวอย่างเป็น code ไปเลยนะครับใน typescript พี่น่าจะอ่านเข้าใจได้ไม่ยาก รบกวนลองพิจารณาดูนะครับ point ผมแค่ การแบ่งคลาสแบบนี้น่าจะยังไม่ได้มีหน้าที่ความรับผิดชอบแบบแม่นยำพอ พี่ถึงได้สะดุดว่าต้องทำยังไงดีจึงออกมาเป็นท่ายากนี้เล็กน้อย แต่พอเข้าใจได้ครับ อยากให้ทำคลิปแบบนี้ออกมาแลกเปลี่ยนอีกเรื่อยๆครับพี่ ชอบมากครับ www.typescriptlang.org/play/?#code/JYOwLgpgTgZghgYwgAgCoHsAOwEG8BQyRywAJgFzIgCuAtgEbQDchxAzmHADYSX3roecECwC++fAi5w2bZACUImdG2Bh0UAJ7ICxZDAhgEACwzYEbABQBKSmZwBtALo7WeolEPUoIZM5Z64uKS0rLIAIIA5pGekXDqUADK0ABuOCi6xOrmbHZYjk4BxADuGgDW0JQA8iAQABLo3gDq5cxuyFIQwpXIiSYQpNQ89hYAwkK1UEVECOggHFDUCAmWnsqqCZqUiutqGprWru5ZxsBsAHTZOHIAvMhrKnta5wZGpvkWNtPuYKcXpVAKlBkHdasVkDV6o0oC1AdAvu09L8zudOt1gaCIOC+sYBkMICM2OMupMEYEJHpFiAbEdjshkRc0ZNURNCZYGZcPmxrN8ghIpDI5Di8cMucT0bSiACgdVag1mq0MVQsRC5dDYUCycQmT1CeLJiDleC9RN4Tz2ky2VcLHlzM5DpljhzpdBzmx+oMeJYaTcAHySulEDk6qAsklWrnmwOiKPEPkhQVoMWm4GOjqsrnsrm2goOxHEGAaZCWWbzMD0j7IdAwCs5POBvTAGtZ8xuzg8esN46ljj3CC0dApCAASRApAgAA9DdaLjBQKRR+OJ961P3Dn6SJBaOcyCCbndrTvSLGu3oe+XPAOhyNp1y3ZguOlVv3ByOx5OADTIAAM1gc38KfMux7QQIHOLh0EiSwAAM4GQDhuBQa0+yvAZyAAElwS9XxGI9RGgk8G3EaN2njAUwkheUYUVAN3VxT0IBLbguHoRAykoH1-RSdAyE7Ok2EMUdICgFJuG9dd-TTQMEGY1iEDKLVjlEL8AEZv3U5AACpkAANm-LTdN-Xl8GCCQgA

  • @BBConfig
    @BBConfig 2 วันที่ผ่านมา

    Credit free image used in the thumbnail - www.pexels.com/photo/calm-body-of-water-surrounded-by-mountains-3151191/

  • @MmTna-q3c
    @MmTna-q3c 4 วันที่ผ่านมา

    ดูทำความเข้าใจ มาลองTest 😂

  • @BBConfig
    @BBConfig 23 วันที่ผ่านมา

    - Video ตอนที่แล้วของผมเรื่อง Consistent Hashing - th-cam.com/video/sZrRXAA8JHg/w-d-xo.html - Code haproxy ส่วนที่ผมคิดว่ามันนำ weight มาคำนวณ virtual node : github.com/haproxy/haproxy/blob/7868dc9c45aeb29774baac98711f563755b610d6/src/lb_chash.c#L550

  • @ChatchavitNitipongpun
    @ChatchavitNitipongpun หลายเดือนก่อน

    วะ วะ วะ ไวววววว สุดยอดครับ คลิปเร็ว งานคุณภาพ 😀

    • @BBConfig
      @BBConfig หลายเดือนก่อน

      😊ขอบคุณคร้าบผม

  • @dream07312
    @dream07312 หลายเดือนก่อน

    Nice video krub, i want to know about alternative of "consistency hashing" please leave keyword again?

    • @BBConfig
      @BBConfig หลายเดือนก่อน

      Thanks very much krub. The alternative is Rendezvous Hashing which is stateless, doesn't need all the complication of virtual node - blog.techlanika.com/rendezvous-hashing-dad794931065

  • @BBConfig
    @BBConfig หลายเดือนก่อน

    1:56 - เป้าหมายหลักของ Consistent Hashing 5:37 - Evenly distributed load - ใช้โปรแกรมเล็กๆทดสอบการกระจายของ load 7:47 - Partitioning scheme ง่ายด้วยการใช้ modulo 15:14 - Minimal rebalancing 21:22 - Partitioning ด้วยวิธีของ Consistent Hashing 27:01 - Implement Consistent Hashing อย่างง่ายๆ เพื่อความง่าย ผมไม่ได้ check ว่า hash ของแต่ละ replica ซ้ำกันหรือเปล่านะครับ ถ้า imeplment ของจริงต้อง check นะครับ 34:25 - Virtual node

  • @BBConfig
    @BBConfig หลายเดือนก่อน

    ตอนแก่า Java HashMap ทำงานอย่างไร - th-cam.com/video/JTqruk936qM/w-d-xo.html

  • @SurfKider
    @SurfKider หลายเดือนก่อน

    ดีมากๆเลยครับ ขอบคุณครับ

    • @BBConfig
      @BBConfig หลายเดือนก่อน

      ขอบคุณคร้บผม ดีใจมีคนชอบเรื่องนี้ครับ

  • @BBConfig
    @BBConfig หลายเดือนก่อน

    Art work ในวิดีโอ จาก instagram.com/gulin.watercolor/?hl=en ครับ

  • @dream07312
    @dream07312 หลายเดือนก่อน

    Thx a lot nice video krub, i have a question, How do we know if the bloomfilter space initially set is no longer enough?

    • @BBConfig
      @BBConfig หลายเดือนก่อน

      Thanks very much krub. Most of the time, bloom-filter is used in system that can (more or less) control the expect entries of data krub. In use case of my project, we limit maximum data entries in a chunk of data (1 chunk for one bloom instance). So we let library calculate the size of bloom e.g newBloom(maxNumEntries, false-positive-rate) . So we don't really monitor if false-positive rate is increase or not, we just control the max-entries inserted to the bloom instead.

    • @dream07312
      @dream07312 หลายเดือนก่อน

      @@BBConfig Thank for your answer krub 🙏

  • @BBConfig
    @BBConfig 2 หลายเดือนก่อน

    ข้อมูลเพิ่มเติมที่ผมเพิ่งเห็น ตัว doc เองก็พูดถึงเคสที่ ReadWriteLock อาจจะไม่ช่วยให้ performance ดีขึ้น " if the read operations are too short the overhead of the read-write lock implementation (which is inherently more complex than a mutual exclusion lock) can dominate the execution cost" docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReadWriteLock.html วิดีโอต้นเรื่องที่ผมไปเจอที่อ้างว่า ReadWriteLock นั้น overhead สูง th-cam.com/video/p4TqsdcJzAg/w-d-xo.html

  • @BBConfig
    @BBConfig 2 หลายเดือนก่อน

    "Confluent Cloud Is Now 100% KRaft and You Should Be Too" - www.confluent.io/blog/zookeeper-to-kraft-with-confluent-kubernetes/

  • @BBConfig
    @BBConfig 2 หลายเดือนก่อน

    Data ที่ผมใช้มากจาก Kaggle : Goodreads Book Reviews Data Set - www.kaggle.com/datasets/pypiahmad/goodreads-book-reviews1?select=goodreads_books.json

  • @Chetclocknarokmeejing
    @Chetclocknarokmeejing 2 หลายเดือนก่อน

    รู้สึกไม่เสียดายเวลาเลยครับที่เข้ามาดูคลิปนี้

    • @BBConfig
      @BBConfig 2 หลายเดือนก่อน

      ขอบคุณมากๆครับที่เข้ามารับชมรับฟัง

  • @realpaoz
    @realpaoz 2 หลายเดือนก่อน

    พี่จบตรงสายหรือเป็น self-taught ครับ

    • @BBConfig
      @BBConfig 2 หลายเดือนก่อน

      ผมจบสายตรง software engineer ครับ แต่ 90% ที่ใช้ในงานคือ self-taught ครับ เพราะสายนี้มันเปลี่ยนแปลงเร็วมาก

  • @justwannado666
    @justwannado666 2 หลายเดือนก่อน

    คลิปมีประโยชน์มากครับ ผมเรียนเขียนโค้ดได้1ปี คลิปนี้ช่วยให้เห็นจุดที่ควรพัฒนาตัวเองต่อไปเลยครับ

    • @BBConfig
      @BBConfig 2 หลายเดือนก่อน

      ขอบคุณคร้าบ สู้ๆครับผม ความชำนาญมาจากการฝึกฝน เป็นกำลังใจให้คร้าบ

  • @dream07312
    @dream07312 2 หลายเดือนก่อน

    Thankyou for your content, It's cool 🙏

    • @BBConfig
      @BBConfig 2 หลายเดือนก่อน

      ขอบคุณคร้าบผม 🙂

  • @ta3113ta
    @ta3113ta 2 หลายเดือนก่อน

    ความรู้ใหม่เลยครับ

    • @BBConfig
      @BBConfig 2 หลายเดือนก่อน

      ขอบคุณสำหรับคอมเมนต์คร้าบผม ดีใจมีผู้รับชมรับฟังครับ

  • @BBConfig
    @BBConfig 2 หลายเดือนก่อน

    0:37 requestor กับการขอข้อมูลจาก server สำรอง 4:37 โปรแกรมง่ายๆเพิ่อใช้ในการทดสอบปัญหา 12:30 ใช้ iptables เพื่อ drop packet ขาออกจาก server 16:52 tcp retransmit 23:00 ปรับค่า tcp_retries2

  • @BBConfig
    @BBConfig 3 หลายเดือนก่อน

    Timeline 1:13 เริ่มเขียน feed / client แบบ step-by-step เพื่อแสดงให้เห็นการทำงานที่ต้องการ 9:52 Client พิเศษที่เป็นจุดเริ่มให้มีการใช้ lock สองตัว 16:46 สิ่งที่ทำให้เกิด deadlock 18:28. jstack and thread dump 24:36. อธิบายอีกครั้งให้ละเอียดขึ้น 34:12 CountdownLatch

  • @BBConfig
    @BBConfig 3 หลายเดือนก่อน

    ขอแก้ความคลาดเคลื่อนนาทีที่ 8:53 เวลาหา node ที่ต้องการ โค้ดจะหา key ที่ตรงกันนะครับ ในคลิปผมพูดผิดว่าหา value ที่ตรงกัน

  • @Mrfloridec
    @Mrfloridec ปีที่แล้ว

    Hey. Do you like this tour?

  • @xintu8123
    @xintu8123 ปีที่แล้ว

    You seemed so relaxed lol 😆

  • @jamesfagan7823
    @jamesfagan7823 ปีที่แล้ว

    It's always raining when I am in Cork

    • @BBConfig
      @BBConfig ปีที่แล้ว

      I was lucky that the next two days were sunny so I could walk around the city. I also went to Killarney and had a very nice time there.

  • @adampannwitz4432
    @adampannwitz4432 ปีที่แล้ว

    Nice work!

    • @BBConfig
      @BBConfig ปีที่แล้ว

      Thanks a lot 😊