兩個月的Java實習結束,繼續努力

前言

只有光頭才能變強php

2018年8月30日,今天我辭職了。在6月25號入職,到如今也有兩個月時間了。html

感覺:前端

  • 第一天是期待的:第一次將項目拉到本地上看的時候,代碼不少,有很是多的模塊,模塊下又有dao/service/controller/form/bean,眼花繚亂的。再連上測試庫,也發現有100多張表。~~順着一些模塊看下去,發現用的技術不難,以前基本都有接觸過,都是能夠看得懂的。
  • 第一個星期是焦慮的:次日給我發下了一個文檔,文檔裏邊有幾個小任務(1、編寫接口將數據導出到Excel,2、改進一個功能)。
    • 第二個功能的SQL語句寫了很長的時間都沒寫出來,沒寫出來緣由有兩個:個人SQL能力弱和業務表之間的關係還沒熟悉(如今想起來,算是我這兩個月裏寫過最麻煩的SQL了)。花了將近兩個星期完成了功能,期間我編寫SQL的能力也算是有所提高了。
  • 大多時候是閒的:不少時候接到的任務都是基於原有的基礎上添加一些功能,改Bug之類的,也作太小的模塊開發。整體來看:技術難度不大,主要是對業務的理解

這兩個月過得很開心,好吃好住,就是長胖了jquery

另外值得一說的是:別覺得我寫了那麼多博客的就很厲害,很牛逼,其實我渣得一批!校招的算法筆試題基本沒有ac的,在面試的時候,知識點說忘就忘。我寫博客主要是記錄一下本身的成長,遺忘的技術能夠翻看,跟你們一塊兒交流交流,共同進步~git

朋友吐槽我寫的文章像是小學生做文,我也不擅長着感想之類的.....因此,將就點看吧..~github

下面主要記錄了在實習中遇到的新技術,還有一些以前寫過的筆記也放上來了。面試

1、實習時學到的新技術

1.1swagger文檔框架

在看公司代碼的時候,發現Controller有幾個我不知道的註解:@Api@ApiOperation..算法

去查了一下,原來是接口的文檔框架sql

想要更加深刻了解:數據庫

1.2Lombok讓Java代碼更簡潔

看到JavaBean的時候,也發現了新大陸:註解@Data

在JavaBean中沒有任何的set/get方法,但在外面卻可使用set/get方法,非常神奇..

去找了一下資料,原來這玩意叫作:Lombok

  • 簡單來講:經過註解消除樣板代碼(今後set/get就沒有了),JavaBean會十分簡潔

要注意的是:在IDE上須要安裝插件(IDEA若是沒安裝lombok插件,編譯會錯誤,一大堆的紅色!)

Lombok使用和介紹:

1.3postman使用

公司先後端分離,後端返回json數據給前端解析。我拿到的代碼是徹底沒有前端頁面的,老大讓我裝個postman來調試。

因爲以前都是我的開發,想怎麼玩就怎麼玩(因此就沒用過postman..)。

找到了一篇很好的postman教程(若是沒用過的同窗,看完應該能夠快速上手!):

1.4JSON Web Token(認證受權)

JSON Web Token(JWT)是什麼?

WT做爲一個開放的標準(RFC 7519), 定義了一種簡潔自包含的方法用於通訊雙方之間以Json對象的形式安全的傳遞信息。 由於特定的數字簽名,因此這些通訊的信息可以被校驗和信任。 JWT可使用HMAC算法或者RSA的公鑰私鑰對進行簽名。

何時應該使用JSON Web Tokens?

  • 認證鑑權(Authentication)
  • 數據交換(Information Exchange)

貌似我司很簡單用了一下JWT,用於認證鑑權,我簡單總結了一下流程

  1. 按照正常的方式登陸
  2. 將用戶信息拼接成參數
  3. 用這個參數生成jwt對應的token值。
  4. 這個token值保存對應的權限,有效期,加密方式
  5. token返回到瀏覽器中,使用Session Storage存儲起來
  6. 再次訪問的時候,將這個token值帶過去(能夠經過header的方式,也能夠post/url拼接的方式)。問了一下前端小哥,他們用的是Angular,封裝了一下,每次請求都將其寫在header上。
  7. 若是這個token沒過時,解析這個Token值,返回對應的User對象(標識)
  8. 若是這個token過時了,從新讓用戶登陸

瞭解更多查看文檔(中文):

相關博文與討論:

1.5SQL編寫思路

以前本身寫的sql都挺簡單的,無非就是鏈接兩張表查詢出對應的數據。

到了需求的時候就不一樣了,複雜不少(以致於我寫了一個星期還沒寫出來....)

需求的任務簡單歸納:要對每一個字段的數據進行統計,又要顯示每一個字段下具體的內容

  • 說白了,就是將多行的數據拼接起來,弄成一行~

最終思路:

  • 使用concat函數將其對應的字段拼接起來
  • 隨後再對字段進行分組,使用group_concat函數再將上述的拼接起來
  • 最終拿到拼接到一行的結果,放到程序中解析

反正sql這玩意得多寫...(虐了我一個星期,本來都認爲這功能是沒法實現的了..)

在完成需求的時候也想過不少種辦法來解決,找思路,從中也找到了一些比較好的關於sql的博文:

非相關子查詢:

相關子查詢:

沒有什麼是select解決不了的,若是有,那就再套一層---《3y》

tips : 在連表查詢的時候,思考一下是否是一開始就須要連表得出結果(可能有的時候:某個查詢條件必要時,纔要連表)

1.6數據庫外鍵

在公司中,看數據庫表的設計是不用外鍵的。

在初學數據庫的時候,常常用到了外鍵約束。在論壇中查看討論的時候,通常人都說不多用外鍵。由於咱們徹底能夠在業務(程序控制和事務)上處理表之間關係。通常互聯網應用不必使用外鍵,外鍵會帶來一系列很差的影響:

  • 1.數據庫須要維護外鍵的內部管理;
  • 2.外鍵等於把數據的一致性事務實現,所有交給數據庫服務器完成;
  • 3.有了外鍵,當作一些涉及外鍵字段的增,刪,更新操做以後,須要觸發相關操做去檢查,而不得不消耗資源;
  • 4.外鍵還會由於須要請求對其餘表內部加鎖而容易出現死鎖狀況;

參考資料:

2、以前的一些筆記

2.1Timer和Quartz的區別

Timer和Quartz都是任務調度框架,簡單來講就是:程序可以在某時某刻上執行你想要執行的代碼

以前在項目中簡單用到了Quartz,在初學的時候也接觸過一下Timer的API調用。以前簡單記錄過他倆的區別,如今回頭整理一下吧~

  • 1.出身不一樣:Timer由jdk直接提供,調用方式簡單粗暴,不須要其它jar包支持。Quartz並不是jdk自帶,須要引入相應的jar包
  • 2.能力區別:主要體如今對時間的控制上。某個具體時間執行具什麼任務的話Timer能夠輕鬆搞定,而好比每一個星期天早上八點提醒作某事的功能就須要Quartz,所以Quartz對時間的控制遠比Timer強大,完善
  • 3.異常處理不一樣Quartz的某次執行任務過程當中拋出異常,不影響下一次任務的執行,當下一次執行時間到來時,定時器會再次執行任務;而TimerTask則不一樣,一旦某個任務在執行過程當中拋出異常,則整個定時器生命週期就結束,之後永遠不會再執行定時器任務
  • 4.對併發支持不一樣:Timer走後臺線程執行定時任務(單線程),Quartz可以使用多個執行線程去執行定時任務
  • 5.Quartz每次執行任務都建立一個新的任務類對象,而TimerTask則每次使用同一個任務類對象

參考資料:

Quartz Demo源碼:

2.2Java生成二維碼

咱們如今已經離不開二維碼了。

二維碼是由一維碼發展而來的,最典型的一維碼就是咱們平時去商場中看到商品包裝的條形碼,這就是典型的一維碼。

而二維碼的數據存儲量信息又比一維碼大得多,而且有很好的糾正的功能(即便二維碼中有部分的信息不完整,仍是可以解析獲得二維碼的數據)

使用Java語言生成二維碼有如下的方式:

  • zxing API
  • qrcode
  • juqeryqrcode

固然了,確定是jquery的方式來生成二維碼是比較簡單的。可是若是想定製二維碼的樣式、形狀的話。那麼使用Java的方式來生成是比較靈活的。(好比:在二維碼中間放上logo)

下載生成二維碼的資源jar包:img.mukewang.com/down/5799a5…

使用Jquery的方式生成二維碼的博文:suflow.iteye.com/blog/168739…

使用zxing生成二維碼的博客:guopengli.cn/index.php/2…

參考資料:

2.3Java實現圖片水印、縮略圖

有的時候咱們在上傳圖片時,不但願展現的圖片大小和上傳的圖片大小相同時,咱們就須要把圖片進行壓縮生必定的像素。縮略圖例子:

圖片水印也常常會看到:

不管是水印仍是縮略圖,其實就是經過類庫來實現的,通常咱們會使用JAVA圖像處理庫Thumbnailator

參考資料:

最後

能看到我博客的人,說明是有看技術文章的習慣的。有看技術文章的習慣,說明都是愛技術/學習的人。愛技術/學習的人,技術通常不會差。因此能看到這篇文章的同窗都是大佬----《3y》

若是想看更多的原創技術文章,歡迎你們關注個人微信公衆號:Java3y。公衆號還有海量的視頻資源哦,關注便可免費領取。

可能感興趣的連接:

相關文章
相關標籤/搜索