Hello,今天給各位童鞋們分享的是Spring MVC,趕緊拿出小本子記下來吧Spring MVC 簡單概述:Model1:早期 Java Web 的開發中,統一把顯示層、控制層、資料層的操作全部交給 JSP 或者
2021-07-02 03:05:10
Hello,今天給各位童鞋們分享的是Spring MVC,趕緊拿出小本子記下來吧
Spring MVC 簡單概述:
Model1:早期 Java Web 的開發中,統一把顯示層、控制層、資料層的操作全部交給 JSP 或者 JavaBean 來進行處理
JSP 和 Java Bean 之間嚴重耦合,Java 程式碼和 HTML 程式碼也耦合在了一起要求開發者不僅要掌握 Java ,還要有高超的前端水平前端和後端相互依賴,前端需要等待後端完成,後端也依賴前端完成,才能進行有效的測試程式碼難以複用Model2 時代 :學過 Servlet 並做過相關 Demo 的朋友應該瞭解「Java Bean(Model)+ JSP(View,)+Servlet(Controller) 」這種開發模式,這就是早期的 JavaWeb MVC 開發模式。Model:系統涉及的資料,也就是 dao 和 bean。View:展示模型中的資料,只是用來展示。Controller:處理使用者請求都發送給 ,返回資料給 JSP 並展示給使用者。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-WLYBiv8k-1624972406397)(./Java工程.assets/model2.png)]
Model2 模式下還存在很多問題,Model2的抽象和封裝程度還遠遠不夠,使用Model2進行開發時不可避免地會重複造輪子,這就大大降低了程式的可維護性和複用性。於是很多JavaWeb開發相關的 MVC 框架應運而生比如Struts2,但是 Struts2 比較笨重。隨著 Spring 輕量級開發框架的流行,Spring 生態圈出現了 Spring MVC 框架, Spring MVC 是當前最優秀的 MVC 框架。相比於 Struts2 , Spring MVC 使用更加簡單和方便,開發效率更高,並且 Spring MVC 運行速度更快。
MVC 是一種設計模式,Spring MVC 是一款很優秀的 MVC 框架。Spring MVC 可以幫助我們進行更簡潔的Web層的開發,並且它天生與 Spring 框架整合。Spring MVC 下我們一般把後端項目分為 Service層(處理業務)、Dao層(資料庫操作)、Entity層(實體類)、Controller層(控制層,返回資料給前臺頁面)。
流程說明(重要):
客戶端(瀏覽器)傳送請求,直接請求到 DispatcherServlet。DispatcherServlet 根據請求資訊呼叫 HandlerMapping,解析請求對應的 Handler。解析到對應的 Handler(也就是我們平常說的 Controller 控制器)後,開始由 HandlerAdapter 介面卡處理。HandlerAdapter 會根據 Handler來呼叫真正的處理器來處理請求,並處理相應的業務邏輯。處理器處理完業務後,會返回一個 ModelAndView 物件,Model 是返回的資料物件,View 是個邏輯上的 View。ViewResolver 會根據邏輯 View 查詢實際的 View。DispaterServlet 把返回的 Model 傳給 View(檢視渲染)。把 View 返回給請求者(瀏覽器)1、什麼是SpringMVC?
SpringMVC是一種基於 Java 的實現MVC設計模型的請求驅動類型的輕量級Web框架,屬於Spring框架的一個模組。它通過一套註解,讓一個簡單的Java類成為處理請求的控制器,而無須實現任何介面。同時它還支援RESTful程式設計風格的請求。2、什麼是MVC模式?
MVC的全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,是一種軟體設計典範。它是用一種業務邏輯、資料與介面顯示分離的方法來組織程式碼,將眾多的業務邏輯聚集到一個部件裡面,在需要改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯,達到減少編碼的時間。V即View檢視是指使用者看到並與之互動的介面。比如由html元素組成的網頁介面,或者軟體的客戶端介面。MVC的好處之一在於它能為應用程式處理很多不同的檢視。在檢視中其實沒有真正的處理髮生,它只是作為一種輸出資料並允許使用者操縱的方式。M即model模型是指模型表示業務規則。在MVC的三個部件中,模型擁有最多的處理任務。被模型返回的資料是中立的,模型與資料格式無關,這樣一個模型能為多個檢視提供資料,由於應用於模型的程式碼只需寫一次就可以被多個檢視重用,所以減少了程式碼的重複性。C即controller控制器是指控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定呼叫哪個模型構件去處理請求,然後再確定用哪個檢視來顯示返回的資料。3、SpringMVC的執行流程?
使用者點選某個請求路徑,發起一個request請求,此請求會被前端控制器處理。前端控制器請求處理器對映器去查詢Handler。可以依據註解或者XML配置去查詢。處理器對映器根據配置找到相應的Handler(可能包含若干個Interceptor攔截器),返回給前端控制器。前端控制器請求處理器介面卡去執行相應的Handler處理器(常稱為Controller)。處理器介面卡執行Handler處理器。Handler處理器執行完畢之後會返回給處理器介面卡一個ModelAndView物件(SpringMVC底層物件,包括Model資料模型和View檢視資訊)。處理器介面卡接收到Handler處理器返回的ModelAndView後,將其返回給前端控制器。前端控制器接收到ModelAndView後,會請求檢視解析器(ViewResolver)對檢視進行解析。檢視解析器根據View資訊匹配到相應的檢視結果,反饋給前端控制器。前端控制器收到View具體檢視後,進行檢視渲染,將Model中的模型資料填充到View檢視中的request域,生成最終的檢視(View)。前端控制器向用戶返回請求結果。4、SpringMVC有哪些優點?
SpringMVC本身是與Spring框架結合而成的,它同時擁有Spring的優點(例如依賴注入DI和切面程式設計AOP等)。SpringMVC提供強大的約定大於配置的契約式程式設計支援,即提供一種軟體設計方式,減少軟體開發人員做決定的次數,開發人員僅需規定應用中不符合約定的部分。支援靈活的URL到頁面控制器的對映。可以方便地與其他檢視技術(JSP、FreeMarker等)進行整合。由於SpringMVC的模型資料往往是放置在Map資料結構中的,因此其可以很方便地被其他框架引用。擁有十分簡潔的異常處理機制。可以十分靈活地實現資料驗證、格式化和資料繫結機制,可以使用任意物件進行資料繫結操作。支援RestFul風格。5、Spring MVC的主要元件?
前端控制器 DispatcherServlet:
其作用是接收使用者請求,然後給使用者反饋結果。它的作用相當於一個轉發器或中央處理器,控制整個流程的執行,對各個元件進行統一排程,以降低元件之間的耦合性,有利於元件之間的拓展。——處理所有的HTTP請求和響應。
處理器對映器 HandlerMapping:
其作用是根據請求的URL路徑,通過註解或者XML配置,尋找匹配的處理器資訊。
處理器介面卡 HandlerAdapter:
其作用是根據對映器處理器找到的處理器資訊,按照特定規則執行相關的處理器(Handler)。
處理器 Handler:
其作用是執行相關的請求處理邏輯,並返回相應的資料和檢視資訊,將其封裝至ModelAndView物件中。
檢視解析器 ViewResolver:
其作用是進行檢視的解析操作,通過ModelAndView物件中的View資訊將邏輯檢視名解析成真正的檢視View(如通過一個JSP路徑返回一個真正的JSP頁面)。
檢視 View:
View是一個介面,實現類支援不同的View類型(JSP、FreeMarker、Excel等)。
6、SpringMVC和Struts2的區別有哪些?
最大的區別是Struts2相較於SpringMVC更笨重。
SpringMVC的入口是一個Servlet,也就是前端控制器(DispatcherServlet),而Struts2的入口是一個Filter (StrutsPrepareAndExecuteFilter)。SpringMVC是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,可以設計為單例或多例(建議單例)。struts2是基於類開發,請求參數傳遞到類的成員屬性,只能設計為多例。SpringMVC通過參數解析器將request請求內容解析,並給方法形參賦值,將資料和檢視封裝成ModelAndView物件,最後又將ModelAndView中的模型資料通過reques域傳輸到頁面。Jsp檢視解析器預設使用JSTL。Struts2採用值棧儲存請求和響應的資料,通過OGNL存取資料。7、SpringMVC怎麼樣設定重定向和請求轉發?
我們先說說請求轉發與重定向的區別:
請求轉發與重定向的區別:
請求轉發在伺服器端完成的;重定向是在客戶端完成的。請求轉發的速度快;重定向速度慢。請求轉發的是同一次請求;重定向是兩次不同請求。請求轉發不會執行轉發後的程式碼;重定向會執行重定向之後的程式碼。請求轉發位址列沒有變化;重定向位址列有變化。請求轉發必須是在同一臺伺服器下完成;重定向可以在不同的伺服器下完成。SpringMVC設定請求轉發:
在返回值前面加"forward:"。
SpringMVC設定重定向:
在返回值前面加"redirect:"。例如我們在登入的時候,登入失敗會重定向到登入頁面。
8、當一個方法向AJAX返回特殊物件,譬如Object,List等,需要做什麼處理?
在方法上加**@ResponseBody註解**,表示該方法的返回值不管是什麼類型,都會返回JSON格式的資料。
把原來Controller類上的@Controller註解替換為**@RestController註解**。
@RestController = @Controller + @ResponseBody,表明該Controller類所有的方法都返回JSON格式的資料(沒有加@RequestMapping註解的方法除外)。
加入@ResponseBody註解就能返回JSON格式資料的原因是:SpringMVC提供的HttpMessageConverter自動轉為JSON ,
如果使用了Jackson或者Gson,不需要額外配置就可以自動返回JSON了,因為框架幫我們提供了對應的HttpMessageConverter ;
加入Jackson.jar
在配置檔案中配置json的對映
在接受Ajax方法裡面可以直接返回Object、List等,但方法前面要加上@ResponseBody註解。
如果使用了Alibaba的Fastjson的話,則需要自己手動提供一個相應的 HttpMessageConverter的例項。
9、SpringMVC的常用註解:
註解本質是一個繼承了Annotation的特殊介面,其具體實現類是JDK動態代理生成的代理類。
我們通過反射獲取註解時,返回的也是Java運行時生成的動態代理物件。
通過代理物件呼叫自定義註解的方法,會最終呼叫AnnotationInvocationHandler的invoke方法,該方法會從memberValues這個Map中查詢出對應的值,而memberValues的來源是Java常量池。
1、@Controller
@Controller用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller物件。處理器介面卡將會掃描使用了該註解的類的方法,並檢測該方法是否使用了@RequestMapping註解。@Controller 只是定義了一個控制器類,而使用@RequestMapping 註解的方法才是真正處理請求的處理器。
2、@RequsestMapping
@RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。
用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。返回值會通過檢視解析器解析為實際的物理檢視,對於 InternalResourceViewResolver 檢視解析器,通過 prefix + returnValue + suffix 這樣的方式得到實際的物理檢視,然後做轉發操作。
寫在方法上:
@RequestMapping("/req") 表示不區分請求類型。
@RequestMapping(value = "/req",method = RequestMethod.POST) 表示這是一個POST請求。
3、@ResponseBody
@ResponseBody把Java物件轉化為json物件,這種方式用於Ajax非同步請求,返回的不是一個頁面而是JSON格式的資料。
@RequestBody:註解實現接收http請求的json資料,將json轉換為java物件。
4、@Valid
標誌參數被Hibernate-Validator校驗框架校驗。
5、@PathVariable
@PathVariable用於接收uri地址傳過來的參數,Url中可以通過一個或多個{Xxx}佔位符對映,通過@PathVariable可以繫結佔位符參數到方法參數中,在RestFul介面風格中經常使用。
例如:請求URL:http://localhost/user/21/張三/query
(Long類型可以根據需求改變為String或int,SpringMVC會自動做轉換)
6、@RequestParam
@RequestParam用於將請求參數對映到控制器方法的形參上,有如下三個屬性:
7、@ControllerAdvice
@ControllerAdvice標識一個類是全局異常處理類。
8、@ExceptionHandler
@ExceptionHandler標識一個方法為全局異常處理的方法。
補充:前端向Controller傳遞參數的方式:
1、直接把表單的參數寫在Controller相應的方法的形參中
public String addUser(String username,String password) {}
2、通過HttpServletRequest接收
public String addUser(HttpServletRequest request) {
3、通過一個bean來接收
public String addUser(UserModel user) {
4、使用**@ModelAttribute註解**獲取POST請求的FORM表單資料
@RequestMapping(value="/addUser",method=RequestMethod.POST)
public String addUser(@ModelAttribute("user") UserModel user) {
5、用註解@RequestParam繫結請求參數到方法入參
當請求參數username不存在時會有異常發生,可以通過設定屬性required=false解決,
例如: @RequestParam(value=「username」, required=false)
@RequestMapping(value="/addUser",method=RequestMethod.GET)
public String addUser(@RequestParam("username") String username,@RequestParam("password") String password) {
6、用request.getQueryString() 獲取spring MVC get請求的參數,只適用get請求
10、如何解決POST請求中文亂碼問題,GET的又如何處理呢?
JavaWeb亂碼問題一般是客戶端(瀏覽器)與伺服器端字符集不一致產生的,如果兩者字符集一致就不會出現亂碼問題。
解決post請求亂碼:
SpringMVC預設提供一個解決post請求亂碼的過濾器,在web.xml中配置即可
解決get請求亂碼:
修改tomcat配置檔案新增編碼與工程編碼一致。<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
2.對請求參數進行重新編碼,ISO8859-1是tomcat預設編碼,需要將tomcat編碼後的內容按utf-8編碼。
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8");
11、Spring MVC的異常處理?
對於在日常的開發中,遇到的各種可預知、不可預知的異常,在SpringBoot中可以得到解決,可以通過以下3種方式處理:
1、使用@ExceptionHandler註解
前端傳送請求給後端,後端處理時發生異常,可以通過三種方式通知前端:1、返回異常頁面,不包含錯誤資訊;2、返回ModelAndView,返回檢視和異常資訊;3、返回JSON格式資料。
缺點:不能實現全局異常處理;進行異常處理的方法必須與出錯的方法在同一個Controller裡面。
2、實現HandlerExceptionResolver介面
可以實現全局的異常控制,只要在系統運行中發生異常,它都會捕獲到。
實現該介面,必須重寫resolveException方法,該方法就是異常處理邏輯,只能返回ModelAndView 物件。
3、使用@ControllerAdvice註解 + @ExceptionHandler註解
1、當代碼加入了 @ControllerAdvice,則不需要必須在同一個controller中了。
2、@controlleradvice+@ExceptionHandler也可以實現全局的異常捕捉。
3、不同的類型異常由不同的異常處理方法進行處理。
SpringBoot預設不支援捕獲404異常,需要新增下面兩行配置才能使捕獲404異常生效。
12、SpringMVC的控制器是不是單例模式,有什麼問題,怎麼解決?
Controller是單例模式,在多執行緒訪問的時候可能產生執行緒安全問題,不要使用同步,會影響程式效能。
解決方案是在控制器裡面不能編寫可變狀態量。
如果需要使用這些可變狀態量,可以使用ThreadLocal機制解決,為每個執行緒單獨生成一份副本,獨立操作,互不影響。
13、如果在攔截請求中,想攔截get方式提交的方法,怎麼配置?
可以在@RequestMapping註解裡面加上method=RequestMethod.GET。
可以使用@GetMapping註解。
@GetMapping(value="/toLogin")
public ModelAndView toLogin(){}
14、怎樣在控制器方法裡面得到request或者session?
直接在控制器方法的形參中聲明request,session,SpringMvc就會自動把它們注入。
15、如果想在攔截的方法裡面得到從前臺傳入的參數,怎麼得到?
直接在控制器方法的形參裡面聲明這個參數就可以,但名字必須和傳過來的參數名稱一樣,否則參數對映失敗。下面方法形參中的userId,就會接收從前端傳來參數名稱為userId的值。
16、前臺傳入多個參數,並且這些參數都是一個物件的屬性,怎麼進行參數繫結?
直接在控制器方法的形參裡面聲明這個參數就可以,SpringMVC就會自動會請求參數賦值到這個物件的屬性中。
下面方法形參中的user用來接收從前端傳來的多個參數,參數名稱需要和User實體類屬性名稱一致。
Demo項目中前端帶參查詢:
Controller:
Service:
ServiceImpl:
Mapper:–【命名參數】:明確指定封裝參數——@Param註解
Mapper.xml:
SpringMVC中的參數繫結
SpringMVC預設支援的繫結類型有:
HttpServletReequest物件:通過request物件可以獲取參數資訊
HttpservletResponse物件:通過response物件可以處理響應資訊
HTTPSession物件:獲取session中儲存的物件
Model/ModelMap:Model是一個介面,ModelMap是一個介面的實現。作用是將模型資料填充到request域。
在參數繫結過程中,如果遇到上面類型就直接進行繫結。也就是說,我們可以在controller的方法的形參中直接定義上面這些類型的參數,springmvc會自動繫結。這裡要說明一下的就是Model/ModelMap物件,Model是一個介面,ModelMap是一個介面實現 ,作用是將Model資料填充到request域,跟ModelAndView類似。
TODO:集合類型的繫結等著再看
17、SpringMVC中函數的返回值是什麼?
SpringMVC四種返回值類型總結
1、ModelAndView
在SpringMVC中,經常返回ModelAndView類型;前後端分離後,後端以返回JSON格式為主。
ModelAndView類型可以指定檢視名稱,也可以繫結資料
2、void1、方法內沒有返回值,SpringMVC會預設把該名稱當做檢視名稱解析。存在該檢視就返回,不存在就報異常。
還可以通過加上@ResponseBody註解,返回空的JSON資料。
2、請求轉發
3、實現重定向
3、String1、「userList」——返回String最常見的是返回一個邏輯檢視名,這時候一般利用預設的參數Model傳遞資料。
2、「redirect:tologin」——重定向:登入失敗時重定向到登入頁面。
3、「forward:tologin」——請求轉發:登入失敗時請求轉發到登入頁面。
4、「你真棒!」——真的返回String,相當於JSON格式的資料。
4、JSON現在前後端分離的情況下,大部分後端只需要返回JSON資料即可,List 集合、Map集合,實體類等都可以返回,這些資料由 HttpMessageConverter自動轉為JSON ,如果使用了Jackson或者Gson,不需要額外配置就可以自動返回JSON了,因為框架幫我們提供了對應的HttpMessageConverter ,如果使用了Alibaba的Fastjson的話,則需要自己手動提供一個相應的 HttpMessageConverter 的例項。
18、SpringMVC用什麼物件從後臺向前臺傳遞資料的?
1、使用Map、Model和ModelMap的方式,這種方式儲存的資料是在request域中
2、使用request的方式
3、使用ModelAndView
19、SpringMVC中有個類把檢視和資料都合併的一起的,叫什麼?
就是ModelAndView。
使用ModelAndView類儲存處理完後的結果資料,以及顯示該資料的檢視。從名字上看ModelAndView中的Model代表模型,View代表檢視,從名字看就很好地解釋了該類的作用。Controller處理器呼叫模型層處理完使用者請求後,把結果資料儲存在該類的model屬性中,把要返回的檢視資訊儲存在該類的view屬性中,然後把ModelAndView返回給前端控制器。前端控制器通過呼叫配置檔案中定義的檢視解析器,對該物件進行解析,最後把結果資料顯示在指定的頁面上。
返回指定頁面
ModelAndView構造方法可以指定返回的頁面名稱。
也可以通過setViewName()方法跳轉到指定的頁面 。
返回所需數值
使用addObject()設定需要返回的值,addObject()有幾個不同參數的方法,可以預設和指定返回物件的名字。
20、怎麼樣把ModelMap裡面的資料放入session裡面?
在類上新增@SessionAttributes註解將指定的Model資料儲存到session中。
@SessionAttributes
預設情況下Spring MVC將模型中的資料儲存到request域中。當一個請求結束後,資料就失效了。
如果要跨頁面使用,那麼需要使用到session。而**@SessionAttributes註解就可以使得模型中的資料儲存一份到session域中。**
@SessionAttributes只能定義在Class,interface enum上,作用是將指定的Model中的鍵值對新增至session中,方便在一個會話中使用。
@SessionAttributes參數:
names:這是一個字元串陣列。裡面應寫需要儲存到session中資料的名稱。
types:根據指定參數的類型,將模型中對應類型的參數儲存到session中。
value:其實和上面的names是一樣的。
在上面程式碼中,在類上新增@SessionAttributes註解,並指定將names名稱的Model資料儲存到session域中,以及將Integer類型的Model資料儲存到session域中。
21.SpringMVC裡面攔截器是怎麼寫的?
可以使用SpringMVC攔截器進行認證和授權操作,應用場景有:登入認證攔截器(商城),字元過濾攔截器,日誌操作攔截器等等。
SpringMVC攔截器的實現一般有兩種方式:
自定義的Interceptor類要實現了Spring的HandlerInterceptor介面。
繼承實現了HandlerInterceptor介面的類,比如Spring已經提供的實現了HandlerInterceptor介面的抽象類HandlerInterceptorAdapter。
HandlerInterceptor介面中定義了三個方法,我們就是通過這三個方法來對使用者的請求進行攔截處理的。
preHandle():
這個方法在Controller處理請求之前被呼叫,SpringMVC中的Interceptor是鏈式的呼叫的,在一個應用中或者說是在一個請求中可以同時存在多個Interceptor 。每個Interceptor的呼叫會依據它的聲明順序依次執行,而且最先執行的都是Interceptor 中的preHandle方法,所以可以在這個方法中進行一些前置初始化操作或者是對當前請求的一個預處理,也可以在這個方法中進行一些判斷來決定請求是否要繼續進行下去。
該方法的返回值是布爾值Boolean 類型的,當它返回為false 時,表示請求結束,後續的Interceptor和Controller都不會再執行;當返回值為true時就會繼續呼叫下一個Interceptor的preHandle 方法,如果已經是最後一個Interceptor的時候就會是呼叫當前請求的Controller方法。
postHandle():
這個方法在Controller方法處理當前請求之後執行,在DispatcherServlet進行檢視返回渲染之前被呼叫,所以可以在這個方法中對Controller處理之後的ModelAndView物件進行操作。——多用於處理返回的檢視。
postHandle方法被呼叫的方向跟preHandle 是相反的,也就是說先聲明的Interceptor的postHandle方法反而會後執行。
afterCompletion()
這個方法也是需要當前對應的Interceptor的preHandle方法的返回值為true時才會執行。顧名思義,該方法將在整個請求結束之後,也就是在DispatcherServlet渲染了對應的檢視之後執行。——適合進行一些資源清理、記
多個攔截器中方法執行規則:
可以配置多個攔截器,每個攔截器中都有三個方法。下面將總結多個攔截器中的方法執行規律。
preHandle:Controller方法處理請求前執行,根據攔截器定義的順序,正向執行。postHandle:Controller方法處理請求後執行,根據攔截器定義的順序,逆向執行。需要所有的preHandle方法都返回true時才會呼叫。afterCompletion:View檢視渲染後處理方法:根據攔截器定義的順序,逆向執行。preHandle返回true就會呼叫。我的項目中的攔截器
然後在LoginRequired中定義註解:
具體呼叫:
@RequestMapping("checkCart")
@LoginRequired(loginSuccess = false)
//檢查購物車,返回購物車的內嵌頁---出一個小的頁面, ajax非同步+內嵌頁---重新整理內嵌頁
public String checkCart(String isChecked, String skuId, HttpServletRequest request, HttpServletResponse response, HttpSession session, ModelMap modelMap)
好啦,今天的文章就到這裡了,希望能夠幫助到螢幕前迷茫的你們
相關文章
Hello,今天給各位童鞋們分享的是Spring MVC,趕緊拿出小本子記下來吧Spring MVC 簡單概述:Model1:早期 Java Web 的開發中,統一把顯示層、控制層、資料層的操作全部交給 JSP 或者
2021-07-02 03:05:10
在晶片代工領域,臺積電無論是市場份額還是技術實力,都要遠超三星、中芯國際、英特爾等競爭對手。但是,這並不意味著臺積電能夠在該領域高枕無憂。事實上,三星一直在加緊攻關先進
2021-07-02 03:04:53
按照眾多媒體的爆料,華為P50系列手機中,或有采用高通驍龍888晶片的版本,不過只是4G版本,沒有5G功能。而在此之前,華為的平板MatePad Pro也採用過高通驍龍870晶片,這也是一顆不支援
2021-07-02 03:04:46
Apple 的 iOS 15 和 iPadOS 15 直到 2021 年晚些時候才會全面釋出,但您現在無需成為開發人員即可測試公測版。如果您願意冒著遇到可能的錯誤的風險來試用新功能,我們將引導您
2021-07-02 03:04:40
有朋友告訴我,遊戲它就是用來屯的,不是用來玩的,他的理由是從知乎上嫖來的:「花錢買的,憑什麼花時間玩」。當然,屯遊戲和屯遊戲境界也不一樣,有的人只屯白嫖遊戲,站在了抵抗消費主義
2021-07-02 03:04:31
大資料文摘授權轉載自AI科技評論作者:琰琰、青暮比GPT-3更強大!昨日,微軟與OpenAI共同推出了一款AI程式設計工具GitHub Copilot,這款工具基於GitHub及其他網站的原始碼,可根據上
2021-07-02 03:03:26