CodeGym /Java 博客 /随机的 /旧关卡 06
John Squirrels
第 41 级
San Francisco

旧关卡 06

已在 随机的 群组中发布

Java 开发者路线图

我的一个朋友想知道为什么开发人员总是那么高兴。她给出的答案简单而令人惊讶:他们做自己喜欢的事并赚大钱。 欢迎来到软件开发者的世界。 旧级别 06 - 1

软件开发人员的工资

我想告诉你开发人员的薪水。土地如何取决于工资,你应该去哪里工作,你不应该去哪里。如果你不是开发者,自己去摸索,可能会得到一个颇具争议的数据。重点是,影响开发人员薪酬的主要因素不是资质,而是就业地点。有时,在同等资格水平的情况下,工作地点的好坏之间的差异可能是 2 到 10 倍(!)。每个给定的时刻,您的资格都是不变的。你不可能在一个月内获得两倍的资格并获得两倍的报酬。但是你可以在一个月内换一个工作地点并获得两倍的薪水。在两个月的流动中,我的工资翻了三倍(!)——难忘的经历。那么,让我们找出哪个地方最好。
  1. 公司主营业务是否为软件开发
  2. 公司是面向全球市场还是本地市场
  3. 主要办公地点在哪里:发达国家还是发展中国家
请注意,您工作的城市无关紧要。意思是,如果你在巴塞罗那的收入比你在纽约的朋友少五倍,我提到的因素可能会影响。 

具体数字

由于世界不同地区的薪水不同,我建议以拥有 5 年经验的 Senior Java Developer 的薪水为起点,并将其称为“5 year maximum”。下面的所有数字将作为此金额的百分比给出。以下是世界不同城市“5 年最高”薪水的一些示例: 旧级别 06 - 2下面显示了具有 5 年经验的 Java 高级开发人员根据他所工作的公司可能赚取的薪水: 旧级别 06 - 3旧级别 06 - 4当前情况最奇怪的是什么? 一半的程序员在 1 级和 2 级公司工作。 你想知道有什么收获吗? 3级和4级公司有数百个职位空缺。这些公司愿意为您提供更高的薪水,通常还有更好的工作条件。我认识两个 Java Junior,其中一个找到了一份工作,薪水是“5 年最高”工资的 3%(1 级公司),另一个找到了一份工作,薪水是“5 年最高”工资的 30%(4 级)。那为什么要少呢? 对程序员的供不应求——不要去工资低的地方工作! 结论 1: Java 开发人员(有任何经验)的平均工资是“5 年最高”工资的 40%-50%。 结论2:如果你不在1级和2级公司工作,而在3级和4级公司工作,你5年的平均工资大约是“5年最高”工资的90%-110%。

除非你做傻事,否则你能取得什么

如果你现在开始在编程方面进行自学,你的薪水可能是这样的: 旧级别 06 - 5

计划

0-3个月(学生)

你对编程知之甚少。您可能已经在学校或大学基础水平上学习过它。 您需要做的是学习如何编程和学习 Java。 您的目标是在 3 级或更高级别的公司中获得 Java 初级开发人员的工作。在计划的前三个月,您将一无所获,因为您只是在学习如何编程。但是越早开始越好。最好的时机就是现在。将来,当你有家庭和大量贷款时,重新获得资格将变得更加困难。为了纠正你的错误,你将不得不存钱以支付至少一年的正常生活。不要犯愚蠢的错误。

3-15 个月(Java 初级开发人员)

您已经是一名软件开发人员,并且您的经验每天都在增长。不要放松。在搁置桨之前,您有很多事情要做。 您需要做的是– 学习作为中级开发人员需要的技术。这些是什么?世界在不断变化。我会给你很多建议,生活会改变这一切。在网上查找一些职位空缺,看看您需要申请什么。请务必阅读 Bruce Eckel 的一本书“Thinking in Java”。 作为 Java Junior Developer 第一年的目标是达到 Java Middle Developer 的水平。没有人说这很容易,但对于一个以目标为导向的人来说,这是可能的。它会立即将你的工资增加到“5 年最高限额”的 40%(旧金山和伦敦为 5 万美元,班加罗尔为 6 千美元)。

2 年编程(Java 中级开发人员,一级)

去年你做得很好,现在你是一名 Java 中级开发人员。赚取 Senior Java Developer 薪水的 50%,你可以过得很好。您在工作中被赋予了一些严肃的任务,并且您的经验显着增加。你将在两三年内达到 Java 高级开发人员的水平。不用着急。无论如何,您的薪水不会很高。 您需要做的是学习设计模式,阅读 – McConnell 的代码大全。完善您的代码质量和团队技能。制定每月阅读 1 本计算机编程书籍的规则。然后,在 4 年内,你将比其他人聪明 50 本书。不要推迟它:你不会得到更多的空闲时间,此外,你很可能会组建一个家庭,或者如果你有一个家庭,它会变得更大。 你的目标就是选择几项技术作为Senior Java Developer专攻。你不可能把它们都学完,你知道的。成为单一专业领域的专家总是一个不错的决定。 旧级别 06 - 6

3 年编程(Java 中级开发人员,二级)

您现在是一名经验丰富的中级开发人员,并且正在考虑成为一名高级开发人员。它既令人愉快又享有盛誉。你的工资超过“5 年最高工资”的 60%(班加罗尔 1 万美元,基辅 2.5 万美元,柏林 4 万美元,纽约 8 万美元)。从这一刻起,对像您这样的专业人士的需求增加了报价。你总能在几天内找到工作,而且你的收入几乎不会比现在少。当然,如果你不做任何愚蠢的事情。 你需要做的是继续研究你选择的技术。工作得更好。不是为了你的雇主,是为了你自己。申请参与涉及有前途技术的项目(例如 BigData,目前正在撰写本文)。不管怎么说,你每天都会在办公室呆 8 个小时,所以为什么不多赚点钱呢,更重要的是,你将来需要的是最宝贵的经验。 你的目标是找到一份新工作。总是可以找到一个好的团队。您将面临新的项目和技术。你不需要扎根到你的椅子上。如果您仍在三级公司工作,请考虑进入四级公司。

5 年编程(Java 高级开发人员,1 级

您现在是一名高级开发人员。也许,你不值得,你感觉到了。不过,我还是要祝贺你。你现在是否配得上你的位置并不重要,重要的是你将来配得上这个位置。我想你会同意找到一份好工作更好,在成长到所需的水平之后反之亦然。我希望你没有忘记我每月读一本书的建议?现在任何学生都会羡慕你的知识和技能。更具体地说,他会为他们祈祷。试想一下:您的收入可观,接近“5 年最高”工资的 90%。你可能还很年轻。世界就在你的脚下。 你需要做的是重新评估您选择的技术。也许,你需要改变专业化。世界变了,技术变了,你在过去两年里获得了相当多的知识。您现在选择的内容将成为您未来几年的头条新闻。是时候选择您最喜欢的技术了。 你的目标是选择你的成长方向。他们很多,没有人能说出所有的名字,但你必须现在就做出选择。如果您今天做出一点改变,您将在未来得到很大的改变。

6 年编程(Java 高级开发人员,二级)

你已经决定了你的未来,你正在努力实现你的梦想。一个正确选择的方向以及前进的愿望——结果不会长久。恭喜。我很高兴看到又有一个人实现了他的梦想。有一个深刻的道理。人们常常高估自己一年能取得的成就,而低估自己五年能取得的成就。回顾五年前。是这样的。 你需要做的是避免做出不明智的决定,不要偷懒。 您的目标是选择方向并继续前进。还是你以为到这里就结束了?记住你的毕业典礼。这不是结束,只是开始。

你未来专精

旧级别 06 - 7您可以成长为技术专家(上层分支)、管理人员(下层分支)或受聘专业/独立顾问(中层分支)。这一切都取决于你喜欢什么。

Java 开发者的职业生涯

开发人员的职业不同于任何其他职业。你不需要成为一名经理就可以赚到很多钱。高级开发人员的收入经常超过他的经理老板。你获得的经验越多,你与老板的工作关系就会从“老板-下属”转变为“明星和经理”。被宠坏了知道他们的价值开发商挑选项目和职位空缺。让我们为我们自己的人感到高兴。那么,要成为如此高颜值、世界级的热门开发者,你需要具备哪些条件呢?您必须在最需要的新技术方面拥有丰富的经验。 如何做到这一点?见下文。 旧级别 06 - 8一旦您找到开发人员的工作,您就会开始发生两件事;尽管如此,它们并不总是可见的。 1、你在真实项目中积累经验,快速成长。这份工作一年给你的经验比大学 5 年还多。经验是一个如此重要的问题,以至于他们在发布的职位空缺中写着“需要 3 年经验的 Java 开发人员”。 2. 你每天学习新技术 8 小时,并因此获得丰厚的报酬。你真的不能高估这个事实。在某些情况下,你获得的技能非常宝贵,你本可以免费工作来获得这些技能,甚至付钱。如果您明智地选择自己从事的项目,那么您将拥有令人头晕目眩的软件开发人员职业。 那么……选择什么? 经常发生的情况是,您不知道哪种技术会有用,所以您开始在“喜欢和不喜欢”和“流行趋势”上进行选择。你可能会走运,也可能不会。所以你最好事先知道你的目的地。程序员的发展方式有很多种,因此,为简单起见,我将选择其中的几种,并写下我对未来情况的看法。不要认为这种模式是强硬路线;它只是对所呈现事物的简化视图,以使其清晰明了。

两百岁的开发者

如果您最喜欢编程,那么这就是您的方式:高级开发人员,然后是技术主管开发人员和架构师。这样您就可以作为开发人员工作 50 年或更长时间。在大多数情况下,高级开发人员和技术主管开发人员的薪水超过他们的经理。所以让你的钱物有所值。

经理。你很幸运你不像其他人

你跑到敌人那边去了。只是在开玩笑。如果你发现了出色的组织能力,那么你的方式是:团队领导,然后是项目经理。它会让你有机会成为部门主管并开办自己的公司。那就是你想要的,不是吗?

家是心之所在

旧级别 06 - 9如果你已经组建家庭,那么,也许你希望在一个经济强大的国家过上美好而安静的生活。也许您考虑搬到加拿大、美国、瑞士甚至澳大利亚。你有出色的技能和需求的职业。您不必从洗碗开始。您将从一名 Java 高级开发人员开始。应该是,赚大了。不错,哈?

见那不勒斯而不死。

你还没有家庭,但你喜欢旅行。oDesk 就是您的全部。找一个客户,同意每小时 20-50 美元的费率,带上笔记本电脑就可以走了!你的薪水足以在世界任何地方生活。为什么不立即开始让您的梦想成真呢?

我不想编程,我是个女孩..

如果你是女孩,你可能需要休产假。这听起来像是一个性别歧视的笑话,确实如此。尽管如此,其中还是有很多常识。最有可能的是,休产假后您将能够获得大量产假津贴(在社会保障较高的国家)。有些公司不支付任何费用,有些公司支付高额费用。我的一个学生在休产假期间拿到了年薪的三分之一。这发生在 2009 年春季,在裁员期间。一年半后你可能会回来,至少是中级开发人员。

6级

旧级别 06 - 10

1 艾丽。对象可见性。无效的

- 嘿,阿米戈! - 嗨,艾莉!你今天能告诉我一些有趣的事吗? - 今天给大家讲讲对象的生命周期一个对象创建后,它会一直存在(存在),直到至少有一个变量存储了它的地址(至少有一个对象引用)。如果不再有引用,那么该对象就消亡了。示例: 旧级别 06 - 11- 对象 «cat Tommy» 自创建以来仅存在一行。在下一行中,仅存储其引用的变量被设置为 null,并且 Java 虚拟机销毁该对象。 - 对象 «cat Sammy» 创建后存储在变量 cat1 中。或者,更确切地说,cat1 存储对该对象的引用。然后将此引用下方的几行复制到变量 cat2。之后,对另一个对象的引用存储在 cat1 中,而对 «cat Sammy» 的引用仅保留在 cat2 中。最后,在方法 main 的最后一行,将对象的最后一个引用设置为 null。 - 对象 «cat Maisy» 自创建之日起就存在于唯一一行中。在下一行中,变量 cat2 被分配了另一个值,并且对 «cat Maisy» 的引用丢失了。该对象变得不可访问并被认为是垃圾(已死)。 - 对象 «cat Ginger» 从创建到方法结束的那一刻就存在。在方法退出的运行时,变量 cat1 将被销毁,之后对象 «cat Ginger» 也将被销毁。 - 天气晴朗。 - 但是,如果您在某种方法中创建对象 Cat 并将其引用存储在类变量中,那么只要存在另一个现有对象对它的引用,Cat 就会存在。- 通常,对象不会立即被销毁。Java 虚拟机偶尔会激活垃圾收集以删除未使用的对象。我稍后会告诉你。- 如果您希望某个变量停止存储对象引用,您可以为其分配或对另一个对象的引用。

2 教授,垃圾收集

旧级别 06 - 12- 嘿,阿米戈!这是有关 Java 中的垃圾回收的有用链接。这当然不是我的优秀讲座,但这已经足够了: Java 垃圾收集基础知识

3 艾莉,敲定

- 再一次问好!现在我将向您简要介绍方法finalize()。该方法在对象被销毁之前由 Java 虚拟机在对象上调用。其实这个方法和构造函数是相反的。在此方法中,可以释放对象使用的资源。- Object 类有这个方法,因此,每个类都有它(Java 中的所有类都被认为是从 Object 类继承的,并且包含它的方法的副本)。如果您在类中编写 finalize() 方法,它将在此类对象被销毁之前调用。示例: 旧级别 06 - 13- 知道了。 - 但有一件事。Java 虚拟机自行决定是否调用此方法。大多数情况下,在方法中创建并在退出后声明为垃圾的对象会立即销毁,而无需调用任何 finalize() 方法。此方法是控制外部(JVM 之外的)资源分配的另一种工具。当您希望对象被销毁时,您最好释放所有使用的外部资源并重置存储的引用。我将分 10 个或 20 个级别向您介绍此方法的优点及其工作细节。同时,您应该知道两件事:存在这样的方法,并且(令人惊讶!)它并不总是被调用。

4 Elly,对象生命周期

- 我还想告诉你一些关于对象生命周期的有趣事情。在 Java 中,意外丢失对象是非常困难的;如果你有一个对象引用,就意味着这个对象肯定是活的。 - 在对象引用中存储一个数字——该对象在内存中的地址。您无法更改、增加或减少该数字。当内存中只有地址时,您无法创建引用。您只能创建一个新对象并将其引用分配给一个变量。这是获得新参考的唯一方法。 - 我懂了。也就是说,如果我将所有对象引用设置为 null(擦除),我将永远无法获取对象引用并访问它? - 是的。但通常情况恰恰相反——有太多未使用的活动对象。大多数程序在运行时创建许多对象并将它们存储在不同的列表中,但从不清理这些列表。 -大多数情况下,程序员将不需要的对象标记为“已删除”,仅此而已。没有人关心将他们从名单中删除。因此,大型 Java 程序往往会膨胀 - 越来越多未使用的对象仍然存在于内存中。- 就这样。以后我会一直提请您注意未使用的物品并妥善处理它们。 - ОK,谢谢。您已经清除了一些关于参考文献的事情。

5 Diego,对象生命周期任务

- 嘿,阿米戈!这里有几个任务给你:
任务
1个 1、Cat类的finalize()方法在Cat类中
写一个方法protected void finalize() throws Throwable
3个 2. Cat 和 Dog 类以及每个类的 finalize() 方法
在每个 Cat 和 Dog 类中编写一个finalize()方法,它向屏幕显示一条消息,表明对象已被销毁。
3个 3. 5万个猫类对象和5万个狗类对象
循环创建5万个猫类对象和5万个狗类对象。(Java虚拟机会销毁不用的对象,所以finalize()方法至少会被调用一次)。
4个 4. 猫计数器
在Cat类构造函数[public Cat()]中,将猫计数器(同类静态变量catCount)加1,在finalize()方法中减1。

6 Elly,静态类和方法

- 这是一个有趣的新话题。我想告诉你静态变量和方法。 - 哦,我已经听说过静态变量。我想,关于静态方法也是如此。但我想知道更多细节。 -在类中声明变量时,我们指定这些变量是否在单个共享实例中创建,或者是否有必要为每个对象创建它们的副本。默认情况下,为这个类的每个对象创建一个类变量的新副本。它看起来是这样的: 旧级别 06 - 14- 虽然变量cat1.namecat2.name在同一个类中声明 - Cat,但它们存储不同的值,因为它们绑定到不同的对象。 - 天气晴朗。 - 静态变量存在于单个实例中;您需要使用类名来访问它: 旧级别 06 - 15- 这也很清楚。 - 类方法也分为两类。普通方法在对象上被调用并且可以访问该对象的数据。 静态方法没有这样的访问权限,因为它们只是没有对象引用。静态方法能够访问此类的静态变量或其他静态方法。 - 静态方法不能访问非静态方法或非静态变量! - 为什么这样? - 每个普通的类变量都放在一个对象中。任何方法只有在引用该对象时才能访问此类变量。这样的引用不会传递给静态方法。 - 普通方法呢? -向普通方法传递对调用此方法的对象的隐藏引用。存储此引用的变量称为this。因此,该方法总是可以获取其自身对象的数据或调用同一对象的另一个非静态方法。-将null传递给静态方法而不是对象引用。因此,静态方法无法访问非静态变量和方法——它只是没有指向它们绑定到的对象的引用。 - 我懂了。 - 这就是普通非静态方法的工作方式: 旧级别 06 - 16- 这就是静态方法的工作方式: 旧级别 06 - 17- 如果使用关键字 static 声明变量或方法,则它们是静态的。 - 如果这些方法如此有限,那么这些方法有什么好处呢? - 这种方法也有其优点。- 首先,您不需要传递任何对象引用来访问静态方法和变量。- 其次,有时变量必须是独一无二的。例如,变量 System.out(来自类 System 的静态变量)。- 第三,有时需要先调用方法才能创建任何对象- 在什么场合? - 为什么您认为方法main被声明为静态的?在类加载到内存之后立即调用它,然后才能创建任何对象。

7 Risha,静态类和方法

-除了静态方法还有静态类。稍后我们会考虑这种情况,我将向您展示一个示例: 旧级别 06 - 18- 您可以根据需要创建任意数量的 Cat 类对象。与存在于单个实例中的静态变量不同。- 在类声明之前修饰符static的主要目的是保持类Cat和类StaticClassExample之间的关系。一般来说,类 Cat 未绑定(没有隐藏引用)到StaticClassExample 对象,并且无法访问普通(非静态)StaticClassExample 变量。 - 所以我可以在其他类中创建类? - 是的。Java 使这成为可能。现在,不要想太多。稍后我会解释一些其他的事情,一切都会变得容易一些。 - 但愿如此。

8 Diego,静态方法任务

- 嘿,阿米戈!以下是关于静态方法的一些有趣任务:
任务
1个 1.Cat类和静态变量catCount在Cat类中
写一个静态变量int catCount 。创建一个构造函数 [ public Cat() ],其中给定变量应增加 1。
2个 2. 静态方法:int getCatCount() 和 setCatCount(int)
向 Cat 类添加两个静态方法:int getCatCount( ) 和setCatCount(int),使用它们可以获取/更改猫的数量(变量 catCount)
3个 3. 类 Util
实现一个静态方法double getDistance(x1, y1, x2, y2)。它应该计算点之间的距离。使用方法double Math.sqrt(double a)计算传入参数的平方根
4个 4. ConsoleReader 类
编写一个 ConsoleReader 类,它有 4 个静态方法:
- String readString()从键盘读取字符串
- int readInt()从键盘读取数字
- double readDouble()从键盘读取小数
- void readLn ()等待按下回车 [使用 readString()]
5个 5. StringHelper 类
编写一个StringHelper 类,它将有2 个静态方法:
- String multiply(String s, int count)应该返回字符串s 重复的次数。
- String multiply(String s)应该返回重复 5 次的字符串 s。

示例:
Amigo → AmigoAmigoAmigoAmigoAmigo

9 教授,对象静态作用域和生命周期

旧级别 06 - 19- 又是我。不幸的是,我今天不能给你任何链接。那些伟大的演讲在某个地方丢失了。恐怕今天你得自己做。但你最好多听听 Elly 和 Risha 的话,他们总能教给你一些东西。然而试试这个:对象生命周期

10 胡里奥

- 嘿,阿米戈!你今天做得很好。这就是为什么我不能给你更多。来,坐下,表演开始:

11 松鼠船长

- 你好,士兵! - 早上好先生! - 我有一些好消息要告诉你。这是一个快速检查以加强您的技能。每天都这样做,你的技能会很快提高。任务是专门为在 Intellij IDEA 中执行而设计的。
在 Intellij Idea 中完成的其他任务
1个 Cat类和静态变量catCount在Cat类中
写一个静态变量public int catCount 。创建构造函数 [public Cat()]。每创建一只猫(一个新对象Cat)就让静态变量catCount加1。创建 10 个对象 Cat 并显示变量catCount的值。
2个 2.静态猫
  1. 在 Cat 类中添加一个公共静态变量cats (ArrayList<Cat>) 。
  2. 每次创建一只猫(一个新对象 Cat)时,让这只新猫被添加到变量cats中。创建 10 个对象猫。
  3. printCats()方法应该显示所有的猫。您需要在方法中使用变量 cat。
提示:
要创建cats变量,请使用代码行:
public static ArrayList<Cat> cats = new ArrayList<Cat>();
3个 3. 移动一个静态修饰符
移动一个静态修饰符以便代码编译。
4个 4. 最少数量的静态关键字
添加最少数量的静态关键字以使代码编译并使程序成功完成。
5个 5.有什么新想法吗?让我们想想...
  1. 在类Solution中写一个public static class Idea
  2. 在类Idea中写一个方法public String getDescription()来返回任何非空消息
  3. 在 Solution 类中创建一个静态方法public void printIdea(Idea idea)来显示想法的描述——这就是方法getDescription()返回的内容
6个 6. KissMyShinyMetalAss
编写一个名为 KissMyShinyMetalAss 的类。创建此类的一个对象,然后将其显示到屏幕上。
7 7.三个静态变量名
写3个公共静态变量:String Solution.name , String Cat.name , String Dog.name
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION