Categories
程式開發

速度(Velocity)不背這個鍋

本文首發於【林子的空間“】

01. 那些對速度的誤解

誤解1 – 點數跟天數對應?

用戶故事的估點跟天數對應,1個點的故事對應2天的工作量;統計每個用戶故事所耗費的天數,如果點數對應的天數到了,先標記為“開發完成”,第二天Desk check就不用增加天數了;為了趕進度,由結對改為不結對,原來結對的兩人並行做不同的task,天數還是按照結對的情況來統計…

Categories
程式開發

java安全編碼指南之:ThreadPool的使用

簡介

在java中,除了單個使用Thread之外,我們還會使用到ThreadPool來構建線程池,那麼在使用線程池的過程中需要注意哪些事情呢?

一起來看看吧。

java自帶的線程池

java提供了一個非常好用的工具類Executors,通過Executors我們可以非常方便的創建出一系列的線程池:

Executors.newCachedThreadPool,根據需要可以創建新線程的線程池。線程池中曾經創建的線程,在完成某個任務後也許會被用來完成另外一項任務。

Executors.newFixedThreadPool(int nThreads) ,創建一個可重用固定線程數的線程池。這個線程池裡最多包含nThread個線程。

Executors.newSingleThreadExecutor() …

Categories
程式開發

據說99.99%的人都會答錯的類加載的問題

概述

首先還是把問題拋給大家,這個問題也是我廠同學在做一個性能分析產品的時候碰到的一個問題。

同一個類加載器對像是否可以加載同一個類文件多次並且得到多個Class對象而都可以被java層使用嗎

請仔細注意上面的描述裡幾個關鍵的詞

同一個類加載器:意味著不是每次都new一個類加載器對象,我知道有些對類加載器有點理解的同學肯定會想到這點。我們這裡強調的是同一個類加載器對象去加載。同一個類文件:意味著類文件裡的信息都一致,不存在修改的情況,至少名字不能改。因為有些同學會鑽空子,比如說拿到類文件然後修改名字啥的,哈哈。多個Class對象:意味著每次創建都是新的Class對象,並不是返回同一個Class對象。都可以被java層使用:意味著Java層能感知到,或許對我公眾號關注挺久的同學看過我的一些文章,知道我這裡說的是什麼,不知道的可以翻翻我前面的文章,這裡賣個關子,不直接告訴你哪篇文章,稍微提示一下和內存GC有關。

那接下來在看下面文章之前,我覺得你可以先思考一個問題,

同一類加載器對像是否可加載同一類文件多次且得到多個不同的Class對象(單選)

A.不知道B.可以C.不可以

雖然有些標題黨的意思,不過我覺得標題裡的99.99%說得應該不誇張,這個比例或許應該更大,不過還是請認真作答,不要隨便選,我知道肯定有人會隨便選的,哈哈。

正常的類加載

Categories
程式開發

Java Reference核心原理分析

帶著問題,看源碼針對性會更強一點、印象會更深刻、並且效果也會更好。所以我先賣個關子,提兩個問題(沒準下次跳槽時就被問到)。

我們可以用ByteBuffer的allocateDirect方法,申請一塊堆外內存創建一個DirectByteBuffer對象,然後利用它去操作堆外內存。這些申請完的堆外內存,我們可以回收嗎?可以的話是通過什麼樣的機制回收的?大家應該都知道WeakHashMap可以用來實現內存相對敏感的本地緩存,為什麼WeakHashMap合適這種業務場景,其內部實現會做什麼特殊處理呢?

GC可到達性與JDK中Reference類型

上面提到的兩個問題,其答案都在JDK的Reference裡面。 JDK早期版本中並沒有Reference相關的類,這導致對像被GC回收後如果想做一些額外的清理工作(比如socket、堆外內存等)是無法實現的,同樣如果想要根據堆內存的實際使用情況決定要不要去清理一些內存敏感的對像也是法實現的。為此JDK1.2中引入的Reference相關的類,即今天要介紹的Reference、SoftReference、WeakReference、PhantomReference,還有與之相關的Cleaner、ReferenceQueue、ReferenceHandler等。與Reference相關核心類基本都在java.lang.ref包下面。其類關係如下:

Java Reference核心原理分析 4

其中,SoftReference代表軟引用對象,垃圾回收器會根據內存需求酌情回收軟引用指向的對象。普通的GC並不會回收軟引用,只有在即將OOM的時候(也就是最後一次Full GC)如果被引用的對像只有SoftReference指向的引用,才會回收。 WeakReference代表弱引用對象,當發生GC時,如果被引用的對像只有WeakReference指向的引用,就會被回收。 PhantomReference代表虛引用對象(也有叫幻象引用的,個人認為還是虛引用更加貼切),其是一種特殊的引用類型,不能通過虛引用獲取到其關聯的對象,但當GC時如果其引用的對象被回收,這個事件程序可以感知,這樣我們可以做相應的處理。最後就是最常見強引用對象,也就是通常我們new出來的對象。在繼續介紹Reference相關類的源碼前,先來簡單的看一下GC如何決定一個對像是否可被回收。其基本思路是從GC Root開始向下搜索,如果對象與GC …

Categories
程式開發

AWS分叉了我的開源項目,但他們連聲感謝也沒說

開源的威脅一直都在。

上週四,Amazon Web Services推出了CloudWatch Synthetics Recorder。這是一款面向Chrome瀏覽器的擴展程序,可以說是直接照搬自開發者Time Nolet為該瀏覽器打造的Headless Recorder項目。

AWS分叉了我的開源項目,但他們連聲感謝也沒說 8

這種作法本身沒有任何問題——畢竟Nolet的軟件遵守Apache License …

Categories
程式開發

websocket 是怎麼連接的

背景

最近項目新增了一個websocket 服務,用nginx 做了一個簡單的端口轉發,然後調用的時候發現報錯:

錯誤:意外的服務器響應:426

搜索引擎走一波,找到幾篇相關文章:

https://nginx.org/en/docs/http/websocket.html

https://www.nginx.com/blog/websocket-nginx”…

Categories
程式開發

無服務器已死?這項技術為什麼變得人人嫌棄

無服務器革命為什麼停滯不前?

雖然許多人認為,無服務器技術是一個新的概念。但是,如果追根溯源,那就是2006 年Zimki PaaS 和Google App Engine 對無服務器框架的探索。

近幾年,一些人預測無服務器計算將迎來蓬勃發展,讓應用無需操作系統就能執行。雖然有人說這種框架將會解決在可擴展性上存在的許多問題,但事實並非如此。因為無服務器模型僅在特定場景下發揮效用,但在被更廣泛採用的道路上依然存在諸多問題。

服務器已死,服務器永存!

Categories
程式開發

基於NLP的智能問答推薦系統

乾貨概覽

通常,客服系統主要有兩種應答模式: 機器人自動應答和人工應答 。當用戶提出問題後,客服系統首先啟動機器人自動應答模式,如果用戶認為機器人推薦的結果不准確,會進一步請求進入人工問答模式,由專門的客服人員跟進答疑。

據相關機構統計,國內客服的市場規模超過千億,然而,目前機器人應答模式使用率並不高,人工客服仍然是企業使用率最高的應答模式,其原因主要包括兩點:一方面,機器人客服系統 實現準確推薦比較困難 :由於自然語言本身是模糊的、問題表述方式多樣、問題與答案的詞彙可能存在差異等原因,導致實現準確推薦比較困難。例如:域名轉出、域名怎麼轉出、域名轉出流程 等問題其實都在諮詢域名轉出操作;又例如,百度雲虛擬主機

Categories
程式開發

代碼像同步,像異步一樣工作

前言.

打從敲下”Hello World!”,咱們算入行了。我開始寫代碼,和用計算器差不多:

  • 輸入:1 + 1
  • 結果:2

代碼一路順著走,不開叉。

生涯第1個波折,是學到條件判斷,像這樣:…

Categories
程式開發

雲原生時代企業如何構建流數據平台| InfoQ 公開課

視頻內容:

流數據在企業中往往扮演著重要的角色,是實時數據分析的基礎。隨著企業對數據質量,對數據分析實時性的重視程度的不斷提高,企業對流數據的存儲需求也越來越高。企業需要更好的服務可用性,更高的數據容災能力,更靈活的擴縮容以及可運維性。那該通過什麼方式去滿足這些訴求?面向未來的業務發展趨勢,我們需要什麼樣的企業流數據平台?

“如何建設更好的流數據平台”是每個大數據企業都避不開的話題,無論你是使用Kafka 還是Pulsar,都需要了解流數據處理的原理,在實踐中都會遇到各種業務場景帶來的問題。所以本次分享也會以Apache Pulsar 為例,講解企業構建流數據平台時,如何通過存儲計算分離架構提供更靈活的擴縮容能力,如何實現海量數據存儲能力和更靈活的數據容災能力以及數據一致性等等。同時也會從多個方面對比Apache Kafka 和Apache Pulsar。

視頻大綱: