主頁 >  其他 > .net面試題-15k+左右

.net面試題-15k+左右

2020-11-05 14:59:35 其他

 

綜合

  1. 以前的專案中,主要解決了什么技術性 難題 ,如果出現問題,你如何迅速找到問題,你遇到問題都是怎么解決的

 根據出現的問題,大概排查出問出問題的幾個點,逐個排查, 錯誤日志- sql查詢計劃-定位程式錯誤 reshare

解決秒殺: 集群,redis快取,rabbitmq佇列,關閉評價服務等權重低的服務,

 

2. 關于代碼優化你怎么理解?你會考慮去代碼重構嗎?

1、對于代碼優化,之前的公司每周會做代碼審核,審核的主要作用就是保證代碼的正確性和執行效率,

2、  對于陳舊代碼,可能很多地方有呼叫,并且開發和維護人員很有可能不是同一個人,所以重構時要格外小心,

如果沒有十足的把握,不要輕易重構,如果必須要重構,必須做好充分的單元測驗和全域測驗,

 

3.架構設計需要滿足4點要求:

1. 能進行分布式存盤

2. 能實作負載均衡

3. 能根據用戶訪問量和圖片數量增加而動態增加服務器節點

4. 服務器節點的增加對用戶透明,不會中斷系統的運行

 

4. CAP原理:

Base理論:磁區容錯前提下,優先保證可用性,然后最終結果一致就行

 

5. SignalR,是否寫過聊天室?

 

定義:是為 ASP.NET 開發人員提供的一個庫,可以簡化開發人員將實時 Web 功能添加到應用程式的程序,實時 Web 功能是指這樣一種功能(聊天室,股票交易,微信角標,站內訊息):當所連接的客戶端變得可用時服務器代碼可以立即向其推送內容,

而不是讓服務器等待客戶端請求新的資料,使用websocket通信,底層是socket (本質是編程介面(API),對TCP/IP的封裝,提供了網路通信的能力).

當環境條件合適時,SignalRWebSocket作為底層傳輸方式的優先實作,當然,它也能很高效地回退到其他技術(長輪詢, ServerSendEvent),同時,SignalR提供了非常良好的Api以供遠程呼叫(RPC) 瀏覽器中的js代碼,

SignalR有兩種連接,分為Persistent Connection(永久連接) 與 Hubs

           Persistent Connection:表示一個發送單個,編組,廣播資訊的簡單終結點,開發人員通過使用持久性連接Api,直接訪問SignalR公開的底層通信協議,

Hubs是基于連接Api的更高級別的通信管道,它允許客戶端和服務器上彼此直接呼叫方法,SignalR能夠很神奇地處理跨機器的調度,使得客戶端和服務器端能夠輕松呼叫在對方端上的方法,使用Hub還允許開發人員將強型別的引數傳遞給方法并且系結模型

        4種方式:

  1. 輪詢(polling以前的方式)客戶端以一定時間間隔中向服務器發送Ajax查詢請求大,但是也因此,當服務器端內容并沒有顯著變化時,這種連接方式將帶來很多無效的請求,造成服務器資源損耗,適合并發量小,實時性要求低的應用模型,更像是定時任務,優點:實作最為簡單,配置簡單,出錯幾率小. 缺點:每次都是一次完整的http請求,易延遲,有效請求命中率少,并發較大時,服務器資源損耗大
  2. long polling長輪詢, 長輪詢是對輪詢的改進,客戶端通過請求連接到服務器,并保持一段時間的連接狀態,直到訊息更新或超時才回傳Response并中止連接,可以有效減少無效請求的次數,屬于Comet實作. 優點:有效減少無效連接,實時性較高.缺點:客戶端和服務器端保持連接造成資源浪費,服務器端資訊更新頻繁時,long polling并不比polling高效,并且當資料量很大時,會造成連續的polls不斷產生,性能上反而更糟糕
  3. WebSocket 是HTML5提供的一種在單個 TCP 連接上進行全雙工通訊的協議,目前chrome、Firefox、Opera、Safari等主流版本均支持,Internet Explorer從10開始支持,另外因為WebSocket 提供瀏覽器一個原生的 socket實作,所以直接解決了 Comet 架構很容易出錯的問題,而在整個架構的復雜度上也比傳統的實作簡單得多,優點:服務器與客戶端之間交換的資料包檔頭很小,節約帶寬,全雙工通信,服務器可以主動傳送資料給客戶端,缺點:舊版瀏覽器不支持,

使用條件:


1.正在使用跨域連接,并且符合以下條件(以下不滿足任一條則使用長輪詢)
(1).客戶端支持CORS
(2).客戶端支持WebSocket
(3).服務器端支持WebSocket
2.不配置使用JSONP,連接不跨域并且客戶端和服務器端都支持WebSocket
(1).客戶端支持CORS
(2).客戶端支持WebSocket
(3).服務器端支持WebSocket

 

  1. ServerSendEvent  客戶端或服務器端不支持Websocket時使用
  2. Forever Frame EventSource不可用(基本上除了IE外都支持)時使用

6. .netframework的運行機制: 編譯器會將源代碼編譯成Microsoft中間語言(MSIL)有時也稱為中間語言(IL),當程式運行時,實時(JIT)編譯器將MSIL轉換為特定機器的本機代碼,實時編譯器是公共語言運行庫的一部分,

7. 專案管理要素:

作業范圍、時間、質量、成本:

68.1范圍(Scope ),也稱為作業范圍,指為了實作專案目標必須完成的所有作業,(完成哪些作業就可以達到專案的目標”,或者說 “完成哪些作業專案就可以結束了)

68.2. 時間(Time ),專案時間相關的因素用進度計劃描述,進度計劃不僅說明了完成專案作業范圍內所有作業需要的時間,也規定了每個活動的具體開始和完成日期,

68.3 成本(Cost ),指完成專案需要的所有款項,包括人力成本、原材料、設備租金、分包費用和咨詢費用等,專案的總成本以預算為基礎,專案結束時的最終成本應控制在預算內,

68.4 質量(Quality ),是指專案滿足明確或隱含需求的程度,

 

8. 解決高并發

1. 快取

2. HTML靜態化

3. 資料庫讀寫分離mssql訂閱發布

4、分布式集群

5、鏡像

6、負載均衡

7. 分庫分表

8. 業務拆分,做微服務

9. 使用佇列

 

9. 微服務

微服務架構是一個用分布式服務拆分業務邏輯,完成解耦的架構模式,(就是把以前的Bll改成服務,跨行程呼叫服務來完成功能)

微服務------行程之間通信:

共享存盤: Redis,DB,Queue,硬碟檔案等等,被動式通信,門檻低,

服務通信: WebSoeket, WebService,WCF,WebApi,ashx,aspx等等,主動觸發,資料序列化傳遞,跨平臺,跨語言,http穿透防火墻.

RPC: .net Remoting(.net獨有,不支持跨平臺);gRPC(高性能,開源,通用的RPC框架,面向服務端和移動端,基于http/2設計)

微服務------服務實體集群

Consul:服務注冊與發現,健康檢查

微服務------網關:Gateway:提供統一服務入口,對前臺透明.聚合后臺服務,節省流量,提高性能,提供安全,過濾,流量控制等管理功能,就是一個configuration.json

快取

熔斷:單位時間內例外多少次,就指定時間內,網關直接回傳失敗,

限流:單位時間內,流量只允許多少次,(張善友寫的)

降級:特殊情況下可以降低服務器等級,甚至關閉,

微服務------鑒權&授權:JWT

微服務------瞬態故障處理:

Polly是一種.net彈性和瞬態處理庫,允許我們以非常順暢和執行緒安全的方式來執行諸如 重試,斷路,超時,故障恢復等策略,

微服務------分布式追蹤(常用軟體Skyworking):

分布式追蹤和APM的Server端,它將包含Collector,Stroage,獨立的WebUI,并使用OpenTracing規范來設計追蹤資料,

微服務------ExceptionLess:

ExceptionLess:開源的日志收集和分析框架,能為應用程式提供實時錯誤,特性和日志報告,

微服務------統一配置中心:

Apollo:配置管理平臺,能夠集中化管理應用不同環境,不同集群的配置,配置修改后能實時推送到應用端,并且具備規范的權限、流程治理等特性,

微服務------分布式事務:

CAP理論

微服務------容器化docker:

Docker:是一個開源的應用程式引擎,可以打包應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的linux或者windows機器上,也可以實作虛擬化

微服務------容器編排K8S(管理docker):

Kubernetes編排容器,是管理應用的全生命周期的工具,從創建應用/部署,應用提供服務,擴容縮容,更新,都非常方便,而且可以做到故障自愈,

微服務------CI/CD:

Jenkins是一個開源的,提供友好操作界面的持續集成(CI)工具,主要用于持續、自動的構建/測驗軟體專案、監控外部任務的運行,

 

10. redis:(Remote Dictionary Server )

即遠程字典服務,是一個開源的key-value資料結構存盤系統,可以用作資料庫,快取,訊息中間件MQ(發布,訂閱). 它支持存盤的value型別相對更多,包括string(字串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希型別)和范圍查詢geospatial 地理位置,Geopos 獲取坐標,Geodist 獲取兩個城市的距離,資料都是快取在記憶體中,redis會周期性的把更新的資料寫入磁盤或者把修改操作寫入追加的記錄檔案,并且在此基礎上實作了master-slave(主從)同步,通過持久化機制把記憶體中的資料同步到硬碟檔案來保證資料持久化,當Redis重啟后通過把硬碟檔案重新加載到記憶體,就能達到恢復資料的目的,

 

Redis單條命令是保存原子性的,但是事務不保證原子性,沒有隔離級別的概念,只有發起命令exec時才會被執行,執行完以后銷毀該事務,編譯時例外,不執行事務,運行時例外(1/0),其他命令可以執行,錯誤拋出例外.

Reids事務本質:一組命令的集合,一個事務中的所有命令都會被序列化,在事物的執行程序中,會按照順序執行, 一次性,順序性,排他性,

Redis默認有16個資料庫,

 

悲觀鎖:什么操作都加鎖,耗性能,

Watch 樂觀鎖:什么時候都不會上鎖,只有更新的時候,獲取version,判斷下是否有人更改了這個資料, 如果失敗了,就使用unwatch取消鎖,然后再開啟樂觀鎖

 

持久化: 只做快取的話,沒必要持久化,

實作:單獨創建fork()一個子行程,將當前父行程的資料庫資料復制到子行程的記憶體中,然后由子行程寫入到臨時檔案中,持久化的程序結束了,再用這個臨時檔案替換上次的快照檔案,然后子行程退出,記憶體釋放,

1. Rdb就是子行程創建快照(默認,修復快,運行快,適合大規模資料修復,對資料完整性要求不高,但是需要一定時間操作,如果redis宕機,那最后一次操作就丟失了,fork行程的時候,會占用一部分的記憶體空間),按照一定的時間周期策略把記憶體的資料以快照的形式保存到硬碟的二進制檔案,對應產生的資料檔案為dump.rdb,

2.AOF:以日志的形式來記錄每個寫操作,只追加檔案,redis啟動時會讀取該檔案重新構建資料,就是把所有寫操作都來一遍,每次修改都同步,檔案的完整性更好,效率最高,但是修復慢,運行慢,

 

哨兵模式:是個獨立的行程,類似服務注冊與發現、心跳檢測,是主從復制的升級,自動檢測是否可用,不過在線擴容麻煩,可以做哨兵集群,

 

快取穿透(快取查不到,直接查資料庫)

布隆過濾器:是一種資料結構,對所有可能查詢的引數以hash存盤,在控制層校驗,不符合則丟棄,避免了對底層存盤系統的查詢壓力

快取空物件

快取擊穿(大量查詢單個熱點快取的時候,快取過期了)

設定熱點資料永不過期,

加互斥鎖(分布式鎖):每個key同時只能有一個執行緒去查詢后端,其他執行緒等待,將高并發的壓力轉移到分布式鎖上,

快取雪崩:某個時間段內,快取集體失效(redis宕機,秒殺資料快取集體過期)

集群

限流降級:快取失效后,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量,

快取預熱:正式部署之前,先把可能訪問的資料,都訪問一遍,手動加載都快取中,設定不通的過期時間,讓快取的失效時間盡量均勻,

 

單執行緒的redis為什么這么快

 

(一)純記憶體操作

(二)單執行緒操作,避免了頻繁的背景關系切換

(三)采用了非阻塞I/O多路復用機制

 

redis采用的是定期洗掉+惰性洗掉策略,

redis默認每個100ms隨機抽取檢查,是否有過期的key,有過期key則洗掉,如果只采用定期洗掉策略,會導致很多key到時間沒有洗掉,于是,惰性洗掉派上用場,,也就是說在你獲取某個key的時候,redis會檢查一下key過期就洗掉,如果定期洗掉沒洗掉key,然后你也沒即時去請求key,redis的記憶體會越來越高,那么就應該采用記憶體淘汰機制,

在redis.conf中有一行配置maxmemory-policy volatile-lru

該配置就是配記憶體淘汰策略的

volatile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘汰

volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰

volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰

allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰

allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰

no-enviction(驅逐):禁止驅逐資料,新寫入操作會報錯ps:如果沒有設定 expire 的key, 不滿足先決條件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行為, 和 noeviction(不洗掉) 基本上一致,

 

 為什么是單執行緒的

因為Redis是基于記憶體的操作,CPU不是Redis的瓶頸,并且單執行緒容易實作,所以是單執行緒,利用佇列技術將并發訪問變為串行訪問,

 

Redis 集群方案:只用過redis cluster3.0 自帶的集群,特點在于他的分布式演算法不是一致性 hash,而是 hash 槽的概念,以及自身支持節點設定從節點,

 

Redis 常見性能問題和解決方案?

Master 最好不要做任何持久化作業,如 RDB 記憶體快照和 AOF 日志檔案(2) 如果資料比較重要,某個 Slave 開啟 AOF 備份資料,策略設定為每秒同步一次(3) 為了主從復制的速度和連接的穩定性, Master 和 Slave 最好在同一個局域網內(4) 盡量避免在壓力很大的主庫上增加從庫(5) 主從復制不要用圖狀結構,用單向鏈表結構更為穩定,即: Master <- Slave1 <- Slave2 <-Slave3…

 

Redis事務

Redis事務功能是通過MULTI、EXEC、DISCARD和WATCH 四個原語實作的Redis會將一個事務中的所有命令序列化,然后按順序執行,

1.redis 不支持回滾,Redis 在事務失敗時不進行回滾,而是繼續執行余下的命令, 所以 Redis 的內部可以保持簡單且快速,

2.如果在一個事務中的命令出現錯誤,那么所有的命令都不會執行;

3.如果在一個事務中出現運行錯誤,那么正確的命令會被執行,注:redis的discard只是結束本次事務,正確命令造成的影響仍然存在.

1)MULTI命令用于開啟一個事務,它總是回傳OK, MULTI執行之后,客戶端可以繼續向服務器發送任意多條命令,這些命令不會立即被執行,而是被放到一個佇列中,當EXEC命令被呼叫時,所有佇列中的命令才會被執行,

2)EXEC:執行所有事務塊內的命令,回傳事務塊內所有命令的回傳值,按命令執行的先后順序排列, 當操作被打斷時,回傳空值 nil ,

3)通過呼叫DISCARD,客戶端可以清空事務佇列,并放棄執行事務, 并且客戶端會從事務狀態中退出,

4)WATCH 命令可以為 Redis 事務提供 check-and-set (CAS)行為, 可以監控一個或多個鍵,一旦其中有一個鍵被修改(或洗掉),之后的事務就不會執行,監控一直持續到EXEC命令,

Redis實作分布式鎖

Redis為單行程單執行緒模式,采用佇列模式將并發訪問變成串行訪問,且多客戶端對Redis的連接并不存在競爭關系,Redis中可以使用SETNX命令實作分布式鎖,將 key 的值設為 value ,當且僅當 key 不存在, 若給定的 key 已經存在,則 SETNX 不做任何動作,

解鎖:使用 del key 命令就能釋放鎖解決死鎖:

1)通過Redis中expire()給鎖設定最大持有時間,如果超過,則Redis來幫我們釋放鎖,

2) 使用 setnx key “當前系統時間+鎖持有的時間”和getset key “當前系統時間+鎖持有的時間”組合的命令就可以實作,

 

11. API跨域

1. josnp

2. 后臺模擬http請求(httpclient)

3 在服務器端指定允許跨域

3.1 指定一個方法跨域,方法中添加 base.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin","*");

3.2 指定全部方法跨域(添加方法特性或者控制器特性)

3.3 netcore中間件跨域

 

12. elasticsearch:是一個開源的高擴展的RESTful 風格的分布式全文檢索引擎,它可以近乎實時的存盤、檢索資料,本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的資料,也可以使用lucene作為你核心來實作所有索引和搜索的工功能,但它的目的是通過簡單的RESTfulAPI來隱藏Lucene的復雜性,從而讓全文搜索變得簡單,使用ES做一個全文索引,我們將經常查詢的商品的某些欄位,比如說商品名,描述、價格還有id這些欄位我們放入我們索引庫里,可以提高查詢速度,還可以設定搜索的權重,例如搜索電腦,會首先搜索商品名稱,然后再搜索分類和描述,

 

ELK: 是指elasticsearch、Logstash(中央資料流引擎,收集資料后通過過濾輸出到不同的目的地[檔案、redis\es])、Kibana,

在config中elasticsearch.yml 中,最后添加下面的代碼,允許跨域訪問,

在bin中雙擊 elasticsearch.bat啟動elasticsearch,瀏覽器輸入 http://localhost:9200/ ,顯示下圖,表示成功

下載kibana((將es資料友好展示,提供實時分析功能)),在config中的kibana.yml,最后一句添加 i18n.locale: "zh-CN",界面漢化,瀏覽器輸入http://localhost:5601/app/kibana#/home,打開首頁.

下載分詞器ik,然后在elasticsearch\elasticsearch-7.8.0\plugins 中新建ik檔案夾,把代碼解壓到這里.可以在elasticsearch 的bin的 cmd中,使用elasticsearch-plugin list查看是否安裝成功,ik有兩個分詞演算法:ik_smark(最少切分) ik_max_word(最細粒度劃分)

倒排索引是什么

傳統的我們的檢索是通過文章,逐個遍歷找到對應關鍵詞的位置,而倒排索引,是通過分詞策略,形成了詞和文章的映射關系表,這種詞典+映射表即為倒排索引,有了倒排索引,就能實作 o(1)時間復雜度的效率檢索文章了,極大的提高了檢索效率,倒排索引,相反于一篇文章包含了哪些詞,它從詞出發,記載了這個詞在哪些檔案中出現過,由兩部分組成——詞典和倒排表,倒排索引的底層實作是基于:FST(Finite State Transducer, 空間占用小, 查詢速度快)資料結構,

 

13. gRpc:

所謂RPC(remote procedure call 遠程程序呼叫)框架實際是提供了一套機制,使得應用程式之間可以進行通信,而且也遵從server/client模型.

gRPC和restful API都提供了一套通信機制,用于server/client模型通信,而且它們都使用http作為底層的傳輸協議(嚴格地說, gRPC使用的http2.0,而restful api則不一定),

  1. 性能監控 優化系統性能 都會從哪方面操作,用到哪些工具,怎么操作

1.硬體調優:添加記憶體條,帶寬

2.軟體調優:

2.1用空間換時間:,各種cache資料緩沖,CDN資料鏡象,負載均衡

2.2用時間換空間:(網路傳輸縮資料的演算法),簡化代碼, 代碼調優\演算法調優\記憶體分配\異步操作\網路調優網卡調優\資料庫調優 \Web服務器\資料庫分離

OneAPM 通過自動探知 Web 端用戶、關鍵應用、資料庫請求、外部呼叫等各層級應用組件,繪制全域拓撲,直觀展示組件性能及相互呼叫時間,其中包括網路耗時,可以實時了解哪些環節成為了系統的性能瓶頸,做出有針對性的優化

百度應用性能監測中心(http://developer.baidu.com/apm/)和齊云測(http://ce.cloud.360.cn/)也可以

 

  1. Aop:面向切面編程,能在不破壞封裝的前提下,額外擴展功能,代碼復用,集中管理,類似Fillter,過濾器,場景:權限,校驗,性能監控,資料壓縮, 例外處理,日志,快取,事務等等

.netcore中生命周期 1. AuthorizationFilter 2. ResourceFilter 3. ActionFilter 4.ExcptionFilter 5. ResultFilter

3種注冊方式 1. action注冊(就是放在action的特性 2. 控制器注冊, 該控制所有的操作都從走這個方法 3全域注冊,全域生效

 

  1. 說一說你最大的優勢:

優點是很會處理與人的關系,性格上來說很樂觀,對一件事情喜歡從一而終,選擇了就要好好做下去.適應力強,能很快融入團隊,盡快給公司創造價值.

缺點是遇見難題,不睡覺也要弄出來,要不睡不踏實,分配給別人的任務,老不放心.老想著親力親為.

 

  1. 作為架構師或者技術經理,怎么進行技術選型?
    1. 先測驗、研究,再決定,選擇的軟體技術,
    2. 要能快速地實作應用程式的構建, 技術選型必須貼著業務來選擇.
    3. 對于未經驗證的新技術、新理念的引入一定要慎重,一定要在全方位的驗證過后,再大規模的的使用,
    4. 適當的選擇熟悉的技術, 選擇擁有強大社區支撐的專案
    5. 整體的技術選型流程:“列出需求”-“細分需求”-“明確搜索方向”-“網路搜索”-“明確評判標準”-“分頭執行”-“匯總材料”-“初步選擇”-“進一步調研”-“會議評審”-“做出決定”

 

  1. 快取如何設計?千萬級并發!如何設計一個多級快取系統?

多級快取系統,就是指在一個系統 的不同的架構層級進行資料快取,以提升訪問效率,

整個多級快取系統被分為三層,應用層nginx快取,分布式redis快取集群,tomcat堆內快取,整個架構流程如下:

  1. 當接收到一個請求時,首先會分發到nginx集群中,這里可以采用nginx的負載均衡演算法分發給某一臺機器,使用輪詢可以降低負載,或者采用一致性hash演算法來提升快取命中率,
  2. 當nginx層沒有快取資料時,會繼續向下請求,在分布式快取集群中查找資料,如果快取命中,直接回傳(并且寫入nginx應用快取中),如果未命中,則回源到tomcat集群中查詢堆內快取,
  3. 在分布式快取中查詢不到資料,將會去tomcat集群中查詢堆內快取,查詢成功直接回傳(并寫入分redis主集群中),查詢失敗請求資料庫;堆內快取,
  4. 如果以上快取中都沒有命中,則直接請求資料庫,回傳結果,同步資料到分布式快取中,

 

 

  1. 快速有效過濾關鍵字/敏感詞

es創建敏感詞庫,如果有敏感詞就替換

二叉樹(這個不會)

 

  1. 獲取一個陣列中最大的數字,使用的方式有哪些?

快速排序:通過多次比較和交換來實作排序, ,說白了就是給基準資料找其正確索引位置的程序.示例如下

 static void Main(string[] args)

 {

            int[] array = { 49, 38, 65, 97, 76, 13, 27 };

            sort(array, 0, array.Length - 1);

            Console.ReadLine();

 }

 /**一次排序單元,完成此方法,key左邊都比key小,key右邊都比key大,

**@param array排序陣列 

**@param low排序起始位置 

**@param high排序結束位置

**@return單元排序后的陣列 */

 

  private static int sortUnit(int[] array, int low, int high)

        {

            int key = array[low];

            while (low < high)

            {

                /*從后向前搜索比key小的值*/

                while (array[high] >= key && high > low)

                    --high; 

                /*比key小的放左邊*/

                array[low] = array[high];   

                /*從前向后搜索比key大的值,比key大的放右邊*/

                while (array[low] <= key && high > low)

                    ++low; 

                /*比key大的放右邊*/

                array[high] = array[low];

            }

            /*左邊都比key小,右邊都比key大,//將key放在游標當前位置,//此時low等于high */

            array[low] = key;

            foreach (int i in array)

            {

                Console.Write("{0}\t", i);

            }

            Console.WriteLine();

            return high;

        }    

 /**快速排序 

*@paramarry 

*@return */

        public static void sort(int[] array, int low, int high)

        {

            if (low >= high)

                return; 

            /*完成一次單元排序*/

            int index = sortUnit(array, low, high); 

            /*對左邊單元進行排序*/

            sort(array, low, index - 1);

            /*對右邊單元進行排序*/

            sort(array, index + 1, high);

        }

 

.net

  1. 單例:可以保證系統中一個類只有一個實體,并且自行實體化向整個系統提供(例如一個系統中可以存在多個列印任務,但是只能有一個正在作業的任務)

最簡單的就是寫考慮執行緒安全的單例模式,網站的計數器,日志, Web應用的配置物件的讀取,資料庫連接池,多執行緒的執行緒池

簡單工廠:所有類的new都放到一個工廠類中進行

工廠模式:定義公共介面,每新增一個產品類,就需要添加一個實作該介面的工廠類

抽象工廠:跟工廠模式類似,定義公共介面,只是一個類中有多個產品,

 

public class Singleton

{

// 定義一個靜態變數來保存類的實體

private static Singleton uniqueInstance;

// 定義一個標識確保執行緒同步

private static readonly object locker = new object();

// 定義私有建構式,使外界不能創建該類實體

private Singleton() {}

// 定義公有方法提供一個全域訪問點,同時你也可以定義公有屬性來提供全域訪問點

public static Singleton GetInstance()

{

// 雙重鎖定只需要一句判斷就可以了

if (uniqueInstance == null)

{

lock (locker)

{

// 如果類的實體不存在則創建,否則直接回傳

if (uniqueInstance == null)

{

uniqueInstance = new Singleton();

}

}

}

return uniqueInstance;

}

}

 

2.IIS的作業原理?在什么情況下行程會被回收

此題主要考的是.net framework和IIS是如何結合呈現頁面的;

1、當客戶端發送HTTP Request時,服務端的HTTP.sys(可以理解為IIS的一個監聽組件) 攔截到這個請求;

2、HTTP.sys 聯系 WAS 向配置存盤中心請求配置資訊,

3、然后將請求傳入IIS的應用程式池,

4、檢查請求的后綴,啟動aspnet_isapi.dll這個dll,這個dll是.net framework里面的,也就是說到這一步,請求進入了.net framework的管轄范圍,

5、這個時候如果是WebForm,開始執行復雜的頁面生命周期(HttpRuntime→ProcessRequest→HttpContext→HttpHandler);如果是MVC,則啟動mvc的路由機制,根據路由規則為URL來指定HttpHandler

6、httpHandler處理請求后,請求結束,給出Response,客戶端處理回應,整個程序結束

 

3. RabitMQ:場景:應用解耦、異步、流量削鋒、資料分發、錯峰流控、日志收集等等...

 

核心思想就是生產者和消費者隔離,生產者從不直接將訊息發送給佇列,生產者通常不知道是否一個訊息會被發送到佇列中,只是將訊息發送到一個交換機,

先由Exchange來接收,然后Exchange按照特定的策略轉發到Queue進行存盤,同理,消費者也是如此,Exchange 就類似于一個交換機,轉發各個訊息分發到相應的佇列中

RabbitMQ提供了四種Exchange模式:fanout,direct,topic,header , header模式在實際使用中較少,

1.Fanout Exchange(發布訂閱): 所有發送到Fanout Exchange的訊息都會被轉發到與該Exchange 系結(Binding)的所有Queue上,

 Fanout Exchange: 不需要處理RouteKey ,只需要簡單的將佇列系結到exchange 上,這樣發送到exchange的訊息都會被轉發到與該交換機系結的所有佇列上,類似子網廣播,

每臺子網內的主機都獲得了一份復制的訊息,所以,Fanout Exchange 轉發訊息是最快的,

2.Direct (指定路由) 所有發送到Direct Exchange的訊息被轉發到RouteKey中指定的Queue,Direct模式,可以使用rabbitMQ自帶的Exchange:default Exchange ,所以不需要將Exchange進行任何系結(binding)操作 ,

訊息傳遞時,RouteKey必須完全匹配,才會被佇列接收,否則該訊息會被拋棄,、

3.Topic Exchange(占位符指定路由):所有發送到Topic Exchange的訊息被轉發到所有關心RouteKey中指定Topic的Queue上,

Exchange 將RouteKey 和某Topic 進行模糊匹配,此時佇列需要系結一個Topic,可以使用通配符進行模糊匹配,符號“#”匹配一個或多個詞,符號“*”匹配不多不少一個詞,因此“log.#”能夠匹配到“log.info.oa”,

但是“log.*” 只會匹配到“log.error”,所以,Topic Exchange 使用非常靈活,

如何確保訊息正確地發送至RabbitMQ?

使用發送方確認模式,確保訊息正確地發送到RabbitMQ,信道會發送一個確認給生產者(包含訊息唯一ID).當確認訊息到達生產者應用程式,生產者應用程式的回呼方法就會被觸發來處理確認訊息,

如何避免訊息重復投遞或重復消費?

        在訊息生產時,MQ內部針對每條生產者發送的訊息生成一個inner-msg-id,作為去重和冪等的依據(訊息投遞失敗并重傳),避免重復的訊息進入佇列;在訊息消費時,要求訊息體中必須要有一個bizId(對于同一業務全域唯一,如支付ID、訂單ID、帖子ID等)作為去重和冪等的依據,避免同一條訊息被重復消費,

       

 

 

4. webservice api的安全性:

1.使用TOKEN+簽名認證

1.1做一個認證服務,提供一個認證的WebApi,用戶先訪問它獲取對應的Token

1.2 用戶拿著相應的Token以及請求的引數和服務器端提供的簽名演算法計算出簽名后再去訪問指定的Api

1.3服務器端每次接收到請求就獲取對應用戶的Token和請求引數,服務器端再次計算簽名和客戶端簽名做對比,如果驗證通過則正常訪問相應的Api,驗證失敗則回傳具體的失敗資訊

2. 使用簽名來保證ASP.NET MVC 和 WebApi的介面安全,給每個http請求添加一個簽名,服務端來驗證簽名的合法性,如果簽名合法則執行回應的操作,如果簽名非法則直接拒絕請求,

簽名演算法一般都使用Hash散列演算法,簽名引數 可以用Http請求的queryString然后加上時間戳還有亂數來作為簽名的引數

3.基于Owin OAuth;使用OAuth的Client Credential Grant授權方式,在服務端通過Authorization Server的一個實作成功發放了Access Token,并在客戶端成功拿到了Access Token,

在ASP.NET WebApi中啟用OAuth的Access Token驗證非常簡單,只需在相應的Controller或Action加上[Authorize]標記,在ASP.NET中基于Owin OAuth`

 

5. JWT(鑒權授權):

用戶提交賬號密碼給服務器,成功的話,jwt創建一個token回傳給用戶,存盤在客戶端cookie中,jwt的字串是使用.(點)連接的三段字串,

token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

第一段是 header,json轉成字串以后baseurl64加密

{

"alg": "HS256",

"typ": "JWT"

}

 

第二段是 PAYLOAD 有效載荷,登錄成功以后的用戶相關資訊,id,賬號,過期時間等等,,json轉成字串以后baseurl64加密

{

"sub": "1234567890",

"name": "John Doe",

"iat": 1516239022,

“exp”:” 1516239022”

}

第三段是 VERIFY SIGNATURE 簽名

將第一和第二段的密文拼接起來進行HS256加密+加鹽,把生成的密文再次進行baseurl64加密

加鹽:用戶在輸入密碼注冊后,隨機生成一個 salt,一定要是隨機生成的,然后按照一定的混淆規則,將 salt 撒入到明文密碼中,最后將加鹽后的密碼做訊息摘要,將 salt 和密碼的訊息摘要傳給服務器,服務器如何匹配用戶密碼是否正確呢?用戶用同樣的方式對原始密碼加鹽再生成摘要,發送給服務器,服務器匹配摘要,因為鹽是隨機生成的,不用每次都生成鹽,鹽可以存在本地或者服務器,加鹽的規則只要不泄漏出去就行,這樣的處理比簡單的對密碼摘要要安全很多,

 

校驗方式:

由于token不存盤在服務器,所以需要用戶訪問的時候(攜帶token),去校驗token

1.使用點(.)分割token,成3段

2.對第二段進行baseurl64解密,獲取payload資訊,檢測token是否過期

3.將第一和第二段的密文拼接起來進行HS256加密+加鹽,把生成的密文再次進行baseurl64加密

4.將token和密文比較,一樣就是沒有被更改的

 

6. Quartz:開源的作業調度框架,所謂作業調度其實就是按照程式的設定,某一時刻或者時間間隔去執行某個代碼,有調度器Scheduler,觸發器Trigger,任務Job,任務詳情JobDetail日歷-Calendar,JobDataMap,cron運算式,quartz.properties檔案組成.

Trigger是用來定義Job的執行規則,主要有四種觸發器,其中SimpleTrigger和CronTrigger觸發器用的最多,

SimpleTrigger:從某一個時間開始,以一定的時間間隔來執行任務,它主要有兩個屬性,repeatInterval  重復的時間間隔;repeatCount 重復的次數,實際上執行的次數是n+1,因為在startTime的時候會執行一次,

     CronTrigger:適合于復雜的任務,使用cron運算式來定義執行規則,

CalendarIntervalTrigger:類似于SimpleTrigger,指定從某一個時間開始,以一定的時間間隔執行的任務, 但是CalendarIntervalTrigger執行任務的時間間隔比SimpleTrigger要豐富,它支持的間隔單位有秒,分鐘,小時,天,月,年,星期,相較于SimpleTrigger有兩個優勢:1、更方便,比如每隔1小時執行,你不用自己去計算1小時等于多少毫秒,

2、支持不是固定長度的間隔,比如間隔為月和年,但劣勢是精度只能到秒,它的主要兩個屬性,interval 執行間隔;intervalUnit 執行間隔的單位(秒,分鐘,小時,天,月,年,星期)

 DailyTimeIntervalTrigger:指定每天的某個時間段內,以一定的時間間隔執行任務,并且它可以支持指定星期,它適合的任務類似于:指定每天9:00 至 18:00 ,每隔70秒執行一次,并且只要周一至周五執行,它的屬性有startTimeOfDay 每天開始時間;endTimeOfDay 每天結束時間;daysOfWeek 需要執行的星期;interval 執行間隔;intervalUnit 執行間隔的單位(秒,分鐘,小時,天,月,年,星期);repeatCount 重復次數

 

7. 冒泡排序

int[] aa = { 1,5,2,3,7 };

int temp;

for (int i = 0; i < aa.Length; i++)

{

for (int j = 0; j < aa.Length-i-1;j++ )

{

if(aa[j+1]<aa[j])

{

temp = aa[j];

aa[j]=aa[j+1];

aa[j + 1] = temp;

}

}

}

for (int i = 0; i < aa.Length;i++ )

{

textBox1.Text += aa[i];

}

這是bai從小到大順序排列du,如果zhi要從大到小排列只需將地dao7行的<改為>即可

 

8. 類和結構的異同

        Class可以被實體化,屬于參考型別,是分配在記憶體的堆上的,類是參考傳遞的,

        Struct屬于值型別,是分配在記憶體的堆疊上的,結構體是復制傳遞的,加分的回答:Int32、Boolean等都屬于結構體,

 

堆和堆疊的區別

                堆疊是編譯期間就分配好的記憶體空間,因此你的代碼中必須就堆疊的大小有明確的定義;區域值型別變數、值型別引數等都在堆疊記憶體中,

堆是程式運行期間動態分配的記憶體空間,你可以根據程式的運行情況確定要分配的堆記憶體的大小,

 

值型別和參考型別的區別:

                1.將一個值型別變數賦給另一個值型別變數時,將復制包含的值,參考型別變數的賦值只復制對物件的參考,而不復制物件本身,

2.值型別不可能派生出新的型別:所有的值型別均隱式派生自 System.ValueType,但與參考型別相同的是,結構也可以實作介面,

3.值型別不可能包含 null 值:然而,可空型別功能允許將 null 賦給值型別,

4.每種值型別均有一個隱式的默認建構式來初始化該型別的默認值, 

 

        介面和類

不同點:

不能直接實體化介面,

介面不包含方法的實作,

介面可以多繼承,類只能單繼承,

類定義可在不同的源檔案之間進行拆分,

相同點:

介面、類和結構都可以從多個介面繼承,

介面類似于抽象基類:繼承介面的任何非抽象型別都必須實作介面的所有成員,

介面和類都可以包含事件、索引器、方法和屬性,

 

基礎知識:介面只能定義方法(只能定義行為,不能定義實作也就是欄位),因為事件、索引器、屬性本質上都是方法,所以介面中也可以定義事件、索引器、屬性,

 

        abstract class和interface

相同點:

都不能被直接實體化,都可以通過繼承實作其抽象方法,

不同點:

介面支持多繼承;抽象類不能實作多繼承,

介面只能定義行為;抽象類既可以定義行為,還可能提供實作,

介面只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的簽名,但不能定義欄位和包含實作的方法;

抽象類可以定義欄位、屬性、包含有實作的方法, 

介面可以作用于值型別(Struct)和參考型別(Class);抽象類只能作用于參考型別,例如,Struct就可以繼承介面,而不能繼承類,

加分的補充回答:講設計模式的時候SettingsProvider的例子,

 

9. IIS經典模式和集成模式

經典模式是為了與之前的版本兼容,使用ISAPI擴展來呼叫ASP.NET運行庫,原先運行于IIS6.0下的Web應用程式遷移到IIS7.0中只要將應用程式配置成經典模式,代碼基本不用修改就可以正常運行,集成模式是一種統一的哀求處理管道,它將ASP.NET請求管道與IIS核心管道組合在一起,這種模式能夠提供更好的性能,能夠實作配置和治理的模塊化,而且增加了使用托管代碼模塊擴展IIS時的靈活性,假如老的Web應用程式運行于IIS7.0的集成模式下,可能需要對應用程式的web.config檔案進行修改,尤其是使用了實作IHttpHandler介面的自定義模塊的情況,IIS7.0在同一個服務器上能夠同時支持兩種模式的應用程式,

 

10. 記憶體分配

 CLR管理的記憶體主要有三塊, 也就是我們物件實體分配在這三塊記憶體區域:
1.     執行緒的堆疊: 用于分配值型別實體, 由作業系統管理, 不受垃圾收集器的控制, 當值型別實體所在的方法結束, 其存盤單元自動釋放. 堆疊的執行效率高, 但容量有限.
2.     GC堆: 用于分配小物件實體(小于85000位元組的參考型別). 但有記憶體分配或垃圾回收時, 垃圾收集器可能會對GC堆壓縮. 
3.     LOH堆: 用于分配大物件實體(大于85000位元組的參考型別大物件實體), LOH堆不會被壓縮, 只有在GC堆全部被回收后, LOH堆才會被回收.
我們常說的托管堆就是指GC堆和LOH堆

 

11.sizeof:用來計算型別的大小,單位是位元組,sizeof只適用于值型別,并且需要在unsafe背景關系環境中使用

class Program

{

static void Main(string[] args)

{

MyUglyClass m = new MyUglyClass();

m.myChar1 = 'd';

m.myInt = 25;

m.myChar2 = 'a';

unsafe

{

Console.WriteLine(sizeof(MyUglyClass));

}

 

}

}

運行,繼續報錯:"不安全代碼只會在使用 /unsafe 編譯的情況下出現",
解決方法是:右鍵專案→屬性→生成→勾選"允許不安全代碼"→保存,再次運行,結果:12,

 

12.Filter?Attribute?

Filter:根據用途和執行時機的不同,MVC主要分為以下5種型別的過慮器:ResourceFilter、AuthorizationFilter、ActionFilter、ExceptionFilter、ResultFilter.

IMvcFilter只有兩個只讀屬性成員Order(排序,正序)和AllowMultiple(允許多個);

 

Attribute:ActionFilterAttribute, AuthorizationFilterAttribute,有2個屬性,執行前,執行后,

 

13. IHttpModule與IHttpHandler

先IHttpModule,后IHttpHandler.

 IHttpModule:無論客戶端請求的是什么檔案,都會呼叫到它;例如aspx,rar,html的請求,對請求進行預處理,如驗證、修改、過濾等等,同時也可以對回應進行處理 

 

IHttpHandler:,只有ASP.net注冊過的檔案型別(例如aspx,asmx等等)才會輪到呼叫它,按照你的請求生成回應的內容,是HTTP請求的處理中心,真正地對客戶端請求的服務器頁面做出編譯和執行,并將處理過后的資訊附加在HTTP請求資訊流中再次回傳到HttpModule中

 

.netcore

1.ASP net core哪些好的功能

遵循了dot net的標準架構, 可以運行于多個作業系統上,它更快,更容易配置,更加模塊化,可擴展性更強,

第一是依賴注入

第二是日志系統架構

第三是引入了一個跨平臺的網路服務器,kestrel,可以沒有iis, apache和nginx就可以單獨運行,開源,linux安裝一個runtime就行,

第四是可以使用命令列創建應用

第五是更好的支持異步編程

第六是使用start up來注冊服務

 

2.dot net core工程里面有多少個工程檔案?

global, launch setting,app settings,bundle config,bower, package,

 

  1. 描述一下依賴注入后的服務生命周期,好處?

依賴注入減少了一個類和其他類的耦合并且減少了依賴.提升了代碼的可復用性

 

在dot net core中,我們不需要關心如何釋放這些服務, 因為系統會幫我們釋放掉,有三種服務的生命周期,

控制反轉IOC,去掉對細節的依賴,方便擴展,減少影響范圍:甚至轉移到組態檔依賴,只需要改組態檔就行了, 屏蔽細節.ioc(控制反轉)是一種設計模式(容器中創建實體),DI(依賴注入)是實作手段,除了建構式注入(ServicesCollection支持,后兩個不支持),還有屬性注入,方法注入

services.AddTransient<ITestServiceC, TestServiceC>();//瞬時,即時構造(常用)

services.AddSingleton<ITestServiceC, TestServiceC>();//單例-全程唯一(不建議太多單例,一般只在(組態檔,執行緒池 等)需要的地方才單例)

services.AddScoped<ITestServiceC, TestServiceC>();//作用域單例,本質是容器實體單例(一個http請求就是一個單例,這說明一次請求會創建一個容器實體)例如 事務,資料庫連接,主要適用于一次請求只需要一個物件,多個請求需要多個物件

需要安裝AutoFac 等包,配置Program,把默認的Ioc容器 ServicesCollections替換成 Autofac

 

4. startup中的 ConfigureServices和Configure的區別

ConfigureServices:用于配置依賴注入以在運行時根據依賴關系創建物件

Configure: 用于配置中間件(middleware)以構建請求處理流水線

 

5. .netcore負載均衡

        1. 轉接頭中間件

       2. Nginx

前端

1.在瀏覽器輸入網址,Enter之后發生了什么?

輸入網址后DNS(域名決議協議)將網址轉換成對應的IP,然后網路在路由表中查找最適合一條路由連接到對應的服務器ip,也就是剛剛轉換的ip.此時,傳輸層tcp經過三次握手后建立連接,服務器收到http請求(get/post)等后,進行相應的處理并把結果資料回傳到瀏覽器上,此時輸入網址后對應的資訊就會顯示出來.

  1. 前端優化

減少 HTTP 請求的次數,啟用瀏覽器快取,css檔案放 在<head>里面,js檔案盡量放在頁面的底部,使用壓縮的css和js檔案,如果條件允許,盡量使用CDN的方式參考檔案

盡量避免重復的css,盡量減少js里面回圈的次數

 

3. Http協議

1、http協議是瀏覽器和服務器雙方共同遵循的規范,是一種基于TCP/IP應用層協議

2、http是一種典型的請求/回應協議,客戶端發送請求,請求的內容以及引數存放到請求報文里面,服務端收到請求后,做出回應,

回傳回應的結果放到回應報文里面,通過F12可以查看請求報文和回應報文

3、http協議是”無狀態”的,當客戶端向服務端發送一次http請求后,服務端收到請求然后回傳給客戶端相應的結果,服務器會立即斷開連接并釋放資源,

在實際開發程序中,我們有時需要“保持”這種狀態,所以衍生出了Session/Cookie這些技術,

4、http請求的方式主要有get/post,http狀態碼:200(請求成功)、404(請求的資源不存在)、403(禁止訪問)、5xx(服務端錯誤)

 

4. tcp、ip三次握手,udp

第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SEND狀態,等待服務器確認;

   第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,

完成三次握手,客戶端與服務器開始傳送資料,

tcp是面向鏈接,三次握手是為了保持連接性,

udp是非面相鏈接,就是發送時不需要和對方建立連接,也不需要理會對方是否接收,udp發送的資料內容,用戶是可以進行驗證的,

 

5. 4層協議和7層協議

7層協議:OSI是一個開放性的通信系統互連參考模型,它是一個定義得非常好的協議規范,上到下分別是 7 應用層(HTTP,FTP,NFS,SMTP等) 6 表示層(定義資料格式及加密) 5 會話層(定義了如何開始、控制和結束一個會話,,例如RPC) 4 傳輸層 (TCP,UDP)3 網路層 (對端到端的包傳輸進行定義,例如IP)2 資料鏈路層 (定義了在單個鏈路上如何傳輸資料,示例:ATM,FDDI等)1 物理層(有關傳輸介質的特性)

4層協議:應用層,傳輸層,網路層,資料鏈路層(光纖等)

 

6. Nginx

一款免費的、自由的、開源的、高性能HTTP服務器和反向代理服務器,高性能、穩定性、豐富的功能、簡單的配置和低資源消耗,本身就可以托管網站(類似于Tomcat一樣),進行Http服務處理,也可以作為反向代理服務器 、負載均衡器和HTTP快取,跨平臺,配置例外簡單,非阻塞、高并發連接,Nginx代理和后端Web服務器間無需長連接,Nginx接收用戶請求是異步的,網路依賴性低,可以實施負載均衡(輪詢,權重), 記憶體消耗小、成本低廉節省帶寬、穩定性高等.

反向代理服務器可以隱藏源服務器的存在和特征,它充當互聯網云和web服務器之間的中間層,這對于安全方面來說是很好的,特別是當您使用web托管服務時

最佳用法是在網路上部署動態HTTP內容,使用SCGI、WSGI應用程式服務器、用于腳本的FastCGI處理程式,它還可以作為負載均衡器,

 

 

7. MVC如何保持session?

設定session的過期時間

 

8.301,302,303分別是什么意思

301 Moved Permanently(永久移動)

302臨時重定向,client發送post請求,server回傳URL和302,如果用戶確認,client發送post請求,很多瀏覽器發送get請求,

303臨時重定向,發送Post請求,收到303,直接重定向為get,發送get請求,不需要向用戶確認

307臨時重定向,客戶端發送post請求回傳307時,瀏覽器詢問用戶是否再次post

以前瀏覽器碰到302,都是按303那樣處理的,

9. cookie的 path,domain?

domain表示的是cookie所在的域, 默認為請求的地址,如網址為www.test.com/test/test.aspx,那么domain默認為www.test.com.

path表示cookie所在的目錄,asp.net默認為/,就是根目錄.

瀏覽器會將domain和path都相同的cookie保存在一個檔案里,cookie間用*隔開

10. http頭資訊

HostOrigin(請求的來源域名和埠號 (跨域請求時,瀏覽器會自動帶上這個頭資訊), Referer,User-Agent,CookieAcceptAccept-EncodingAccept-LanguageConnectionDateExpiresCache-ControlLast-ModifiedContent-Type

 

11. js中的系統物件,資料型別和函式名稱

系統物件:Object、Function、Array、String、Boolean、Number、Date,ERROR,Global,Math 

資料型別: null , undefined, boolean,number,string, 參考型別(object、array、function), Symbol(這種型別的物件永不相等即始創建的時候傳入相同的值,可以解決屬性名沖突的問題,做為標記,)

函式名稱: alert, confirm, eval, isNaN, parseFloat, parseInt, join, reverse
,sort, getDate, abs,ceil,floor,max,min,random,round,charAt,indexOf,length,

 

資料庫

1.sql陳述句慢,你怎么除錯出來?怎么解決?

Sql執行計劃,mysql是explain

索引,首先考慮在 where及order by涉及的列上建索引

使用“臨時表”暫存中間結果,將臨時結果暫存在臨時表,這可以避免程式中多次掃描主表,也大大減少了程式執行中“共享鎖”阻塞“更新鎖”,減少了阻塞,提高了并發性能

不要把SQL陳述句寫得太復雜,一般,將一個Select陳述句的結果作為子集,然后從該子集中再進行查詢,這種一層嵌套陳述句還是比較常見的,但是根據經驗,超過3層嵌套,查詢優化器就很容易給出錯誤的執行計劃

使用like進行模糊查詢時,除非必要,否則不要在關鍵詞前加%

盡量避免在where中對null判斷、!=或<>、or 來連接條件(適用union all)、in (exists 代替 in)和 not in 也要慎用(使用between)、避免在 where 子句中對欄位進行運算式操作,函式操作,否則就是全表掃描

2.資料庫移植,就是sql,換成mysql,底層怎么做

使用dapper,呼叫的介面不改變,將資料映射成 xml,就可以了,

 

3.資料庫鎖有幾種

共享(S)鎖:多個事務可封鎖一個共享頁;任何事務都不能修改該頁; 通常是該頁被讀取完畢,S鎖立即被釋放,

排它(X)鎖:僅允許一個事務封鎖此頁;其他任何事務必須等到X鎖被釋放才能對該頁進行訪問;X鎖一直到事務結束才能被釋放,

更新(U)鎖:用來預定要對此頁施加X鎖,它允許其他事務讀,但不允許再施加U鎖或X鎖;當被讀取的頁將要被更新時,則升級為X鎖;U鎖一直到事務結束時才能被釋放,

4.聚集索引和非聚集索引:

聚集索引確定表中資料的物理順序,類似于電話簿,分配一塊連續的空間,由于聚集索引規定資料在表中的物理存盤順序,因此一個表只能包含一個聚集索引

非聚集索引 隨機分配一塊空間,資料存盤在一個地方,索引存盤在另一個地方,索引帶有指標指向資料的存盤位置,

 

5.事務的特性,隔離級別 ?大多數資料庫默認的事務隔離級別是Read committed

1. 原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾

2. 一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處于一致性狀態,

3. 隔離性是當多個用戶并發訪問資料庫時,比如操作同一張表時,資料庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個并發事務之間要相互隔離,

4. 持久性是指一個事務一旦被提交了,那么對資料庫中的資料的改變就是永久性的

隔離級別

1. Read uncommitted讀未提交,就是一個事務可以讀取另一個未提交事務的資料,

2. Read committed 讀提交,顧名思義,就是一個事務要等另一個事務提交后才能讀取資料

3. Repeatable read 重復讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作

4. Serializable 序列化Serializable 是最高的事務隔離級別,在該級別下,事務串行化順序執行,可以避免臟讀、不可重復讀與幻讀,但是這種事務隔離級別效率低下,比較耗資料庫性能,一般不使用,

 

6. MongoDB:定義:開源,高性能,無模式的檔案資料庫,應用場景:解決 高并發,海量資料的訪問和存盤,對資料庫的高擴展性和高可用性,具體場景: 社交,游戲,物流,物聯網,直播等等,缺點:對事務性的支持不大友好,沒有復雜的join,

7. show engines ; 查詢mysql資料庫支持的引擎是MyISAM(性能優先,表鎖) 還是InnoDB(默認,事務優先,行鎖)

8. 資料庫三大范式:1 列不可再分 2 必須有主鍵 3表的非主屬性不能依賴其他表的非主屬性外鍵約束

9.索引是一種特殊的檔案(InnoDB資料表上的索引是表空間的一個組成部分),它們包含著對資料表里所有記錄的參考指標,資料庫索引,是資料庫管理系統中一個排序的資料結構,以協助快速查詢、更新資料庫表中資料,索引的實作通常使用B樹及其變種B+樹,

mysql 使用Explain 模擬優化器執行SQL陳述句,分析查詢陳述句或是結構的性能瓶頸, id越大執行優先級越高,id相同則從上往下執行,id為NULL最后執行 查詢索引資訊,可以設定慢查詢日志,來查看具體慢的sql.

Explain select * from user

 

主鍵索引,唯一索引,普通索引,全文索引 4種索引

10. 設計投票系統需要的主要幾張表

 

11. 多表連接查詢中有幾種連接方式

 

left join(左聯接) 回傳包括左表中的所有記錄和右表中聯結欄位相等的記錄 

right join(右聯接) 回傳包括右表中的所有記錄和左表中聯結欄位相等的記錄
inner join(等值連接) 只回傳兩個表中聯結欄位相等的行

cross join(交叉連接) 沒有where條件的交叉連接將產生連接表所涉及的笛卡爾積,即TableA的行數*TableB的行數的結果集

full join(全連接) 只要多表中某個表存在匹配的行,就回傳行資料

union(結果集合) 將多張表的select陳述句獲得的結果集合并在一起,資料不能重復,

union all(結果集合) 將多張表的select陳述句獲得的結果集合并在一起,資料可以重復,

12. 資料庫讀寫分離的鏈接怎么寫

        寫只有一個鏈接,往主庫寫入,

        讀有多個鏈接,配置的時候,輪詢/權重/隨機 三種演算法獲取其中一個鏈接字串,讀取從庫資料,

13. mysql和mssql有什么區別,關鍵字有什么不同?

MySQL是一個免費的、bai開放源du代碼的SQL資料庫,安裝特別簡單,

mysql不支持nchar,nvarchar,ntext型別,mysql的遞增陳述句是AUTO_INCREMENT,mysql需要為表指定存盤型別,關鍵字是`包裹,日期是cur_date(),當前完整時間是 now(),只支持一種存盤引擎,關鍵字 EXPLAIN,Now(),Limit

docker

1.Docker是一個容器化平臺,它以容器的形式將您的應用程式及其所有依賴項打包在一起,以確保您的應用程式在任何環境中無縫運行,沒有環境不一致的情況,我這能用,你那用不了,類似于發布一個app.

2.Docker鏡像是Docker容器的源代碼,Docker鏡像用于創建容器,使用build命令創建鏡像,

3.Docker容器包括應用程式及其所有依賴項,作為作業系統的獨立行程運行,

4.Docker容器:四種狀態:運行、已暫停、重新啟動、已退出,

5.Dockerfile中最常見的指令

FROM:指定基礎鏡像
LABEL:功能是為鏡像指定標簽
RUN:運行指定的命令
CMD:容器啟動時要運行的命令

6.docker常用命令

docker pull 拉取或者更新指定鏡像
docker push 將鏡像推送至遠程倉庫
docker rm 洗掉容器
docker rmi 洗掉鏡像
docker images 列出所有鏡像
docker ps 列出所有容器

  7. 容器與主機之間的資料拷貝命令: 主機到容器:docker cp /www 96f7f14e99ab:/www/

  8. 啟動nginx容器(隨機埠映射),并掛載本地檔案目錄到容器html的命令

      docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx

  9. 解釋一下dockerfile的ONBUILD指令

dockerfile是一個用來構建鏡像的文本檔案,文本內容包含了一條條構建鏡像所需的指令和說明,

當鏡像用作另一個鏡像構建的基礎時,ONBUILD指令向鏡像添加將在稍后執行的觸發指令,如果要構建將用作構建其他鏡像的基礎的鏡像(例如,可以使用特定于用戶的配置自定義的應用程式構建環境或守護程式),這將非常有用

  10. Docker Swarm是Docker的本機群集,它將Docker主機池轉變為單個虛擬Docker主機,Docker Swarm提供標準的Docker API,任何已經與Docker守護行程通信的工具都可以使用Swarm透明地擴展到多個主機,

  11. 如何在生產中監控Docker

      Docker提供docker stats和docker事件等工具來監控生產中的Docker,我們可以使用這些命令獲取重要統計資料的報告,

Docker統計資料:當我們使用容器ID呼叫docker stats時,我們獲得容器的CPU,記憶體使用情況等,它類似于Linux中的top命令,
Docker事件:Docker事件是一個命令,用于查看Docker守護程式中正在進行的活動流,
一些常見的Docker事件是:attach,commit,die,detach,rename,destroy等,我們還可以使用各種選項來限制或過濾我們感興趣的事件

Linux

基本上都是一些面試常問到的題目

1、說一些你比較常用linux指令

  1.1、ls/ll、cd、mkdir、rm-rf、cp、mv、ps -ef | grep xxx、kill、free-m、tar -xvf file.tar、(說那么十幾二十來個估計差不多了)

2、查看行程(例:如何查看所有xx行程)

  2.1、ps -ef | grep xxx

  2.2、ps -aux | grep xxx(-aux顯示所有狀態)

3、殺掉行程

  3.1、kill  -9[PID]    ---(PID用查看行程的方式查找)

4、啟動/停止服務

  4.1、cd到bin目錄cd/

  4.2、./startup.sh   --打開(先確保有足夠的權限)

  4.3、./shutdown.sh  ---關閉

5、查看日志

  5.1、cd到服務器的logs目錄(里面有xx.out檔案)

  5.2、tail -f xx.out  --此時螢屏上實時更新日志,ctr+c停止

  5.3、查看最后100行日志 tail -100 xx.out 

  5.4、查看關鍵字附件的日志,如:cat filename | grep -C 5 '關鍵字'(關鍵字前后五行,B表示前,A表示后,C表示前后) ----使用不多

  5.5、還有vi查詢啥的,用的也不多,

6、查看埠:(如查看某個埠是否被占用)

  6.1、netstat -anp | grep 埠號(狀態為LISTEN表示被占用)

7、查找檔案

  7.1、查找大小超過xx的檔案: find . -type f -size +xxk  -----(find . -type f -mtime -1 -size +100k -size-400k)--查區間大小的檔案

  7.2、通過檔案名:find / -name xxxx    ---整個硬碟查找

  其余的基本上不常用

8、vim(vi)編輯器  

  有命令模式、輸入模式、末行模式三種模式,
  命令模式:查找內容(/abc、跳轉到指定行(20gg)、跳轉到尾行(G)、跳轉到首行(gg)、洗掉行(dd)、插入行(o)、復制粘貼(yy,p)
  輸入模式:編輯檔案內容
  末行模式:保存退出(wq)、強制退出(q!)、顯示檔案行號(set number)
  在命令模式下,輸入a或i即可切換到輸入模式,輸入冒號(:)即可切換到末行模式;在輸入模式和末行模式下,按esc鍵切換到命令模式

 

公眾號

1優點

微信用戶量大,開發成本低 ,是一個開放性平臺,形成倍訓:一站式服務,效益轉化率高

 

2 OAuth2.0認證流程?與微信OAuth2.0認證流程有什么不同?
1)OAuth2.0處理流程
a.獲得用戶許可,得到授權碼code
b.根據code 獲得access token
c.通過access token獲得openid
d.通過access token 和openid呼叫API,獲得用戶授權資訊
2)微信認證流程(將bc合并了)
微信認證只需要獲得用戶許可后,獲得授權碼code,
就可以通過code,同時獲得access token以及用戶的openid,
然后根據access token 和openid呼叫API,獲得用戶授權資訊

 

3 access_token有效時間只有2個小時,并且每天只能請求微信服務器獲取access_token 2000次,該問題是如何處理的?

將acess_token存在資料庫或檔案或快取每隔一定時間(小于7200s即可),再去獲取.

 

4微信有哪九大高級介面

語音識別,客服介面,OAuth2.0網頁授權,生成帶引數二維碼,獲取用戶地理位置,獲取用戶基本資訊,獲取關注者串列,用戶分組介面,上傳下載多媒體

 

5 微信支付流程(需要配置微信支付異步通知回呼地址)

1.用戶在商戶APP中選擇商品,提交訂單,選擇微信支付

2. 商戶后臺收到用戶支付單,呼叫微信支付統一下單介面

3. 統一下單介面回傳正常的prepay_id,再按簽名規范重新生成簽名后,將資料傳輸給APP

4. 商戶APP調起微信支付

5. 商戶后臺接收支付通知(小程式沒有支付異步通知回呼地址)

 

小程式

1你使用過哪些方法,來提高微信小程式的應用速度

提高頁面加載速度

減少默認data的大小

組件化方案

 

2優勢

無需下載,通過搜索和掃一掃就可以打開,

良好的用戶體驗:打開速度快,

安卓上可以添加到桌面,

為用戶提供良好的安全保障,小程式的發布,微信擁有一套嚴格的審查流程,不能通過審查的小程式是無法發布到線上的,

劣勢:

限制較多,頁面大小不能超過2M

樣式單一,小程式的部分組件已經是成型的了,樣式不可以修改

推廣面窄,不能分享朋友圈,只能通過分享給朋友,附近小程式推廣,其中附近小程式也受到微信的限制,

 

3原理

微信小程式采用JavaScript、WXML、WXSS三種技術進行開發,JavaScript的代碼是運行在微信App中的,WXML只能使用微信提供的現有標簽,

微信的架構,是資料驅動的架構模式,它的UI和資料是分離的,所有的頁面更新,都需要通過對資料的更改來實作,

小程式分為兩個部分webview和appService,其中webview主要用來展現UI,appService用來處理業務邏輯、資料及介面呼叫,它們在兩個行程中運行,通過系統層JSBridge實作通信,實作UI的渲染、事件的處理

 

 4簡述下 wx.navigateTo()wx.redirectTo()wx.switchTab()wx.navigateBack()wx.reLaunch()的區別 

wx.navigateTo():保留當前頁面,跳轉到應用內的某個頁面,但是不能跳到 tabbar 頁面

wx.redirectTo():關閉當前頁面,跳轉到應用內的某個頁面,但是不允許跳轉到 tabbar 頁面

wx.switchTab():跳轉到 TabBar 頁面,并關閉其他所有非 tabBar 頁面

wx.navigateBack()關閉當前頁面,回傳上一頁面或多級頁面,可通過 getCurrentPages() 獲取當前的頁面堆疊,決定需要回傳幾層

wx.reLaunch():關閉所有頁面,打開到應用內的某個頁面

轉載請標注來源-已哥們經有把我的面試總結,弄到自己網站里,換取打賞了,無語,,,,,,

  名師大將莫自牢,千軍萬馬避藍貓!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/203319.html

標籤:其他

上一篇:升級java11后,maven命令打包報錯

下一篇:快速排序為什么這么快?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more