摘要:一般在存當前含有當前時間的實體時,只需要配置好數據庫的存儲字段即可。基本代碼部分循環的寫法
這幾天初步了解了百度云的后臺架構部分,當然了,自己了解的僅限于后臺java相關的部分,先說一下客戶端這邊使用的技術:
1、spring boot : 與前端進行直接交互的服務是用spring來實現的(后臺服務還需要調用其他的基礎服務,如redis 數據庫服務 訂單服務 cdn服務 openstack服務等)
2、jackson : 從代碼層面看,后臺的數據處理以及數據格式化基本上是使用jackson來實現的,服務之間的交互使用http協議,數據格式基本上使用json格式。
3、swagger : 代碼中也涉及到了部分的第三方控件如 swagger、StopWatch等
從代碼中可以看出,并沒有十分復雜的技術,復雜的只是其中涉及到的業務,且業務之間的耦合基本上都是以服務接口的形式呈現的,所以完全可以通過代碼去熟悉業務。(注:本文僅限于本人的代碼學習,吻合公司的代碼風格,了解一些編碼技巧)
所以下面是從代碼層面去介紹項目中用到的一些小技巧
小小知識點:
spring部分
1、controller層 接受請求使用@RestController,由于后臺服務只提供數據接口給前臺,也就不需要視圖解析以及跳轉
2、@Value標簽常用于獲取環境變量,“:”后面的為默認值
@Value("${userlog.isAsync:false}")
log部分
log部分分為兩個部分:
1、使用了大家常用的log4j組件如下
static Logger log = LoggerFactory.getLogger(ClassDemo.class); log.debug("debug info .", e);
2、通過spring AOP的切面編程實現各個模塊的日志記錄
通過注解@Aspect來表明這個類是個切面
@Aspect @Component //和sping整合的時候必須要這個注解,否則sping容器解析不到該切面導致切面不能工作 public class UserLogAspect { @Pointcut("execution(* com.baidu.bce..*(..)) " @Around("userLogMethodPointcut()") public Object userLogInterceptor(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { //通過proceedingJoinPoint對象獲取Signature對象,該對象封裝了連接點的信息。比如通過getDeclaringType獲取連接點所在類的 class對象 } } //@Before是在所攔截方法執行之前執行一段邏輯 //@After 是在所攔截方法執行之后執行一段邏輯 //@Around是可以同時在所攔截方法的前后執行一段邏輯
集合、字符、數組處理部分
集合主要使用了org.apache.commons.collections 包中的CollectionUtils類來對集合進行操作
CollectionUtils.isEmpty(objectDemo) //判斷集合是否為空
工具類
StopWatch是org.springframework.util包中的一個簡單工具類,當我們需要紀錄一部分代碼中執行時間的時候,往往需要在任務前后的兩個時間點去獲取當前時間,并作減法,往往不夠優雅,這時候StopWatch就派上用場了,如下:
StopWatch first = new StopWatch("unitid"); //實例話一個StopWatch對象 first.start("A"); //紀錄時間開始 execute...... //你的執行代碼 first.stop(); //執行結束 first.start("B"); execute...... first.stop(); log.debug(first.prettyPrint()); //打印執行結果
jackson部分
1、@JsonProperty 此注解用于屬性上,作用是把該屬性的名稱序列化為另外一個名稱,如把trueName屬性序列化為name,@JsonProperty(value="name")。
@JsonProperty(value = "real_name") private String realName; new ObjectMapper().writeValueAsString(student) //序列化 結果 {"real_name":""} String jsonStr = "{"real_name":"zhangsan"}"; Student student = new ObjectMapper().readValue(jsonStr.getBytes(), Student.class); //反序列化 結果 Student{realName="zhangsan"}
2、@JsonPropertyOrder
作用在類上,被用來指明當序列化時需要對屬性做排序,它有2個屬性一個是alphabetic:布爾類型,表示是否采用字母拼音順序排序,默認是為false,即不排序
3、@JsonInclude
@JsonInclude(value=Include.NON_NULL) 是用在實體類的方法類的頭上 作用是實體類的參數查詢到的為null的不顯示,比如說你想傳一些json數據到前臺,但是不想傳值為null的數據,就可以使用該標簽
4、@JsonIgnoreProperties
可以注明是想要忽略的屬性列表如@JsonIgnoreProperties({"name","age","title"}),也可以注明過濾掉未知的屬性如@JsonIgnoreProperties(ignoreUnknown=true)
5、@JsonUnwrapped
當實體類中成員屬性是一個類的對象時候,忽略包裝。。
public class User { private String name; private String password; @JsonIgnore private Liststrs ; @JsonUnwrapped private Person p; //setter,getter省略 } public class Person { private String pName; private int age; private boolean sex; @JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss") private Date birthday; private String word; private double salary; //setter,getter省略 } public void testJsonUnWrapped() throws IOException{ User u = new User("guofeipeng","123"); List ls = new ArrayList (); ls.add("123"); ls.add("234"); ls.add("345"); u.setStrs(ls); Person person = new Person("nomouse", 25, true, new Date(),"程序員",2500.0); u.setP(person); ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(u); //java 2 json System.out.println(json); User user = mapper.readValue(json, User.class);//json 2 java System.out.println(user); }
注:
1.User類中Person屬性不加@JsonUnwarpped,轉化后的json為:{"name":"guofeipeng","password":"123","p":{"age":25,"sex":true,"birthday":"2014-12-22 07-15-29","word":"程序員","pname":"nomouse","salary":"2500.00"}}
2.加了@JsonUnwarpped注解,則去掉了p的鍵(包裝),轉化后的json為{"name":"guofeipeng","password":"123","age":25,"sex":true,"birthday":"2014-12-22 07-16-38","word":"程序員","pname":"nomouse","salary":"2500.00"}
轉自 http://blog.csdn.net/mooner_g...
6、@JsonFormat
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = BceConstant.DATETIME_FORMAT, timezone = "UTC")
通常日期格式都是以時間戳的形式存放在數據庫里,當前端頁面通過接口查詢時,我們會將一個對象的某些屬性查出來返回給頁面。一般在存當前含有當前時間的實體時,只需要配置好數據庫的存儲字段即可。
基本代碼部分
for循環的寫法
for(Object obj: List
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70603.html
摘要:好不容易在月號這天中午點左右接到了來自阿里的面試電話。這里會不斷收集和更新基礎相關的面試題,目前已收集題。面試重難點的和的打包過程多線程機制機制系統啟動過程,啟動過程等等掃清面試障礙最新面試經驗分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發面試題總結 各大公司 Jav...
閱讀 2289·2021-11-24 09:38
閱讀 1986·2021-11-22 14:44
閱讀 1150·2021-07-29 13:48
閱讀 2615·2019-08-29 13:20
閱讀 1115·2019-08-29 11:08
閱讀 2046·2019-08-26 10:58
閱讀 1264·2019-08-26 10:55
閱讀 3148·2019-08-26 10:39