程序员

【答疑解惑】Java类的加载顺序

早过忘川 提交于 2020-03-08 20:19:18
版权声明: 本文为北京尚学堂原创文章,未经允许不得转载。 Java类的初始化顺序这个问题经常出现在面试题中,这个面试题设计的知识有类、对象、static关键字、初始化函数、类的加载顺序,咱们一个一个来说。 类: 类描述了具有相同特性(数据元素)和行为(功能)的对象集合,也是一个数据类型。比如说动物,它有重量、大小的特征(数据元素),也有移动、吃的行为(功能)。 对象: 对象是具有状态、行为和标识的是上面类的一个实例。每一个对象都有内部数据(它描述该对象的状态)和方法(它产生行为),并且每一个对象都可以与其他对象区分开来,就是一个对象在内存中都有一个唯一的地址。在Java中对象都必须通过new来产生。更多精彩内容关注微信公众号:北京尚学堂。 static: static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。它是属于类不属于对象。 初始化函数: 也就是构造器,构造器名称必须与类名完全相同,没有返回值。没有参数的构造器叫做默认构造器,你在不重载情况下都是调用的默认构造器。更多精彩内容关注微信公众号:北京尚学堂。 类的加载顺序: static块和对象:无论写在类的前面还是后面都会先执行,多个静态块或者对象执行顺序与写的顺序一致,写在前面的先执行; 非静态块和对象:按照在类中写的先后顺序执行; 初始化函数;​​ 如果你的目标是就业

堆和栈的区别

落爺英雄遲暮 提交于 2020-03-08 15:03:21
一般认为在c中分为这几个存储区 1栈 - 有编译器自动分配释放 2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块 区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束释放 4另外还有一个专门放常量的地方。 - 程序结束释放 区别: 2、栈的空间大小有限定,vc的缺省是2M,堆的空间大小是没有限定的 3、栈有系统管理,堆有程序员管理,所以堆用不好会发生内存泄漏 4、频繁的new和free,堆上会产生内存碎片,栈不会 5、栈比在堆上存取数据快些,栈更快速高效, 6、栈是有系统支持的,而堆是有函数库提供的 7、只有少数数据类型列入int、float等会在栈上分配,大多数用户类型都在堆上。 8、栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一 来源: https://www.cnblogs.com/hongfeng/archive/2006/09/05/495363.html

书籍和视频课程

风格不统一 提交于 2020-03-08 12:20:54
书籍和视频课程,学习下面的 9 门科目。如果你是一个自学成才的工程师,或者从编程培训班毕业,那么你很有必要学习计算机科学。 (我本科喂了 Dota,编程算是自学的。工作了后我深刻的体会到,这些科目的重要性😢。) 二、为什么要学习计算机科学 软件工程师分为两种: 一种充分理解了计算机科学,从而有能力应对充满挑战的创造性工作; 另一种仅仅凭着对一些高级工具的熟悉而勉强应付。(直白有力,直击心灵🤔) 这两种人都自称软件工程师,都能在职业生涯早期挣到差不多的工资。然而,随着时间流逝,第一种工程师不断成长,所做的事情将会越来越有意义且更为高薪,不论是有价值的商业工作、突破性的开源项目、技术上的领导力或者高质量的个人贡献。 全球短信系统每日收发约 200 亿条信息,而仅仅靠 57 名工程师,现在的 WhatsApp 每日收发 420 亿条。 — Benedict Evans (@BenedictEvans) 第一种工程师总是寻求深入学习计算机科学的方法 ,或是通过传统的方法学习,或是在职业生涯中永无止息地学习; 第二种工程师通常浮于表面 ,只学习某些特定的工具和技术,而不研究其底层的基本原理,仅仅在技术潮流的风向改变时学习新的技能。 如今,涌入计算机行业的人数激增,然而计算机专业的毕业生数量基本上未曾改变。第二种工程师的供过于求正在开始减少他们的工作机会,使他们无法涉足行业内更加有意义的工作

不是也许,这次是真的不做程序员了...

二次信任 提交于 2020-03-08 11:07:50
不管别人说什么职业好,还是不好。自己干了,才知道。 虽然,自己也做了几年程序员。但,现在我已经不想在做了。 是的,未来,不再做程序员了。 打工是不可能做一辈子,你指望在一家公司干到50-60退休??? 看看今年疫情黑天鹅事件,多少企业撑不住了。 撑住的,也要裁员,哪怕你干的好好的。 不裁员,也要降薪,哪怕你干的好好的。 想自己掌握命运,打工绝不是长久之计。 一定要有自己的一个事业。 不做程序员,那干什么—— 创业 。 我自己弄了个微信群,感兴趣的,想了解的欢迎加入。 来源: oschina 链接: https://my.oschina.net/mondayer/blog/3189778

解析新手程序员都会遇到的五个障碍【超准】!

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-08 09:06:01
程序员作为当下互联网行业中必不可少的角色,高薪酬,好就业成为其身上颇具代表性的两个标签。很多人都有入行或者转行来做程序员的想法。 不过想要成为一个合格的程序可并不轻松,作为一个新手想要入门程序员,首先就有5个必须克服的障碍。今天就为大家详细分析障碍以及克服障碍的有效方法。 1 不知道选择哪种语言 很多人会问:“我应该先学什么编程语言?”能有此一问,自然是因为你明白程序划分的细致,但也说明认知也仅仅停留在这一层上。 如果你心中已经有了一个既定的目标或者说是想要完成的项目,那么就可以依此做出选择。 2 不知道如何学以致用 选择好方向之后,刚开始学习理论总是很轻松的,而且网上也有许许多多免费和付费的在线课程。很多人都能较快的掌握理论知识,甚至能够做到自己来解释某个代码片段的工作原理。然而一旦实际应用理论来解决问题并编写新代码的时候,就会无力应对。 导致这种情况出现的原因很简单:技能空白。所以只有将理论结合大量的练习 ,具体的方法步骤如下: ✎ 选择一个复杂的项目。最好这项目得能够激起你的兴趣。 ✎ 将这个任务分割成小而独立的任务。例如,“实现登录页面”是一个很大的任务。但你可以将其分解为多个小任务。而关于一个小任务我们可以再次做个细分:不应该超过20行左右的代码。一次不使用太多的理论概念。一次专注一项任务,而不是并行解决多任务。不要跳到下一个任务,除非你已经彻底测试过当前任务

《梦断代码》读后感 二

时光毁灭记忆、已成空白 提交于 2020-03-08 07:43:37
4.  在乐高王国这一章中,我看到了“牛仔程序员”,就如同软件工程老师所讲的,四种人,第一等人是有能力有责任,第二等人是有责任没能力,第三等人是有能力没责任,第四等人是无能力无责任。老师所说,一人英雄的时代已经结束,对于这种人就是一匹独狼,团队里的毒药。在《梦断代码》中提到,软件界中关于“牛仔程序员”的说法由来已久。所谓牛仔程序员,就是那些不守规矩、偏好独干、喜欢挑战的程序员。对于许多经理来说,牛仔程序员简直就是噩梦;而在许多程序员眼中看来,他们是英雄。这在我们团队开发时,也是如此。无论是哪个同学,都希望找一个什么都会干,什么都肯干的同学一组。然而,这并不可能,不是每个同学都能写好代码,会写代码。一个团队,如果只是一个人在干活,这个团队迟早会解散。 5.  在搞掂设计方案这一章中,我看到了书中提到的边缘案例,这就如同我们目前所做的结对开发中的数组中的子数组最大值超过了int32的表示范围时,我们该怎么办。程序员们经过训练要巨细靡遗通盘考虑,他们太执着于警惕会出问题的情形,结果难免会迟钝不灵。他们在边缘案例上绞尽脑汁,以至于偏离了中心店。而我也感同身受,我们目前的学习,和做软件还是有很大区别的。我们先考虑的都是怎么实现老师要求的这些功能,并没有把用户想像成一些根本不懂程序的人来看待,我们所做的程序,唯一用户就是任课老师。 6.  里面有一句安德森说的话,“我在那当经理时,自己不写代码

如何成为一个杰出的程序员?

穿精又带淫゛_ 提交于 2020-03-07 18:53:59
“成为一个杰出的程序员!”,每个程序员都是这么想的,虽然嘴上不说!这是一个人人自称“屌丝”,骨子里却都认为自己是“高富帅”(或者认为自己终究会成为高富帅)的年代! 大部分时候,我们一直在努力成为一名优秀的程序员。但是,更多的时候,我们并不知道如何成为一个优秀的程序员! 怎样成为一个优秀的程序员? 完美主义?注重细节?懂用户需求?恩,听起来都有道理,但又觉得很虚,难以实施! 选(fang)择(fa)比努力重要,一味只会埋头苦干的人,注定成不了杰出的程序员,有时候,我们需要停下来:think ! 我不是一个杰出的程序员,甚至可以说不是一个正统的程序员,所以没有资格来给出一个好的答案,但是“课程格子”的李天放工程师给出的答案,觉得很是认同。分享给大家: 首先, 我认为答案绝对 不是 “只要写很多年代码就好了“。我面试过不少有10年经验,代码却写的很糟糕的程序员。经验很保贵, 但只靠经验是不够的。就像下棋一样,假如你用心研究,复习,不断挑战自己,也许可以成为一名大师。但不断用懒散的方式去玩棋,下20年也只是一个”臭棋篓子“。 我觉得比较有用的进步方式: 1. 学会看代码 大多数程序员都只愿意用自己写的代码,但高手一般可以轻易调用别人写的代码。表面看上去是工作习惯不同, 但实际上是能力上的差别。看代码要比写代码难很多倍。 我建议上班时多给队友们作code review

《面试必问之jvm与性能优化》(二)

烂漫一生 提交于 2020-03-07 17:16:12
1. 说说各个区域的作用? 1、运行时数据区域 运行时数据区域包括方法区、虚拟机栈、本地方法栈、堆、程序计数器。其中方法区和堆是所有线程共享的数据区,其他的是线程隔离的数据区。 1.1、程序计数器 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器,确定下一条需要执行的字节码指令。java的多线程是通 过线程轮流切换并分配处理器执行时间的方式来实现的,在任何确定的一个时刻,一个处理器只会执行一条线程中的指令。为了线程切换之后能恢复到正确的执行位 置,每个线程都需要有一个独立的程序计数器,各个线程之间的计数器互不影响。如果线程正在执行的是一个java方法,则计数器记录的是正在执行的虚拟机字 节码指令的地址,如果正在执行的是native方法,则计数器值为空。 1.2、java虚拟机栈 java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是java方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧用 于存在局部变量表、操作栈、动态链接、方法出口等信息。通过所说的栈是局部变量表,即与对象内存分配关系最密切的内存区域。局部变量表的内存空间在编译期 间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是确定的,在运行期不会改变。 java虚拟机栈有两种异常:如果线程请求的栈深度大于虚拟机所允许的深度

不与人沟通的程序员不是好程序员

萝らか妹 提交于 2020-03-07 11:29:18
  很多人认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题。甚至不少程序员对他们是做什么的都没有清晰的概念。   在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:   程序员是将人类想法翻译成计算机语言的译者。   他们是两种世界之间的纽带。你认为维护这个纽带很容易吗?    人类世界的背景   The problem with people is that they’re only human. - Bill Watterson   人类的问题是,他们只是人而已。——比尔·沃特森   人类是生物进化的产物,并且拥有独特而宝贵的器官——大脑,它能为程序员提供想法。大脑有组合复杂的新大脑皮层(对人类而言是独特的),还有从哺乳动物和爬行动物继承的旧结构。旧的大脑结构主要负责生殖(性)和生存(寻找食物或者躲避危险)。新大脑皮层进化成能够更好地支持这些功能,但是,它开始产生奇怪的副作用——意识、思考和好奇心。幸亏这些副作用的影响,人类产生了文明并在数千年后发明了计算机。   一些人相信经过数千年的发展,人类应该变成完全沉闷的、理性的、可预测的生物,但是这并没有发生。人类旧的大脑结构、复杂的心理和社会行为往往使人们不理性,不可预测并带有欺骗性。并且,人类有糟糕的记忆力、强烈的情感和个人兴趣。但是

程序员的本质

痴心易碎 提交于 2020-03-07 11:27:56
很多人认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题。甚至不少程序员对他们是做什么的都没有清晰的概念。在这篇文章中,笔者想给不知情的人解释一下程序员到底是做什么的。 程序员是将人类想法翻译成计算机语言的译者。 他们是两种世界之间的纽带。你认为维护这个纽带很容易吗? 人类世界的背景 The problem with people is that they’re only human. – Bill Watterson 人类的问题是,他们只是人而已。——比尔·沃特森 人类是生物进化的产物,并且拥有独特而宝贵的器官——大脑,它能为程序员提供想法。大脑有组合复杂的新大脑皮层(对人类而言是独特的),还有从哺乳 动物和爬行动物继承的旧结构。旧的大脑结构主要负责生殖(性)和生存(寻找食物或者躲避危险)。新大脑皮层进化成能够更好地支持这些功能,但是,它开始产 生奇怪的副作用——意识、思考和好奇心。幸亏这些副作用的影响,人类产生了文明并在数千年后发明了计算机。 一些人相信经过数千年的发展,人类应该变成完全沉闷的、理性的、可预测的生物,但是这并没有发生。人类旧的大脑结构、复杂的心理和社会行为往往使人 们不理性,不可预测并带有欺骗性。并且,人类有糟糕的记忆力、强烈的情感和个人兴趣。但是,程序员没法选择与更理性的物种工作