java有什么壓力_編程語言的心智負擔!你學編程得有多大的壓力快來測試一下...

很多編程語言對比的文章,總喜歡比較各種編程語言的性能、語法、IO模型。本文將從心智負擔這個角度去比較下不同的編程語言和技術。

內存越界

如:C語言、C++(C with class)

C/C++可以直接操作內存,但編程必須要面對內存越界問題。發生內存越界后,程序會直接core dump,開發者需要使用gdb工具分析內存錯誤的原因,如果內存越界是偶發的,比如由于數據同步問題造成,數億次中會出現一次,解決起來非常困難,甚至需要頂級專家才能找到問題原因。

心智負擔:10

現代C++提供了STL庫包含大量容器,另外C++支持引用語法,不再需要直接操作指針,降低了內存錯誤讀寫的風險。使用現代C++的編程風格可以避免此問題。但由于C++沒有完全從語法層面移除指針,不夠徹底。

C/C++程序中經常使用預定義宏實現一些邏輯,導致可讀性變差。有些情況下會嵌套多次宏的使用,展開后變得極其難讀。

心智負擔:6

因此在C/C++中建議使用enum或static inline函數代替宏。

內存管理

如:C語言、C++

C/C++語言,需要手工管理內存,malloc/new申請的內存要與free/delete成對使用。申請的內存忘記釋放,就會出現內存泄漏。

心智負擔:8

Java/PHP/Go等有GC的編程語言,不需要手工管理內存,不會因為代碼錯誤引起內存泄漏。

心智負擔:0

數值類型

C/C++/GO等編程語言,提供了有符號、無符號整型和浮點型,8/16/32/64不同尺寸的整型。編程時需要額外處理,避免數值溢出。

心智負擔:6

PHP/Java等編程語言,默認整數為有符號int64,降低了心智負擔。一般業務項目中很難有超過2^63的數字,不會遇到問題。但如果是做科學計算,int64就難以滿足需求了。在PHP中超過2^63底層會轉為浮點型,計算將丟失精度。

心智負擔:1

而Python整數是不限長度的,可以做任意位數的數值計算。

心智負擔:0

類型約束

Java是靜態強類型編程語言,因此在編程中存在類型約束,某些情況下可能不是特別方便。如JSON序列化。不同類型的變量互相操作時可能需要進行顯式類型轉換。

心智負擔:2

PHP/JS是動態弱類型編程語言,底層自動進行隱式類型轉換。編程更方便。

心智負擔:0。

項目維護

在大型項目,或對已有系統進行代碼重構,以及項目代碼更換開發者時,弱類型帶來可維護性、可讀性的難題,與Java/Go/C++這樣的靜態強類型編程語言在編譯期就可以發現問題。而動態、弱類型語言可能會因為重構或其他維護操作產生運行時錯誤,增加了心智負擔。

心智負擔:5

多線程編程

Java/C++/Go提供了多線程并行編程、無鎖編程,在編程中會存在數據同步問題。因此需要對臨界資源進行加鎖。而錯誤的鎖操作又會帶來,死鎖和熱點爭搶問題。需要開發者具備極高的素質,否則難以做到正確無誤并性能良好,這可能需要耗費大量心智。

心智負擔:10

內存泄漏

除PHP(php-fpm)之外的其他編程語言和技術(包括PHP + Swoole),在服務器端程序中均為長生命周期。對全局/靜態變量操作可能會導致內存或資源句柄泄漏。編程時需要注意。

心智負擔:3

而PHP(php-fpm)是短生命周期的,在請求結束后會立即釋放所有內存和句柄,無需擔心泄漏。

心智負擔:0

IO 超時

同步阻塞IO模型的編程語言和技術,在遇到某個慢IO會導致整個進程或線程掛起。極端情況下會出現所有進程/線程掛起,引起線上服務不可用。開發者需要格外注意設置IO操作的超時時間,避免慢請求帶來進程/線程阻塞。

心智負擔:2

而且異步IO的Go/Node.js/Swoole等無需擔心此問題。

心智負擔:0

匯總

看到這里是不是又有很多感悟了呢~

39f6f69e1d67069fe2e0db5451e1917f.gif

點擊播放 GIF 0.0M

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396313.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么叫有效物理網卡_如何區分虛擬網卡和物理網卡?-阿里云開發者社區

一、什么是物理網卡和虛擬網卡?圖示如下:紅色部分包含VMWare的為虛擬網卡。通常,我們部署VMWare虛擬機、VMSphere虛擬集群、XenCenter虛擬集群是都會涉及虛擬網卡。二、辨別物理網卡和虛擬網卡的應用場景場景一:一般部署虛擬集群的…

算法復雜度的表示法_用簡單的英語算法:時間復雜度和Big-O表示法

算法復雜度的表示法by Michael Olorunnisola通過Michael Olorunnisola 用簡單的英語算法:時間復雜度和Big-O表示法 (Algorithms in plain English: time complexity and Big-O notation) Every good developer has time on their mind. They want to give their us…

Android Studio 開始運行錯誤

/********************************************************************************* Android Studio 開始運行錯誤* 說明:* 打開Android Studio就拋出這個錯誤。* * 2017-4-1 深圳 南…

IOS 計步器

這篇博客介紹的是當前比較流行的“計步器”-只是簡單的知識點 計步器的實現在IOS8開始進行了改變。 但是我會對之前之后的都進行簡單介紹。 IOS 8 - // // ViewController.m // CX 計步器 // // Created by ma c on 16/4/12. // Copyright © 2016年 bjsxt. All rights…

vue學習之二ECMAScript6標準

一、ECMAScript6標準簡述 ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在 2015 年 6 月正式發布了。它的目標,是使得 JavaScript 語言可以用來編寫復雜的大型應用程序,成為企業級開發語言。 1.1E…

抖音吸粉_抖音吸粉5大實用方法首次分享!輕松實現粉絲10000+

抖音,是一款可以拍短視頻的音樂創意短視頻社交軟件,該軟件于2016年9月上線,是一個專注年輕人音樂短視頻社區。用戶可以通過這款軟件選擇歌曲,拍攝音樂短視頻,形成自己的作品。抖音APP僅推出半年,用戶量就突…

mapper mysql 主鍵_實現通用mapper主鍵策略兼容mysql和oracle

【原創文章,轉載請注明原文章地址,謝謝!】1.直接用官方提供的注解方法是無法達到兼容效果的2.跟蹤源碼看看是否有其他方法3.這里有個genSql,可以看一下這個類4.創建一個自定義的處理類實現GenSql(代碼中是我實際項目中用到的策略&…

權限分配界面 純手工 僅用到bootstrap的架構 以及 c標簽

<div class"form-group"> <div class"row"> <label class"col-sm-2 control-label">配置權限</label> <div class"col-sm-10"> <c:forEach var"m" items…

數據管理與數據庫 大學課程_根據數據顯示的50種最佳免費在線大學課程

數據管理與數據庫 大學課程When I launched Class Central back in November 2011, there were around 18 or so free online courses, and almost all of them were from Stanford.當我在2011年11月推出Class Central時&#xff0c;大約有18項免費在線課程&#xff0c;幾乎所有…

每天一個linux命令(12):more命令

more命令&#xff0c;功能類似 cat &#xff0c;cat命令是整個文件的內容從上到下顯示在屏幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀&#xff0c;而最基本的指令就是按空白鍵&#xff08;space&#xff09;就往下一頁顯示&#xff0c;按 b 鍵就會往回&#xff08;back&…

java 面試題 由淺入深_面試官由淺入深的面試套路

閱讀文本大概需要3分鐘。從上圖看來面試官面試是有套路的&#xff0c;一不小心就一直被套路。0x01&#xff1a;Thread面試官&#xff1a;創建線程有哪幾種方式&#xff1f;應聘者&#xff1a;繼承Thread類、實現Runable接口、使用j.u.c中的線程池面試官&#xff1a;繼承Thread類…

怎么用centos7運行c語言程序_centos如何編譯c語言代碼

centos如何編譯c語言代碼,文件,選項,作用,鏈接,程序 centos如何編譯c語言代碼 易采站長站,站長之家為您整理了centos如何編譯c語言代碼的相關內容。 編譯c,c++代碼 安裝gcc 1、使用如下命令查詢 centos 官方gcc的所有包:yum -list gcc* 可安裝的軟件包gcc.x86_64gcc-c++.x86…

第四篇:基本數據類型及用法(1)

字符串&#xff08;str型&#xff09; -可以做加法&#xff0c;乘法 乘法例&#xff1a; n1"alex" n2n1*3 print(n2) #結果&#xff1a;alexalexalex -首字母大寫: capitalize() -所有字母變小寫: casefold()、lower() #casefold更牛&#xff0c;很多未知的對應關系也…

Android Studio 錯誤集

錯誤列表與解決方案: 1.Android studio Gradle project sync failed Android studio 構建項目出錯 Error:Unable to start the daemon process: could not reserve enough space for object heap.Please assign more memory to Gradle in the projects gradle.properties file.…

需求簡報_代碼簡報:我如何通過做自己喜歡的事情來獲得頂級技術實習

需求簡報Here are three stories we published this week that are worth your time:這是我們本周發布的三個值得您關注的故事&#xff1a; How I landed a top-tier tech internship by doing something I love: 7 minute read 我如何通過做自己喜歡的事情獲得一流的技術實習…

review what i studied `date` - 2017-3-31

在11 月份內&#xff0c;每天的早上6 點到12 點中&#xff0c;每隔2 小時執行一次/usr/bin/httpd.sh 怎么實現0 6-12/2 * 11 * /usr/bin/httpd.shNginx中的ip_hash是指講一個地址的請求永久分發至后端的一臺RealServer&#xff0c;直至這臺RealServer宕機Zabbix和Nagios的工作原…

java string轉long報錯_java.lang.Integer cannot be cast to java.lang.Long解決辦法

你好我是辰兮&#xff0c;本次是項目遇到的java.lang.Integer cannot be cast to java.lang.Long異常以及相對應的解決方案。文章目錄一、實戰問題用postman測試數據報錯&#xff0c;類型轉換異常&#xff01;如何將Integer類型轉換成長整形 &#xff1f;先轉成String型&#x…

pyqt 界面關閉信號_木辛老師的編程課堂之Python和Qt實戰慕課軟件開發:增加關閉按鈕...

軟件實戰開始&#xff0c;快速提供編程能力&#xff1b;通過實戰&#xff0c;分析產品需求&#xff0c;梳理設計需求&#xff0c;提升項目分析和架構的能力。快點跟著木辛老師一起學習吧&#xff01;請點擊右上角“關注”按鈕關注我們喲&#xff1a;跟著木辛老師學習Python編程…

從零開始nodejs系列文章

http://blog.fens.me/series-nodejs/轉載于:https://www.cnblogs.com/chinafbi/p/5394482.html

Leetcode589.N-ary Tree Preorder TraversalN叉樹的前序遍歷

給定一個 N 叉樹&#xff0c;返回其節點值的前序遍歷。 class Node { public:int val;vector<Node*> children;Node() {}Node(int _val, vector<Node*> _children) {val _val;children _children;} };//遞歸 class Solution { public:vector<int> res;vect…