標簽 ‘ JAVA

(譯文)Java中使用var聲明局部變量指南

原文鏈接:Style Guidelines for Local Variable Type Inference in Java
Stuart W.Marks
2018-03-22

簡介

Java SE 10引入了局部變量的類型推斷。早先,所有的局部變量聲明都要在左側聲明明確類型。 使用類型推斷,一些顯式類型可以替換為具有初始化值的局部變量保留類型var,這種作為局部變量類型 的var類型,是從初始化值的類型中推斷出來的。

閱讀全文

JEP 286: 局部變量類型推斷(JEP 286: Local-Variable Type Inference)

JEP 286: 局部變量類型推斷

    Author	Brian Goetz
    Owner	Dan Smith
    Type	Feature
    Scope	SE
    Status	Closed?/?Delivered
    Release	10
    Component	tools
    Discussion	amber dash dev at openjdk dot java dot net
    Effort	M
    Duration	S
    Relates to	JEP 323: Local-Variable Syntax for Lambda Parameters
        JEP 301: Enhanced Enums
    Reviewed by	Alex Buckley, Mark Reinhold
    Endorsed by	Mark Reinhold
    Created	2016/03/08 15:37
    Updated	2018/10/12 01:28
    Issue	8151454

摘要

增強Java語言以使用初始化值將類型推斷擴展為聲明局部變量。

閱讀全文

為自己搭建一個分布式 IM(即時通訊) 系統

前言

大家新年快樂!

新的一年第一篇技術文章希望開個好頭,所以元旦三天我也沒怎么閑著,希望給大家帶來一篇比較感興趣的干貨內容。

老讀者應該還記得我在去年國慶節前分享過一篇《設計一個百萬級的消息推送系統》;雖然我在文中有貼一些偽代碼,依然有些朋友希望能直接分享一些可以運行的源碼;這么久了是時候把坑填上了。

閱讀全文

如何成為一位「不那么差」的程序員

前言

已經記不清有多少讀者問過:

博主,你是怎么學習的?像我這樣的情況有啥好的建議嘛?

也不知道啥時候我居然成人生導師了。當然我不排斥這些問題,和大家交流都是學習的過程。

因此也許諾會準備一篇關于學習方面的文章;所以本文其實準備了很久,篇幅較長,大家耐心看完希望能有收獲。

以下內容僅代表我從業以來所積累的相關經驗,我會從硬技能、軟實力這些方面盡量闡述我所認為的?“不那么差的程序員”?應當做到哪些技能。

閱讀全文

設計一個百萬級的消息推送系統

前言

首先遲到的祝大家中秋快樂。

最近一周多沒有更新了。其實我一直想憋一個大招,分享一些大家感興趣的干貨。

鑒于最近我個人的工作內容,于是利用這三天小長假憋了一個出來(其實是玩了兩天?)。

先簡單說下本次的主題,由于我最近做的是物聯網相關的開發工作,其中就不免會遇到和設備的交互。

最主要的工作就是要有一個系統來支持設備的接入、向設備推送消息;同時還得滿足大量設備接入的需求。

所以本次分享的內容不但可以滿足物聯網領域同時還支持以下場景:

  • 基于?WEB?的聊天系統(點對點、群聊)。
  • WEB?應用中需求服務端推送的場景。
  • 基于 SDK 的消息推送平臺。

閱讀全文

源碼分析Kafka之Producer

Kafka是一款很棒的消息系統,可以看看我之前寫的?后端好書閱讀與推薦來了解一下它的整體設計。今天我們就來深入了解一下它的實現細節(我fork了一份代碼),首先關注Producer這一方。

要使用kafka首先要實例化一個KafkaProducer,需要有brokerIP、序列化器必要Properties以及acks(0、1、n)、compression、retries、batch.size非必要Properties,通過這個簡單的接口可以控制Producer大部分行為,實例化后就可以調用send方法發送消息了。

核心實現是這個方法:

public Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) {
    // intercept the record, which can be potentially modified; this method does not throw exceptions
    ProducerRecord<K, V> interceptedRecord = this.interceptors.onSend(record);//①
    return doSend(interceptedRecord, callback);//②
}

通過不同的模式可以實現發送即忘(忽略返回結果)、同步發送(獲取返回的future對象,回調函數置為null)、異步發送(設置回調函數)三種消息模式。

閱讀全文

如何優雅的使用和理解線程池

前言

平時接觸過多線程開發的童鞋應該都或多或少了解過線程池,之前發布的《阿里巴巴 Java 手冊》里也有一條:

可見線程池的重要性。

簡單來說使用線程池有以下幾個目的:

  • 線程是稀缺資源,不能頻繁的創建。
  • 解耦作用;線程的創建于執行完全分開,方便維護。
  • 應當將其放入一個池子中,可以給其他任務進行復用。

閱讀全文

Netty(二) 從線程模型的角度看 Netty 為什么是高性能的?

前言

在之前的?SpringBoot 整合長連接心跳機制?一文中認識了 Netty。

但其實只是能用,為什么要用 Netty?它有哪些優勢?這些其實都不清楚。

本文就來從歷史源頭說道說道。

閱讀全文

Guava 源碼分析(Cache 原理【二階段】)

前言

在上文「Guava 源碼分析(Cache 原理)」中分析了?Guava Cache?的相關原理。

文末提到了回收機制、移除時間通知等內容,許多朋友也挺感興趣,這次就這兩個內容再來分析分析。

在開始之前先補習下 Java 自帶的兩個特性,Guava 中都有具體的應用。

閱讀全文

一次線上問題排查所引發的思考

前言

之前或多或少分享過一些內存模型、對象創建之類的內容,其實大部分人看完都是懵懵懂懂,也不知道這些的實際意義。

直到有一天你會碰到線上奇奇怪怪的問題,如:

  • 線程執行一個任務遲遲沒有返回,應用假死。
  • 接口響應緩慢,甚至請求超時。
  • CPU 高負載運行。

這類問題并不像一個空指針、數組越界這樣明顯好查,這時就需要剛才提到的內存模型、對象創建、線程等相關知識結合在一起來排查問題了。

正好這次借助之前的一次生產問題來聊聊如何排查和解決問題。

閱讀全文

我的阿里面試之路

前言

最近有些朋友在面試阿里,加上?Java-Interview?項目的原因也有小伙伴和我討論,近期也在負責部門的招牌,這讓我想起年初那段長達三個月的奇葩面試經歷?。

本來沒想拿出來說的,畢竟最后也沒成。但由于那幾個月的經歷讓我了解到了大廠的工作方式、對候選同學的考察重點以及面試官的套路等都有了全新的認識。

當然最重要的是這段時間的查漏補缺也讓自己精進不少。

閱讀全文

Java NIO AsynchronousFileChannel

原文鏈接?, 原文作者:Jakob Jenkov, ?翻譯:Neil Hao

在Java 7,AsynchronousFileChannel?被添加到了Java NIO中。使用AsynchronousFileChannel可以實現異步地讀取和寫入文件數據。
閱讀全文

并發編程之——讀鎖源碼分析(解釋關于鎖降級的爭議)

1. 前言

在前面的文章?并發編程之——寫鎖源碼分析中,我們分析了 1.8 JUC 中讀寫鎖中的寫鎖的獲取和釋放過程,今天來分析一下讀鎖的獲取和釋放過程,讀鎖相比較寫鎖要稍微復雜一點,其中還有一點有爭議的地方——鎖降級。

今天就來解開迷霧。

閱讀全文

深入理解線程通信

前言

開發中不免會遇到需要所有子線程執行完畢通知主線程處理某些邏輯的場景?;蛘呤蔷€程 A 在執行到某個條件通知線程 B 執行某個操作。這些場景可以通過以下幾種方式實現:

閱讀全文

使用JetCache的異步API訪問Redis緩存

摘要:
本文介紹了JetCache的異步API,通過異步方式訪問緩存可以提升性能,降低RT。
JetCache的異步API和同步API是完全兼容的,甚至用同步的開發方式也能獲得一部分異步帶來的好處。

閱讀全文