开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

First Unique Character in a String (找到一个字符串中第一个不重复的字符)

问题描述 下面是有关这个问题的描述部分。 英文 Given a string s, return the first non-repeating character in it and return its index. If it does not exist, return -1. 中文 针对给定的一个字符串 s,你需要写一个算法,返回给定字符串中不重复字符的位置(index),如果所有的字符在给定的字符串中都有重复的话,那么你应该返回 -1。 样例 下面给出了这个问题的示例,以便于你参考。 Input: s = “comossez” 0 Input: s = “lovelycomossez” 2 Input: s = “aabb” -1 思路点评和源代码 整体来说这个题目的难度并不大。 有很多种解题的思路,首先你需要把字符串拆开放到数组中,这样你才能够一个字符一个字符的进行遍历。 我的这个思路肯定不是效率最高的,我的思路就是将字符串放到数组中,然后对数组进行遍历,在这个过程的同时还定义一个 Map,在这个 Map 中存储的 Key 就是正在查找的字符串,如果当前字符串在 Map 中没有的话,就 Put 进去。 Put 进行的 Key 是当前的字符串,值是当前字符串所在数组的下标。 如果当前字符串已经在 Map 中有的了话,我们可以修改 Map 的值为 2#5 这样的方式,中间可以使用 # 号或者任意特殊字符。 当完成上面的遍历后,我们就获得了需要的 map 了。 然后再对 Map 进行遍历,找到第一个不含有 # 号的值就行了。 为了进行有序存储,我们需要使用 LinkedHashMap,因为 HashMap 是无序的,无序的 Map 会把找到第一个的输入顺序弄错。     上图是对内存进行分析后,可以看到初始化后的 Map 的值。 代码 请访问 GitHub:https://github.com/cwiki-us-docs/java-tutorials/blob/master/toolkits/codebank/src/test/java/com/ossez/toolkits/codebank/tests/leetcode/LeetCode0387FirstUniqueCharacterTest.java   https://www.ossez.com/t/java-hashcode/13447

2021年04月27日 0Comments 728Browse 0Like Read more
Computer Science

Java hashCode() 方法

在 java.lang.Object 类中有几个个非常重要的方法,我们今天来讨论下 hashCode() 这个方法。 什么是 Hash Hash 中文叫做哈希也可以叫做散列,使用 Hash 的算法生成字符串或者数字的方法就可以称为 Hash 算法,或者散列算法。 如果还不太明白的话,考虑下 MD5。MD5 就是典型的哈希算法,通过 MD5 算法,不管你是输入字符串,图片,二进制文件,都能获得一个字符串。 获得这个字符串的算法就是 Hash 算法。 为什么要 Hash 我们在这里不打算讨论复杂的 Hash 算法或者 Hash 算法怎么去计算的。因为这样的话,你可能需要很长的时间才能搞明白到底怎么算出来的。 使用 Hash 算法的目的就是为了将获得的数据摘要信息尽量分散,并且尽量的不重复,同时还需要保证相同数据的 Hash 结果是相同不能变化的。 不管你将相同数据 Hash 多少遍,只要数据相同,那么 Hash 必须是相同的。 哈希碰撞 在现实生活中,不同数据的 Hash 结果可能是相同的。 考察下面的代码: logger.debug("HashCode AaAaAa - {}", "AaAaAa".hashCode()); logger.debug("HashCode BBAaBB - {}", "BBAaBB".hashCode()); 上面代码输出的结果是相同的,这种情况就是哈希碰撞( Hash collision)。     很遗憾,这种哈希碰撞在现实中是不能避免的。     常用的哈希算法 常用的 Hash 算法有下面的一些算法。 MD5 的算法已经不是安全的 Hash 算法了,在密码学和开发中,已经逐步推荐使用 SHA-256 算法了。 算法 输出长度(位) 输出长度(字节) MD5 128 bits 16 bytes SHA-1 160 bits 20 bytes RipeMD-160 160 bits 20 bytes SHA-256 256 bits 32 bytes SHA-512 512 bits 64 bytes 根据碰撞概率,哈希算法的输出长度越长,就越难产生碰撞,也就越安全。 Java 的 hashCode() Java 中的 hashCode() 方法返回的数据类型是 int 类型。 下面以 String 对象的 hashCode 为例,官方解释中有关 String 对象 Hash 算法计算方式是: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 针对输入字符串是不是 UTF16,将会有不同的计算方法。     IntelliJ IDEA 重写 Hash 算法 如果你不想使用 Java Object 对象中的 Hash 算法,你可以在你的对象中重写 Hash 算法。 在 IntelliJ IDEA 输入快捷键 Alt+Insert,这个将会弹出快速生成方法的选择项。 随后将会提示你选用何种方法来创建 hashCode() 方法。你可以选择使用 JDK 自带的,你也可以选择使用 Apache Commons-lang 的方法来重写方法。当然,你也可以使用其他的一些方法来写,不管哪个方法来写,原理都是相通的。 选择变量,在完成上面的方法选择后,将会提示你选择变量。 将需要创建的变量选择,然后下一步。 同时还需要你选择非空的字段,你可以默认选择也可以不选择。 如下,你可以看到使用 JDK 生成的默认的 hashCode 方法。 @Override public int hashCode() { return Objects.hash(title, topic_id, raw, category, target_recipients, archetype, created_at); }     如果你根据使用的是 Apache 的 Commons 生成的话,结果有所不同。 可以在 IDE 中自行研究下。 需要注意的是,在 hashCode 中,你可能会看到数字 17,31,37。 其实这些数字就是素数了,在 Java 面试的时候可能会有一道题目就是找出 100 以内的素数。 因为 Hash 算法在很多时候其实也可以用于密码学中,密码学的很多基础研究就是对素数的研究。 网络中广泛使用的RSA算法,就是基于素数性质的重要应用。 因此在 hashCode 的方法中,你能看到上面的数字,这个就是有关素数算法的实际应用之一。因为涉及到很多密码学的知识,我们这里就不实际展开了。 通过上面的说明,我们就能够在 Java 中对对象或者数据进行 Hash。 哈希算法和应用是 Java Hashmap 的基础,因此 hashCode 方法在 Java 中也会作为基础方法存在。 https://www.ossez.com/t/java-hashcode/13447  

2021年04月27日 0Comments 816Browse 0Like Read more
Computer Science

Java 类和对象

上 Java 语言的第一课,相信很多老师都会解释一句话就是 Java 是一个纯面向对象的语言。 然后再加上一堆 Java 的历史,再加上一个经典的动物的例子。 比如说,我们要描述动物,不同品种的狗的例子,我们在这个基础上抽象出来一个 Class,这个就是我们说的类了。 为什么叫 Class 这个很多人可能都没有想过吧,其实 Class 这个单词在英语里面有分类的意思。在英语世界里面,会用 Class 来表示很多东西。 比如说 Class A Felony,这个在英语法典里面就是表示的是刑事重罪的 A 分类。 在计算机语言中,我们就使用了 Class 来表示一个类了。 Class 和 Object 对象在我们定义 Class 后,我们就可以得到了。 还是用这个经典狗的例子,我们在定义了狗这一类动物后,我们需要将这个定义的动物映射到一条具体的狗上面。这条狗可能你的,也可能是隔壁老王的。 在现实中,肯定是不可能有 2 条一模一样重复的狗,但是在计算机数据上是可以存在的。 将类映射到具体的对象上的过程就是叫做实例化。这个应该比较好理解吧,因为 Class 是抽象,现在我们不讨论抽象的狗了,我们讨论隔壁老王家的狗。 如果把 Class 的狗直接拿过来用是肯定不行的,因为我们不知道我们现在要讨论的狗是谁的狗。 因此我们需要使用关键字 new 一下我们定义的 Class 的这个对象。然后我们就知道我们需要讨论隔壁老王家的狗了。     这个过程就叫做类的实例化。 因此,总结来说,对象就是实例化后的类。 创建对象 对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建一个对象需要以下三步: 声明:声明一个对象,包括有对象类型和对象的名称 实例化:使用关键字 new 来创建一个对象。 初始化:使用 new 创建对象时,会调用构造方法初始化对象。 实际上我们可能并不是完全按照上面的 3 步来写代码。 实际上,你可以写出下面的代码是没有问题,也是可以编译通过的,你的 IDE 工具可能会提示你说下面的代码是重复的,你可以使用其他方法来避免重复。 String testStr = new String("COM.OSSEZ"); 但是实际上,没有人这样写,绝大部分你看到的代码都是: String testStr = "COM.OSSEZ"; 这是因为 String 这个类在 JDK 中比较特殊,是字符串的对象,通常也是我们用得最多的有关的字符串的操作,因此 String 的对象是可以直接赋值的。 当你直接赋值后,其实 JDK 已经为你完成了上面的 3 步操作了。 有时候,你在定义好对象后,可能还暂时不知道要干什么,你可能就非常粗暴的直接 = null 到给定的对象上面了。 或者就先定义好,在使用的时候再初始化。 例如,你可以使用下面的代码来定义一个对象,但是不对这个对象进行任何操作。但是,随后你就马上要对这个对象进行操作了。 通常你的 IDE 工具会在这里提示要求你初始化这个变量。 这个时候你可以直接 new 一个 String,在你 new 一个 String 的时候,Java 就已经帮你完成了上面说的实例化了。 String testStr; logger.debug("String Size - [{}]", ossezVariable.length()); 上面的代码,在 IDE 中会提示错误的,在构建的时候也会提示定义的变量没有初始化错误。 当然,你也可以直接将 null 赋值给你的变量,这样的结果得到的就是空对象异常。 String testStr = null; logger.debug("String Size - [{}]", ossezVariable.length()); 空对象 在 Java 中,我们可以先定义一个对象,然后将 null 赋值给定义的对象。 考察下面的代码: String testStr = null; logger.debug("String Size - [{}]", testStr.length()); 在上面的代码中,我们将 null 赋值给了一个字符串对象 testStr ,但是我们并没有对这个对象进行任何后续的赋值。     因此这个对象是 null 的,如果这个时候你有代码尝试获得字符串的长度,但是字符串为 null,第二条语句肯定会出现空对象异常。 这在 Java 中非常常见。 https://www.ossez.com/t/java/13446/1

2021年04月26日 0Comments 771Browse 0Like Read more
Computer Science

Java 一维数组的定义和初始化

数组是我们非常常见的一种数据结构。 在 Java 中也不意外,通常我们会对数组进行一些操作,包括插入,删除,查找等。其实在实际的运用过程中,我们可能会用到 Java 提供的集合类型。 这些类型比数组操作更加简便,通常用的是 List,Map,Set 等。 在很多公司面试的时候,为了考察面试人的基本程序功底,并且也为了避免面试的面试人使用很多 Java 的高级特性,而特定规定使用数组。 正是因为有上面的一些规定,导致本人对面试中做题和刷题的反感。 不管怎么样,现实就是这么残酷,为了找一份工作,你可能还是需要对 Java 的数组有一些基本的了解。 定义 Java 语言中提供的数组是用来存储固定大小的同类型元素。 这里有一个重点就是 Java 的数组的长度是固定的,在定义好数组后,数组的长度就不能改变了。 可以有下面 2 种方法来定义数组变量。 int[] intArraySize = new int[10]; Integer intArrayW[] = new Integer[10]; 因为数组是固定长度的,因此你在定义完成 Java 的数组后,你需要对数组长度进行初始化。 在这里我们使用的是为数组设定长度的方法进行初始化的。 在上面的语句中,有 2 中定义数组的方法,一种是类型后面加 [],这种方法是上面的第一句话。 另外一种方法就是在变量后面加 [] 来定义数组。 我们推荐使用第一种方法来进行定义,这种方法更加简单明确。 初始化 数组定义完成后可以有 2 种方法进行初始化。 如果你只定义了数组的长度的话,你就需要在这个时候直接将值插入数组了,如果你没有插入的话,这个数组只等于在内存中划分了存储空间罢了。 使用长度初始化 例如代码: int[] intArraySize = new int[3]; 进行数组初始化。 通过查看内存,我们可以看到内存中初始化的数组,已经划分存储空间了,但是值都是 0。 Integer intArrayW[] = new Integer[3]; 代码中,我们使用 int 的包装类来进行定义的,就是 int 的对象。 我们通过 debug 可以看到,数组空间也已经初始化了,但是看到 intArrayW 其实是一个对象,这个对象是中的所有元素 null 的。如果这个时候你直接访问,那么将会得到空对象异常。 使用数据初始化 另外一种初始化数组的方法就是使用数据来进行初始化了。 你可以通过下面的语句对数组直接赋值。 int[] intArrayValue = {1,2,3}; 然后你再查看内存,你可以看到你已经定义了一个长度为 3 的数组,这个数组中的值分别为 1,2,3。 在面试的时候做题,通常可能会考虑使用这种初始化的方式。尤其是在字符串的处理上。 因为只有这样初始化你才能够在下一步的代码中获得数据,否则你将需要使用另外的步骤来进行数据插入。 考察下面的代码: String[] strArray = {"COM","OSSEZ","US"}; 上面的代码,我们就已经初始化了一个字符串的数组,通过上面的初始化为下一步的程序调用做好准备。 因为在面试的时候,很多面试题都需要先定义数据。 上面的几个步骤能够帮助你迅速完成数据定义的过程。 当然,如果只需要定义字符串,你也可以直接定义。 https://www.ossez.com/t/java/13445

2021年04月26日 0Comments 814Browse 0Like Read more
Computer Science

Maven 在运行部署的时候是如何确定推送到 releases 还是 snapshots 仓库的

我们都知道 mvn deploy 命令的功能就是将编译部署的结果推送到不同的仓库中。 那么如果我们使用的 releases 还是 snapshots 仓库是如何判断的呢? 这个主要是根据 POM 中的 0.0.1-SNAPSHOT 进行判断的。 如果这个里面有字符 SNAPSHOT 的话,将会推送到 snapshots 中。 否则将会推送到 releases 中。     如上面的示例 pom 文件,上面的版本号决定了推送的路径。 https://www.ossez.com/t/maven-releases-snapshots/13443

2021年04月26日 0Comments 756Browse 0Like Read more
Computer Science

Maven 中的 release 和 snapshot 版本库的区别

maven 的代码仓库分为 2 种类。 这 2 种分别为 snapshot 和 release。 作用和区别 可以将 release 理解为稳定的发布版本,当版本 release 后,如果你发现你的代码有问题,希望马上进行修改的话,一般来说是不可以的。 代码仓库通常不允许你将 release 版本多次发布,如果你需要进行再次发布的话,你需要修改版本号。 snapshot 针对 release 来理解的话,最简单的说法就是可以多次发布,如果你愿意,你可以将任何字符修改一下,然后发布上去。使用 snapshot 发布的时候的代码库,多次发布是不会被拒绝的。 约定 版本号中的 release 和 snapshot 区别就是,snapshot 是在版本号后面添加 -SNAPSHOT 字符。 这几个字符必须是大写,同时这几个字符不能变,添加在版本号的后面,中间使用分隔符进行分隔。 例如我们有一个项目,项目中的的依赖定义为: <groupId>com.ossez</groupId> <artifactId>parent-modules</artifactId> <version>0.0.1</version> <packaging>pom</packaging> 如果是 SNAPSHOT 版本的话,那么version 部分就需要修改为 <version>0.0.1-SNAPSHOT</version> 而且只能是这种格式。 Maven 使用 我们知道 Maven 在本地是进行缓存的,如果你使用的是 release 版本的话,一旦包被下载到本地了,Maven 是不会重新下载的。 如果你希望重新下载的话,你需要手动删除本地中的缓存。 如果你使用的是 SNAPSHOT 版本的话,每次在构建的时候都会从定义的新仓库中下载新的版本。 这样就更加方便项目小组之间的协调。 比如说,项目小组 A 有个包的版本为 0.0.1-SNAPSHOT ,项目小组 B 中有个包是依赖于这个的,但是项目小组 B 发现这个包中有问题,需要进行修改。 小组 B 将会通知小组 A 进行修改,小组 A 修改完成后将会 Push 到仓库中,尽管版本号没有变,那么项目小组 B 在编译的时候,也会使用新推送的 0.0.1-SNAPSHOT 版本。 那么小组 B 依赖小组 A 修复的错误就已经修改完成了。 如果采用 release 的话,那就必须修改版本号了。     在持续集成的时候,过于频繁的修改版本号并不是一个非常好的实践,这将会导致过多,过于频繁的版本号变化。     上面的图片显示了我们推送到中央仓库中的 SNAPSHOT 版本,这个版本将会随时因为被修改而更新。 https://www.ossez.com/t/maven-release-snapshot/13437

2021年04月25日 0Comments 691Browse 0Like Read more
Computer Science

使用 IntelliJ IDEA 进行编译的时候提示 Java 的支持 Level 不够

错误提示的信息如下: By default, the Java language level is set to 5 which is not supported by the current Java version. Update the language level to 6+.Update source level in codebank     问题和原因 这是因为很有可能在你的 maven 配置 POM 的时候的编译插件 maven-compiler-plugin 的版本。 通常这个插件的默认版本都比较低。 如果你使用的是 3.7.0 的话,那么默认使用的是 Java 1.5 的 Level。 如果你修改使用最新的 3.8.1 的话,那么将会默认使用 1.8 的 Level。 目前,我们应该会使用 JDK 8 或者 11,因此你需要手动进行一下设置。 设置有 2 个方法。 第一个方法就是添加下面的参数到属性中。 <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> 第二个方法就是直接指派到插件的 config 配置中。 如下面的配置参数。 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> JDK 9 及其后续版本 从 maven-compiler-plugin 插件的 3.6 后续版本开始,添加了一个 release 的配置。 如果你使用 JDK 11 的话,你可以使用下面的配置。 <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <release>11</release> </configuration> </plugin> 使用上面的配置结果将会能够更好的适配 JDK 11 版本。 https://www.ossez.com/t/intellij-idea-java-level/13436

2021年04月25日 0Comments 683Browse 0Like Read more
文化旅游

中年是危机还是重生

在前一段时间最焦虑的时候,我的妻子一直陪在我的身边,一直在给我鼓励,并承担了好多,好多家庭的重担。虽然中年悄然而至,善待身边的人,相信只要一起往一个方向努力,没有什么东西是过不去的。 公司业务调整,虽然目前还在给公司做 Contract,但是终究还是饱一顿饿一顿的,后面还有嗷嗷待哺的小朋友,这样下去感觉非常不踏实。 80 后的末尾都已经进入中年了,在北漂的时候以为当时说的中年危机离自己很远,但是真正来到的时候还是猝不及防。 闲逛知乎,无意中搜到好多中年危机,求职的话题,总想自己要写点什么。从焦虑,到不焦虑,到认真思考,也许人生每一次改变都是安排。不知道多年后我是否还能有心情和时间去写下这些文字。也许闲下来的这段时间就是让我们整理整理再出发? 经历了 1 个多月的折磨,虽然到现在还没有接到 Offer,但是心态基本上平和了,反正努力去找了,至于结果是什么,自己积极努力的心态就能打败一切了。也许是我应聘的职位比较高,所以 On-Site 都好几次了,在没有 Offer 的情况下 HR 还主动打电话给我说,公司对我还是感刚兴趣,无奈竞争比较激烈,我们也很难做出这个决定。如果你愿意的话,我将你推送给其他的同事的岗位,你看可以吗(安慰奖?)? 至少这样的回复还能让人感觉好点。 积极的心态,认真化解。随便写写自己的中年危机清单,想想破解方式,也许破解中年危机的最好办法就是打破自己思维的禁锢,寻求重生? 危机 中年的问题感觉就是精力已经开始在慢慢走下坡路了,但是前路漫漫。 买了房的还有无数的贷款要还,没有买房的却要面对高昂的房价。也许化解中年危机最好的办法就是财务自由,所有人都在想财务自由,但又有多少人能真正实现财务自由呢? 工作上已开启了一种安逸,天花板模式,上也上不去,下去却很容易。一个业务重组就能把 80 后重新抛向职场,然后你还得屁颠屁颠的拿着简历和才毕业的大学生们一起竞争。低薪连付房贷都不够,高薪又遥不可及。上不上,下不下,空有一身焦虑。 一直在想,如果是一直在创业的人会有中年危机一说吗?就算有也可能没有我们这么强烈吧,因为创业的人每天都在危机中度过,他们抗压能力更强。 中年危机这个词,体会最深的应该就是这类人:一直在格子间,每天做着相同的工作,但突然有一天这个格子间却不属于你了。 重生 为自己写下下面的计划,帮助自己度过中年危机,也许一切只是开始,只是重生。 找到自己可以做的,找到自己可以改变的地方,我相信一切都不会太迟,最迟的行动就是你现在还没有开始行动。 心态,心态 焦虑和担心都无助于问题的解决。要解决问题最需要做的就是要调整心态。最近一直发现,平时因为时间忙,一直没有去做很多自己想做却没有做的事情。每天都在为了工作上的任务拼命奔波。 何不认真去思考下自己还有什么东西能做,还需要去做什么呢? 去平衡下自己的心态,也许在学习的过程中又掌握了一门新的技能,增加了自己的实力,危机悄然化解了呢? 在最开始的时候,一直以为在公司工作那才叫工作,其他的工作要不不那么体面,要不不那么赚钱。一段时间后,我发现我错了,不是因为其他的工作不赚钱,那是因为你没有做进去。 最近和一些做代购的朋友聊天,因为身份的问题,他们也没有办法在这边合法的找到一份工作,很多朋友都顺便做做代购,我就问他们。做代购辛苦吗?都说很辛苦,我问他们赚钱吗?笑而不答,和我表达的意思是,发财难,温饱能解决。再后来一打听,收入也和我在公司上班差不多。只是多点少点而已。原来很多时候,你觉得不赚钱的事情,那是因为你没有做进去。 现在我明白了,调整自己的心态,做好自己能做的,不能做的不要勉强。不要为了微薄的收入而做自己不喜欢做的事情。因为这个事情不是你自己喜欢的,你不一定能够做出什么成绩。 不要管是什么工作,这个工作是否体面,只要是自己喜欢的,先去尝试下总没有问题。尝试了,发现自己不喜欢也没有关系,至少自己尝试了。不要等待,更不要在等待中焦虑。 摆脱危机,现在开始行动。 投资自己 我们可能没有资金,我们可能有很多债务。但是我们可以投资自己呀。 利用这段时间,可以多学习学习,多考考证。在去年的时候,我跟风一样的考试了房地产经纪人执业证书,说心里话,在考试的时候想着就是以后自己买房子能够少点手续费,能帮家人买卖房子的时候帮家里人省点手续费。 谁知道无心插柳柳成荫,今年才开始就有几单要成交。感谢我去年做的那个决定,也感谢我妻子在我快要放弃的时候督促我认真学习,通过考试。 其实每一次决定都没有对和不对的一说,你今天的努力就是为了明天的投资,你的努力投资了你自己。 从现在开始,从今天开始,不再观望,不再等待。 于是我开始了我的个人博客和知乎创作之旅。在帮助朋友,客户找房子的时候,忽然发现华人在美国买卖地产交易很频繁,但是中文资料又特别少,概念又特别多。想着怎么帮助大家呢?我就开了一个知乎小专栏:美国地产小知识 - 知乎 每天发点小干货,每天分享点小经验。这就是我坚持每天发一篇文章的创作来源吧。 我更认可下面的这句话:与其说是中年危机是将中年人抛向了市场,不如说是市场给了中年人重生的机会。 祝福所有已经步入中年的 80 后。 https://www.ossez.com/t/topic/13434

2021年04月22日 0Comments 697Browse 0Like Read more
文化旅游

IT 技术岗位 2019 年北美求职流水账

公司业务调整,虽然目前还在给公司做 Contract,但是终究还是饱一顿饿一顿的,后面还有嗷嗷待哺的小朋友,这样下去也不太踏实。 经历了 1 个多月的折磨,虽然到现在还没有接到 Offer,但是心态基本上平和了,反正努力去找了,至于结果是什么,自己积极努力的心态就能打败一切了。也许是我应聘的职位比较高,所以 On-Site 都好几次了,在没有 Offer 的情况下 HR 还主动打电话给我说,公司对我还是很感兴趣,无奈竞争比较激烈,我们也很难做出这个决定。如果你愿意的话,我将你推送给其他的同事的岗位,你看可以吗(也许只是客套话,安慰奖?)? 至少这样的回复还能让人感觉好点。 经历过电话面试,Online Assessment,On-Site 应该有多次了吧。从最开始的焦虑,到现在焦虑到不焦虑了。心态很重要。 马上又要毕业季了,希望我的经历能够帮到需要的童鞋。 在得到一个 Offer 之前,绝大部分人都会经历下面几步。每个公司的侧重点可能不一样,有些事情是我们可以控制并且做好的,有些事情已经不是我们能够控制的了。在求职阶段,最终的目的是得到 Offer。 其实针对留学生和华人求职者来说能够进入到 On-Site 就已经算是小成功了。 因为我应聘的职位大多是 Sr Developer and PM 级别的,所以竞争比较激烈,就算到 On-Site 公司后面还是有很多其他的备选方案。这个和国内求职有很大不同,一般来说能够进入到 On-Site 这个阶段首先就说明你的实例已经得到大部分认可,你可能缺的只是运气罢了。 求职的准备 简历和 CV。这 2 个东西肯定是要有的。 至于怎么写,每个人写法就不一样了,想想 HR 每天都能收到 N 多简历。怎么才能让 HR 能够从 N 多简历不至于直接扔到垃圾箱中。换位思考下,如果你是 HR 你会怎么做? 我觉得你可以从下面几点考虑: 对自己有信心并且与职位描述非常符合的高亮显示。 布局简洁明了,拜托,这个是简历,没有让你写小说。那种字体太小的,段落不分行的,完全不美观的简历一般都不会在考虑范围之内。 LinkedIn 需要有,但是不一定要写到简历上。因为有下面考虑,如果 HR 想搜索你的话,会通过你的名字直接到 LinkedIn 上去找。简历打印出来后,链接没有办法点。如果 HR 对你没有兴趣,LinkedIn 写上去也没人看。 有些 HR 会直接到 LinkedIn 联系你,所以你还是需要一个 LinkedIn 的。切记不要在 LinkedIn 上放不是太理想的照片,那种一看上去就不想吃晚饭的和早上起来没有刷牙洗脸的自拍照就别放了。 GitHub 上的头像也要正常点,那种 IT 屌丝状的头像也别放了,哪怕你放个卡通人物都比那个强。 Phone Interview 在我经历的面试中,Phone Screen 的时间一般都是在 30 分钟左右。 基本上能到这一步,就说明你的简历已经基本上满足公司的需求了,公司也希望有更多的了解。有时候一些公司会跳过 Phone Screen 直接给你发 Online Assessment。 跳过 Phone Screen 的 Online Assessment 在你连 Phone Screen 都没有收到,就直接收到了 Online Assessment 的时候别高兴的太早,很多公司就是通过 Online Assessment 来拒你罢了。 当你屁颠屁颠做完代码,自我感觉还不错,2 周后也许你就会收到一封非常礼貌的邮件说对不起,我们不打算 moving forward。这种情况尤其多发生在你比较向往的 IT 大厂,所以你收到这种邮件心态就要好点了。 其实他们早就想拒你了,只是找个理由罢了。 Online Assessment 这个东西就是刷题了,其实刷不刷不构成特别影响。 我还是建议都刷一下吧,不刷肯定能把你弄懵逼了。 On-Site 能到这一步,就说明你已经是佼佼者了。 唯一要做的就是怎么和对方进行沟通。现在 On-Site 的时间都比较长,基本上都是 4+ 小时的。 对你来说是体力和智力的双重挑战,记得吃饱了再去。     Follow Up 如果 2 个星期内还没有消息。 你就准备下一家吧。 https://www.ossez.com/t/it-2019/13433

2021年04月22日 0Comments 650Browse 0Like Read more
Computer Science

OSSRH 仓库地址

根据官方链接中的说明: Apache Maven - The Central Repository Documentation (sonatype.org) 从 2021年 2 月开始,将会使用仓库地址为: https://s01.oss.sonatype.org 上面的意思是,如果你的项目是在 2021年02 月之前提交到 OSSRH 中的话,那么你需要使用的提交地址为:https://oss.sonatype.org/。 否则,你将会需要使用新的地址为:https://s01.oss.sonatype.org/     时间的终止点为 2021年02 月。 这个在你具体申请提交的时候会被提示到。   https://www.ossez.com/t/ossrh/13429

2021年04月16日 0Comments 623Browse 0Like Read more
1…145146147148149…304
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (524)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1