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.mzph.cn/news/396313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mapper mysql 主键_实现通用mapper主键策略兼容mysql和oracle

【原创文章,转载请注明原文章地址,谢谢!】1.直接用官方提供的注解方法是无法达到兼容效果的2.跟踪源码看看是否有其他方法3.这里有个genSql,可以看一下这个类4.创建一个自定义的处理类实现GenSql(代码中是我实际项目中用到的策略&…

java 面试题 由浅入深_面试官由浅入深的面试套路

阅读文本大概需要3分钟。从上图看来面试官面试是有套路的,一不小心就一直被套路。0x01:Thread面试官:创建线程有哪几种方式?应聘者:继承Thread类、实现Runable接口、使用j.u.c中的线程池面试官:继承Thread类…

java string转long报错_java.lang.Integer cannot be cast to java.lang.Long解决办法

你好我是辰兮,本次是项目遇到的java.lang.Integer cannot be cast to java.lang.Long异常以及相对应的解决方案。文章目录一、实战问题用postman测试数据报错,类型转换异常!如何将Integer类型转换成长整形 ?先转成String型&#x…

pyqt 界面关闭信号_木辛老师的编程课堂之Python和Qt实战慕课软件开发:增加关闭按钮...

软件实战开始,快速提供编程能力;通过实战,分析产品需求,梳理设计需求,提升项目分析和架构的能力。快点跟着木辛老师一起学习吧!请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Python编程…

最全面的几何画板实用教程视频免费下载

不同的选择就会有不同的人生夜,这里小编为奋斗在教学一线的老师们送个大福利,这也是老师们充实自己的好去处。作为数学老师一枚,在平时的教学中应该用到很多教学辅助软件,而几何画板就是其中一款。众所周知,几何画板是…

Redis(1):简介

2019独角兽企业重金招聘Python工程师标准>>> Redis之父Salvatore Sanfilippo于2009年将Redis开源。VMware公司从2010年开始赞助Redis的开发,Salvatore Sanfilippo和Pieter Noordhuis(另一名主要的代码贡献者)同年加入VMware,全职开发Redis。R…

java中类型转换的造型_Java总结篇系列:类型转换/造型

Java中,经常可以遇到类型转换的场景,从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等,随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。首先,来了解下数据类型的基本理解&…

Jenkins --SVN

项目名称:XXX 源码管理: None 发布之前,获取源码 编译获取后的代码,指定vs版本 将源码拷贝至jenkins工作控件 d:\jenkins\workspace\.. 删除指定文件 用管理员命令 将Jenkins工作空间的代码发布至指定路径转载于:https://www.cnbl…

keil5图标变成白色_电脑桌面图标全部变成白色的解决办法

系统桌面图标全部变成一个样子的白色图标,这是怎么回事?电脑桌面的图标全部变成白色该如何解决?下面为大家解答。解决办法:1.首先尝试最简单的方法操作看看,登录到系统桌面,右键桌面空白处点击打开“个性化…

epoll哪些触发模式_5.epoll的水平触发和边缘触发

本篇是多路复用的第五篇,主要来讲解epoll的水平触发和边缘触发是怎么回事。一、概念介绍EPOLL事件有两种模型,水平出发和边缘触发,如下所示:1. Level Triggered (LT) 水平触发1. socket接收缓冲区不为空 有数据可读 读事件一直触发…

HC系列蓝牙模块连接单片机与电脑,传输数据(蓝牙心电测试)

毕设做无线心电监护。有线的做出来了,AD8232MCULabVIEW上位机。pcb还没时间搞,这个9*7*2.5cm拿来测试能用。 自己做了AD8232的模拟前端,打的板子还没到没法测试。 虽然比较水,但看起来任务也完成的差不多了,于是就想加…

java实现社交平台_GitHub - akpaul9527/symphony: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。...

下一代的社区系统,为未来而构建简介Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它:实现了面向内容讨论的论坛实现了面向知识问答的社区包含了面向用户分享、交友、游戏的社交网络100% 开源动机很多社区论坛系统…

精通java益处_你真的精通Java吗?

简历和自我介绍上经常能够读到“精通Java”这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点、不能给自己加分了。可是事实真是这样吗?对于语言的学习,我有一种观点,一是纵向,即…

python 遍历usb设备_python程序员教你写脚本玩微信跳一跳,只要有耐心,你就是王者!...

温馨提示:微信已经开始检测分数异常高的情况了,请大家不要跑太高哦游戏模式这是一个 2.5D 插画风格的益智游戏,玩家可以通过按压屏幕时间的长短来控制这个「小人」跳跃的距离。可能刚开始上手的时候,因为时间距离之间的关系把握不…

一个电脑同时运行 64bit 和 32bit 的eclipse 如何匹配 jdk环境

一个电脑同时运行 64bit 和 32bit 的 eclipse 如何匹配 jdk环境 1 eclipse 分 64bit 和 32bit 两种. 64bit的eclipse 只能搭配 64bit的 jdk 使用. 32bit的eclipse 只能搭配 32bit的 jdk 使用. 2 电脑上安装好 32bit 和 64bit 的 jdk ,分别安装在不同的路径中. 比如我的3…

2016/4/19 ①单个文件上传 ②上传图片后 预览图片

1&#xff0c;f1.php <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body> <!-- 作业:在网上找上传图片预览的代码 上传服务器 再预览--> <fo…

Android项目里集成Cordova详解

2019独角兽企业重金招聘Python工程师标准>>> 一 安装nodejs二 cmd创建Android项目三 导入工程 运行一下四 调用插件五 Android studio环境下将CordovaLib作为依赖导入六 自定义插件七 java类中的一些问题八 在CordovaActivity中添加原生View组件 九 在Fragment里使用…

php 判断浏览器是ie,js判断是否是ie浏览器

怎么去看浏览器的内核等信息 ---- js的全局对象window子属性navigator.userAgent&#xff0c;这个属性是包含了浏览器信息的相关信息&#xff0c;包括我们需要的浏览器内核navigator.userAgent这个值取出来是个字符串&#xff0c;可以通过string的 indexOf方法或者正则匹配来验…

【JAVA基础】一:聊聊笔试常见到的 “==、equal” 比较是否相等的内在差别

开始本文之前&#xff0c;先让我们记住一个口诀&#xff08;这个口诀只针对基础的类比如String、Integer等&#xff0c;如果是自定义的类&#xff0c;需要看equal的具体实现&#xff09;&#xff1a;equal比较其值&#xff0c; 比较地址 这两天在走查代码的时候发现一个童鞋&am…

java 有参数的构造函数如何注入_Spring5参考指南:依赖注入

依赖注入依赖注入就是在Spring创建Bean的时候&#xff0c;去实例化该Bean构造函数所需的参数&#xff0c;或者通过Setter方法去设置该Bean的属性。Spring的依赖注入有两种基于构造函数的依赖注入和基于setter的依赖注入。基于构造函数的依赖注入构造函数的注入是通过构造函数的…