编程语言
文章平均质量分 59
程序员小迷
从前有只猫,它不去抓老鼠,而是想吃面包店的面包,最终它变成了人.
展开
-
语言的标识符
包括关键字、运算符、结束符、注释符等都是TOKEN的一种,词法分析分割出TOKEN最终送给语法分析处理。ALGOL60首创提出BNF范式,上下文无关、支持递归的语法规则表达,极佳地支持编程语言完整性。助您在编程路上越走越好!原创 2024-08-24 10:43:46 · 63 阅读 · 0 评论 -
HTTP2.0 相对 HTTP1.x 的优化点
2.HTTP2.0多路复用通过多个请求 共享一个 TCP 连接的方式,解决了HTTP request层面的 队头阻塞(HOL blocking ,即Head of Line blocking)的问题,即解决了HTTP 1.x中的队头阻塞问题,但TCP层面的队头阻塞问题(由于丢失或延迟的数据包导致重传阻塞)并未解决,基于QUIC(Quick UDP Internet Connections)的HTTP/3基本可以解决队头阻塞问题。HTTP2.0会将所有传输的数据分割为更小的消息和帧,并对它们进行二进制编码。原创 2024-08-24 10:41:49 · 87 阅读 · 0 评论 -
编程语言版本发展
地心说到日心说,再到平行宇宙猜想,不断提醒我们,世界万物都在不断发展变化中,编程语言一样如此。如下列出编程语言发展大版本,小版本可能太多,无法全部列出。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。原创 2024-08-23 19:29:51 · 329 阅读 · 0 评论 -
面向对象设计
通常的认知,面向对象程序设计最早从Simula发展而来,而后的SmallTalk也为面向对象提供了参考。ObjC借用SmallTalk消息的概念,C++扩大发展了OOP技术,为Java/C#等语言提供了坚实的基础。还有其他语言,Module-2提出模块MODULE概念,可以封装子程序和数据结构,限制访问权限,Clu提出了里氏替换原则,也为OOP设计提供了思路。原创 2024-08-23 19:27:56 · 235 阅读 · 0 评论 -
语言闪光点
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。助您在编程路上越走越好!原创 2024-08-22 19:15:15 · 133 阅读 · 0 评论 -
未定义行为
未定义行为的另外一个称呼是”由实现定义”。C语言作为系统级别语言,不能因为不同平台的差异修改C标准,造成标准不”标准”。C语言采用了“渣男”的处理方式->不负责。这造成了移植性的问题,但这不是C语言的错误。int类型长度是多少,C标准未定义。除法和取模如果有负数参与,结果是向上取整还是向下取整由实现定义。Java作为中间件级语言,为了统一,不能像C语言那样给出不确定。比如int就是4字节,而不是像C语言那样,规定至少大小和short一样(这个规定了什么?C#一样也不会给出模棱两可的数据类型。原创 2024-08-22 19:13:29 · 210 阅读 · 0 评论 -
编译环境揭秘
不同平台因为偏好差异,编译环境的准备会有差异。对于MSVC,微软提供简单的VS安装界面,比较省心。在Ubuntu发行版,gcc/make等程序可能不自带,当需要安装这些软件时就需要不少命令。当然比较麻烦,提供了统一的build-essential方便程序员,在Fedora上用development-tools.原创 2024-08-21 19:17:03 · 662 阅读 · 0 评论 -
格式串的奥秘
编程语言毕竟是文本,只在ASCII码内无法表达更多的含义,如果不用新的函数或者关键字,就需要用“转义”的字符串格式来代表特定格式串。这就是格式串的来源。原创 2024-08-21 19:14:55 · 286 阅读 · 0 评论 -
编译器揭秘
从上世纪50年代开始,编程语言五花八门,编译器和解释器层出不穷。此处只列出常见编程语言的编译器和解释器信息,不常见的编程语言有单独文章介绍。原创 2024-08-20 19:13:30 · 839 阅读 · 0 评论 -
选择编程语言
大家真的数一数这个世界上的编程语言,就会知道,其实在某个旮旯拐角,曾经有某位大哥或者大姐,曾经“发明“过编程语言,但是因为一些原因,没办法让世界上所有人了解到,也不会流行开来。可是当人们需要做某个事情的时候,可选的编程语言其实没那么多。原创 2024-08-20 19:10:45 · 357 阅读 · 0 评论 -
编译型语言和解释型语言
但事实上,解释型语言却在计算机发展很早的时期曾经出现过,当然这和前面一段话并不冲突,它是由自身的考虑,也并非为了推广。比如经典的TCC编译器,只需要一个-run参数即可让编译器编译并执行给出结果,本质上,每种编译型语言都可以这样做。原创 2024-08-19 19:17:21 · 197 阅读 · 0 评论 -
古老的编程语言
它和Fortran同被称为上古时期四大编程语言,它对于编程语言的影响力极其深远,几乎后续所有命令式编程语言都受其思想感染,当然包括大家熟知的C/C++/Java/C#/JavaScript等等。事实上,它的实现确实如此。原创 2024-08-19 19:15:39 · 434 阅读 · 0 评论 -
编程语言分类
除了传统按照编程语言代码风格,机器语言、汇编语言和高级语言,也有后来面向过程和面向对象风格差异,还可以按编程模式区分。原创 2024-08-18 10:10:49 · 277 阅读 · 0 评论 -
SPDY是何方神圣
2.多路复用通过多个请求 stream 共享一个 TCP 连接的方式,解决了HTTP request层面的 队头阻塞(HOL blocking ,即Head of Line blocking)的问题,但TCP层面的队头阻塞问题(由于丢失或延迟的数据包导致重传阻塞)并未解决,基于QUIC(Quick UDP Internet Connections)的HTTP/3基本可以解决队头阻塞问题。1.多路复用带来的一个新的问题是:在连接共享的基础上有可能会导致关键请求被阻塞。这可以预加载一些资源,从而减少等待时间。原创 2024-08-18 10:07:27 · 359 阅读 · 0 评论 -
编程语言进化史
编程语言多到你想象不到。原创 2024-08-17 11:19:23 · 856 阅读 · 0 评论 -
HTTP1.1 和 HTTP1.0 的区别
2.HTTP1.1 引入了更多的缓存控制策略,例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match等,这样可以使用更多可供选择的缓存头来控制缓存策略。原创 2024-08-17 11:12:20 · 319 阅读 · 0 评论 -
HTTPS的改进与提升
2. 如果 URL 的协议是 HTTPS,则客户端会打开一条到服务端端口 443(默认)的连接,然后与服务端握手,以二进制格式与服务器交换一些 SSL/TLS 的安全参数,附上加密的 HTTP 请求。助您在编程路上越走越好!原创 2024-08-11 11:41:49 · 419 阅读 · 0 评论 -
SparseArray 你不知道的东西
SparseBooleanArray的value为boolean类型,SparseIntArray的value为int类型,SparseLongArray的value为long类型。2.通过二分法来查询、添加、删除、更新数据。原创 2024-07-21 11:06:32 · 301 阅读 · 0 评论 -
final、const、readonly关键字在不同语言中代表着什么
2.方法默认是final的。3.使用val修饰的变量在初始化后不能被修改,使用var修饰的变量可以被修改。被 final 修饰的类中所有的成员方法都会隐式的定义为 final 方法。1.在C++11及以后的版本中,被final修饰的类不能被继承。原创 2024-06-30 12:27:37 · 530 阅读 · 0 评论 -
面向对象设计的6大原则是何方神圣
使用接口或者抽象类的目的 是制定好规范和契约,而把具体的操作及展现细节的任务交给他们的实现类去完成。建立功能单一的接口,不要建立功能庞大的接口(会导致耦合性增强,增加对不必要的功能的依赖),尽量细化接口,使接口中的方法尽量少。原创 2024-06-29 11:26:33 · 432 阅读 · 0 评论 -
线程池的工作原理
1.线程池中的线程数超过核心线程数时,多余的线程会在空闲一段时间(超过某个阈值keepAliveTime)后被销毁,以减少资源消耗。3.可以通过shutdown()方法来关闭线程池:此方式会等待线程池中的所有任务都执行完成后再关闭线程池。原创 2024-06-23 11:58:23 · 540 阅读 · 0 评论 -
自定义类加载器的来龙去脉
1.采用双亲委派模型的好处是:比如加载位于 rt.jar 包中的类 java.lang.Object,不管是使用哪个类加载器加载这个类,最终都是委托给顶层的启动类加载器(Bootstrap ClassLoader)进行加载,这样就保证了即使使用不同的类加载器最终得到的都是同样一个 Object 对象。2.除了加载类之外,自定义类加载器还可以加载其他类型的资源,例如图片、配置文件等。可以避免重复加载,即父类加载器已经加载了,子类加载器就不需要再次加载。很好的解决了各个类加载器的基础类的统一问题。原创 2024-06-22 11:15:36 · 472 阅读 · 0 评论 -
类加载的初始化阶段的奥秘
初始化阶段是类加载机制(加载,链接(验证,准备,解析),初始化)的最后一步。调用某类的反射方法。在上面 i 是被 static 所修饰的,在准备阶段被赋值为0,在初始化阶段被赋值为1。3.类的初始化只会进行一次,若类已初始化,则不会再初始化。原创 2024-06-16 11:15:18 · 357 阅读 · 0 评论 -
类加载的验证阶段你不知道的东西
2.对整个类加载机制(加载,链接(验证,准备,解析),初始化,使用,卸载)而言,验证阶段是一个很重要但非必须的阶段,如果能够确保代码没有问题,那么就没有必要去验证,毕竟验证需要花费一定时间。魔数、主版本号都是.class 文件里包含的数据信息。原创 2024-06-15 11:14:47 · 562 阅读 · 0 评论 -
类加载器你不知道的东西
类加载器不需要等到某个类被"首次主动使用"时才加载它,JVM 规范允许类加载器在预测到某个类将要被使用时就提前预先加载它。概念:如果一个类加载器收到一个类加载的请求,它首先不会自己加载,而是把这个请求委派给父类加载器。这就叫做双亲委派模型。原创 2024-06-10 14:32:25 · 798 阅读 · 0 评论 -
类加载的奥秘
但数组类与类加载器仍然有很密切的关系,因为数组类的元素类型最终是要靠类加载器去创建加载的。3.数组类的可见性与它的组件类型(即数组的元素类型)的可见性一致,如果组件类型不是引用类型,那数组类的可见性将默认为 public。助您在编程路上越走越好!原创 2024-06-09 11:34:55 · 331 阅读 · 0 评论 -
Java中类初始化的奥秘
使用场景:使用 new 关键字实例化对象、读取一个类的静态字段(被 final 修饰并且已在编译期把结果存入常量池的静态字段除外)、调用一个类的静态方法等。3.当初始化一个类的时候,如果其父类还未进行初始化,则需先触发其父类的初始化。原创 2024-06-08 11:14:28 · 502 阅读 · 0 评论 -
Java的可见性和有序性你真的懂吗
5.final:被 final 修饰的字段在构造器中一旦完成,并且构造器没有把this的引用传递出去( this 引用逃逸时,其他线程有可能通过这个引用访问到"初始化了一半"的对象),那final字段对其他线程就是可见的。助您在编程路上越走越好!原创 2024-06-02 11:41:43 · 311 阅读 · 0 评论 -
CMS和G1谁是赢家
1)专门针对拥有多核处理器和大内存的机器的收集器,旨在满足GC响应时间的延迟可控,并尽可能提高程序的吞吐量。初始标记和重新标记需要暂停应用,并发标记和并发清除可以与应用程序并发执行。2)包含4个阶段:初始标记,并发标记,重新标记,并发清除。原创 2024-06-01 12:06:24 · 569 阅读 · 0 评论 -
永久代你不知道的东西
2.类数据共享:使用JVM的Class Data Sharing(CDS通过将一组核心系统类(如java.lang.String)装载到共享内存中,使这些类可以在多个Java虚拟机之间共享)功能,可以减少永久代的内存占用。助您在编程路上越走越好!原创 2024-05-26 10:02:08 · 533 阅读 · 0 评论 -
Java对象头你不知道的地方
二、第二部分是类型指针Klass Pointer,即指向对象的类的元数据指针,虚拟机通过这个指针确定这个对象是哪个类的实例以及类的字段、方法信息。1.对象头的大小和具体内容会因JVM的实现和对象的具体类型(如数组、普通对象等)的不同而有所不同。原创 2024-05-25 11:22:18 · 375 阅读 · 0 评论 -
批处理加入域
注意:netdom.exe是windows 7之前的系统(Server 2003, XP)上使用的一个实用工具,加不了附件,你们可以到网上下载。@set /p computerName="请输入要加入域的计算机名(域账号名):"原创 2024-05-21 19:39:30 · 2049 阅读 · 0 评论 -
批处理--将指定磁盘根目录所有隐藏的文件(包括文件夹)去除隐藏属性
批处理--将指定磁盘根目录所有隐藏的文件(包括文件夹)去除隐藏属性。如下是实现的脚本:--------------------------------------------------微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。助您在编程路上越走越好!原创 2024-05-20 20:07:06 · 1378 阅读 · 0 评论 -
内存屏障和同步屏障傻傻分不清楚
在大多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能。这是因为在同步区内对变量的写入操作,在离开同步区时就将当前线程内的数据刷新到主内存中,而对数据的读取也不能从缓存读取,只能从主内存中读取,这样就保证了数据的读写有效性。原创 2024-05-19 12:46:47 · 575 阅读 · 0 评论 -
happens-before是何方神圣
1.Java内存模型(Java Memory Model或JMM)里定义的happens-before 规则指的是:用于描述多线程中变量读写等不同操作之间的内存可见性,若操作 A happens-before 操作 B ,那么操作 A 的结果对操作 B 可见。4. 传递规则: 若操作 A happens-before 操作 B,而操作 B 又 happens-before 操作 C,则操作 A happens-before 操作 C。的字节码执行完之后的操作结果对靠后的字节码可见。原创 2024-05-18 10:09:32 · 591 阅读 · 0 评论 -
不同数据类型的内部秘密----编程内幕(2)
可以看到shll左移%cl: 0x20即32位. 有一部分书籍说,左移语句对于超过数据大小比特长度会采用模比特长度的方式得到最终左移的位数,并认为这是编译器的行为. 其实不然,这是指令集的行为.此时,证明了char被提升为int.原创 2024-05-12 12:06:55 · 489 阅读 · 1 评论 -
HashMap 和 Hashtable区别的底层原理
1.HashMap 是先将 key 键的 hashCode 经过扰动函数扰动后得到 hash 值,然后再利用 hash & (length - 1) 的方式(由于 HashMap 的容器容量一定是 2 的 n 次方,所以可以使用 hash & (length- 1) 的方式代替取模的方式计算元素的位置从而提高运算效率)代替取模,得到元素的存储位置。1.HashMap 的 key 和 value 都允许为 null , HashMap 在 key 为 null 的时候,值必须为null。原创 2024-05-12 11:45:46 · 460 阅读 · 0 评论 -
求阶乘n!末尾0的个数溢出了怎么办
6,227,020,800来举例,保存它的值的数据类型为long long,大小为4个字节,最大值为2147483648,用6227020800%2147483648得出的值即为1932053504。的末尾的0的个数应为:n!原创 2024-05-10 19:42:58 · 507 阅读 · 2 评论 -
WebSocket概述
7、HTTP规范要求浏览器将并发连接数限制为每个主机名2个连接,但使用WebSocket时,当握手完成后,该限制就不存在了,因为此时的连接已经不再是HTTP连接了。8、WebSocket协议支持扩展,用户可扩展协议,实现部分自定义的子协议。原创 2024-05-10 19:31:54 · 227 阅读 · 0 评论 -
不要以为C语言很独特!
C语言因Unix名声大噪,Simula奠定了面向对象程序设计的基石,C++博大精深,可提供绝对自由度和犯错的无与伦比的感觉,Java/C#等语言正是在C++巨人的肩膀迅速前行。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。原创 2024-05-09 19:41:55 · 320 阅读 · 1 评论