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

来源:https://www.cnblogs.com/Java3y/archive/2018/08/30/9562501.html
-Advertisement-
Play Games

前言 只有光頭才能變強 2018年8月30日,今天我辭職了。在6月25號入職,到現在也有兩個月時間了。 感受: 第一天是期待的:第一次將項目拉到本地上看的時候,代碼很多,有非常多的模塊,模塊下又有 ,眼花繚亂的。再連上測試庫,也發現有100多張表。~~順著一些模塊看下去,發現用的技術不難,之前基本都 ...


前言

只有光頭才能變強

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

感受:

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

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

另外值得一說的是:別以為我寫了那麼多博客的就很厲害,很牛逼,其實我渣得一批!校招的演算法筆試題基本沒有ac的,在面試的時候,知識點說忘就忘。我寫博客主要是記錄一下自己的成長,遺忘的技術可以翻看,跟大家一起交流交流,共同進步~

朋友吐槽我寫的文章像是小學生作文,我也不擅長著感想之類的.....所以,將就點看吧..~

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

一、實習時學到的新技術

1.1swagger文檔框架

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

去查了一下,原來是介面的文檔框架

想要更加深入瞭解:

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.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包:https://img.mukewang.com/down/5799a5440001040300000000.rar

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

使用zxing生成二維碼的博客:http://guopengli.cn/index.php/2017/10/05/53.html

參考資料:

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

有的時候我們在上傳圖片時,不希望展示的圖片大小和上傳的圖片大小相同時,我們就需要把圖片進行壓縮生一定的像素。縮略圖例子:

圖片水印也經常會看到:

無論是水印還是縮略圖,其實就是通過類庫來實現的,一般我們會使用JAVA圖像處理庫Thumbnailator

參考資料:

最後

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

如果想看更多的原創技術文章,歡迎大家關註我的微信公眾號:Java3y。Java技術群討論:742919422。公眾號還有海量的視頻資源哦,關註即可免費領取。

可能感興趣的鏈接:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目:平安果 題目介紹:給出一個m*n的格子,每個格子里有一定數量的平安果,現在要求從左上角頂點(1,1)出發,每次走一格並拿走那一格的所有平安果,且只能向下或向右前進,最終到達右下角頂點(m,n),要求求出能拿走的平安果的最大數值。 輸入:第一行有兩個數值m,n,然後是m行n列數值。 輸出:一個數 ...
  • 最近在重構後端代碼,很多同學對Spring體系下的後端組件如Controller、Service、Repository、Component等認識不夠清晰,導致代碼里常常會出現Controller里直接使用RestTemplate、直接訪問資料庫的情況。下麵談談我對這些組件功能邊界的認識,一家之言,歡 ...
  • 剛開始學習SpringBoot,記錄一下舊項目整合到SpringBoot時遇到的問題(後續踩的坑也會持續加入) PS:通過查看他人博客自己東拼西湊出來的,不一定完全正確,請謹慎對待 1:打包為jar或war後發現jsp文件無法訪問或404等: 可能原因1:controller控制類不在啟動類所在的目 ...
  • 寫代碼: 1,明確需求。我要做什麼? 2,分析思路。我要怎麼做?1,2,3。 3,確定步驟。每一個思路部分用到哪些語句,方法,和對象。 4,代碼實現。用具體的java語言代碼把思路體現出來。 學習新技術的四點: 1,該技術是什麼? 2,該技術有什麼特點(使用註意): 3,該技術怎麼使用。demo 4 ...
  • 題目 約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共用給其他農場。為了用最小的消費,他想鋪設最短的光纖去連接所有的農場。 你將得到一份各農場之間連接費用的列表,你必須找出能連接所有農場並所用光纖最短的方案。每兩個農場間的距離不會超過100000。 輸入 第一行: 農場的個數,N(3<= ...
  • 問題背景: 我要在一個表單里同時一次性提交多名乘客的個人信息到SpringMVC,前端HTML和SpringMVC Controller里該如何處理? 第1種方法:表單提交,以欄位數組接收; 第2種方法:表單提交,以BeanListModel接收; 第3種方法:將Json對象序列化成Json字元串提 ...
  • 一、TCP: TCP是Transmission Control Protocol的簡稱,中文名傳輸控制協議。是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議。TCP通信需要經過創建連接、數據傳輸、終止連接三個步驟。通信開始前,一定要先建立相關的鏈接,才能發送數據。完成數據交換後,雙方必須斷開鏈接 ...
  • 對於後臺管理系統來說,要做好許可權管理離不開菜單項和頁面按鈕控制項功能的管理。由於程式沒法智能的知道有什麼菜單和控制項,哪些人擁有哪些操作許可權,所以首先要做的是菜單管理功能,將需要管理的菜單項和各個功能項添加(註冊)到菜單管理表中,方便後續許可權控制管理。 要開發一個菜單管理功能,離不開這些功能:菜單列表展 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...