Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

给博主的一点建议 #1

Closed
czp3009 opened this issue Jan 10, 2019 · 9 comments
Closed

给博主的一点建议 #1

czp3009 opened this issue Jan 10, 2019 · 9 comments
Labels
good first issue Good for newcomers

Comments

@czp3009
Copy link
Contributor

czp3009 commented Jan 10, 2019

如果博主用 idea 的话, 推荐在提交时(git commit)勾选格式化代码选项.

image

这样代码更好看一些, 对于已经存在的代码, 可以在左边文件导航中选择一个文件夹, 然后按 ctrl+alt+L, 对单个文件的自动格式化同理.

注释推荐写在方法前或者类名前, 这样更好阅读.

A3 中提到的的 printf, 来自于 c语言 的 printf 函数(stdio.h), java 的 printf 语法与其一致.

println 意思是 print line, 真实输出的内容不一定是 \n. 而是由变量 "line.separator" 得到的.

在 *nix 操作系统下为 \n, NT 下为 \r\n.

可以使用此代码获取运行时系统的行分隔符

System.getProperty("line.separator")

而在 jdk 源码中(openjdk), 是这样获取的

lineSeparator = java.security.AccessController.doPrivileged(
            new sun.security.action.GetPropertyAction("line.separator"));

此问题意味着, 手动输出的换行符可能是不正确的.

或许命令行里显示是正确的, 但是 System.out 可以被导向文件描述符, 另外具体的操作系统也可以重定向输出输出, 这意味着程序的输出日志可以被外部控制而写入到文件中. 在具体的操作系统中, 手动输出的换行符可能与操作系统不匹配, 而导致文件的换行显示错误.

因此在任何代码中都不要企图输出 \n 来期待换行, 虽然大部分时候这是正确的. 而应该使用 println 或者 通过 System.getProperty("line.separator") 得到换行符.

与 c语言 的 printf 不同的是, 由于 java 没有 c语言 那样细化的变量类型, 例如 unsigned int, long long 等比较变态的类型, java 对于 long/Long int/Integer short/Short 等整数的输出统一用 %d. 即没有 %ld 之类的东西.

A4 问题中, 斐波那契数列的输出, 不需要建立数组, 因为不需要存储整个数列.

只需要声明三个变量 a,b,c, 然后滑动此窗口, 并逐个输出即可, 例如.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.close();

        long[] window = new long[]{1, 1, 0};
        //处理 n 小于 3 的情况
        for (int i = 1; i <= 2; i++) {
            if (i != 1) System.out.print(" ");
            System.out.print(window[i - 1]);
            if (i == n) return;
        }

        //此处的 i 为自然序号
        for (int i = 3; i <= n; i++) {
            //第三个数等于第一个数加第二个数
            window[2] = window[0] + window[1];
            System.out.print(" " + window[2]);
            //数组整体往左偏移一格, 也可以用循环队列实现
            window[0] = window[1];
            window[1] = window[2];
        }
    }
}

实际上的斐波那契数列在第 93 还是第 94 个就超过 long 的上限了, 所以要用 BigInteger, 比较复杂.

有关于变量命名法, 通常情况下, 使用 x1 格式的变量名辨识度是非常低的, 尤其当代码很长时, 人脑是很难记得所有上文声明过的变量的.

因此通常使用 idea 自动命名,

例如输入

Scanner s

此时 idea 就会提示 scanner, 按一下回车, 变量名就取好了.

自动命名就是把变量类型的第一个字母改成小写.

自动命名可以用变量名本身标示变量类型, 可以很方便的阅读代码而不需要在变量声明处和下文之间来回查看.

自动命名只用于该变量没有特殊的含义或者整个函数里只有它是这个类型的. 例如此处的 Scanner, 是一个用完即丢的变量, 不需要为他起名, 因此直接使用自动命名.

一些地方的自动命名有其他规则, 例如循环中, 在 idea 中输入 fori 按下回车, 将产生如下代码

for (int i = 0; i < ; i++) {
            
 }

循环变量依次按惯例取名为(多重循环)为 i, j, k.

对于有含义的变量名, jdk 自身代码的命名法为匈牙利命名法, 具体比较复杂, 给几个简单的例子.

JButton mutedBlueLoginButton = new JButton()

良好的代码可阅读性是优秀代码的开端.

所以, 博主来跟我学 kotlin 吧, 鸡巴公司出品, 必属精品.

@LiaoGuoYin
Copy link
Owner

LiaoGuoYin commented Jan 11, 2019

如果博主用 idea 的话, 推荐在提交时(git commit)勾选格式化代码选项.

image

这样代码更好看一些, 对于已经存在的代码, 可以在左边文件导航中选择一个文件夹, 然后按 ctrl+alt+L, 对单个文件的自动格式化同理.

注释推荐写在方法前或者类名前, 这样更好阅读.

A3 中提到的的 printf, 来自于 c语言 的 printf 函数(stdio.h), java 的 printf 语法与其一致.

println 意思是 print line, 真实输出的内容不一定是 \n. 而是由变量 "line.separator" 得到的.

在 *nix 操作系统下为 \n, NT 下为 \r\n.

可以使用此代码获取运行时系统的行分隔符

System.getProperty("line.separator")

而在 jdk 源码中(openjdk), 是这样获取的

lineSeparator = java.security.AccessController.doPrivileged(
            new sun.security.action.GetPropertyAction("line.separator"));

此问题意味着, 手动输出的换行符可能是不正确的.

或许命令行里显示是正确的, 但是 System.out 可以被导向文件描述符, 另外具体的操作系统也可以重定向输出输出, 这意味着程序的输出日志可以被外部控制而写入到文件中. 在具体的操作系统中, 手动输出的换行符可能与操作系统不匹配, 而导致文件的换行显示错误.

因此在任何代码中都不要企图输出 \n 来期待换行, 虽然大部分时候这是正确的. 而应该使用 println 或者 通过 System.getProperty("line.separator") 得到换行符.

与 c语言 的 printf 不同的是, 由于 java 没有 c语言 那样细化的变量类型, 例如 unsigned int, long long 等比较变态的类型, java 对于 long/Long int/Integer short/Short 等整数的输出统一用 %d. 即没有 %ld 之类的东西.

A4 问题中, 斐波那契数列的输出, 不需要建立数组, 因为不需要存储整个数列.

只需要声明三个变量 a,b,c, 然后滑动此窗口, 并逐个输出即可, 例如.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.close();

        long[] window = new long[]{1, 1, 0};
        //处理 n 小于 3 的情况
        for (int i = 1; i <= 2; i++) {
            if (i != 1) System.out.print(" ");
            System.out.print(window[i - 1]);
            if (i == n) return;
        }

        //此处的 i 为自然序号
        for (int i = 3; i <= n; i++) {
            //第三个数等于第一个数加第二个数
            window[2] = window[0] + window[1];
            System.out.print(" " + window[2]);
            //数组整体往左偏移一格, 也可以用循环队列实现
            window[0] = window[1];
            window[1] = window[2];
        }
    }
}

实际上的斐波那契数列在第 93 还是第 94 个就超过 long 的上限了, 所以要用 BigInteger, 比较复杂.

有关于变量命名法, 通常情况下, 使用 x1 格式的变量名辨识度是非常低的, 尤其当代码很长时, 人脑是很难记得所有上文声明过的变量的.

因此通常使用 idea 自动命名,

例如输入

Scanner s

此时 idea 就会提示 scanner, 按一下回车, 变量名就取好了.

自动命名就是把变量类型的第一个字母改成小写.

自动命名可以用变量名本身标示变量类型, 可以很方便的阅读代码而不需要在变量声明处和下文之间来回查看.

自动命名只用于该变量没有特殊的含义或者整个函数里只有它是这个类型的. 例如此处的 Scanner, 是一个用完即丢的变量, 不需要为他起名, 因此直接使用自动命名.

一些地方的自动命名有其他规则, 例如循环中, 在 idea 中输入 fori 按下回车, 将产生如下代码

for (int i = 0; i < ; i++) {
            
 }

循环变量依次按惯例取名为(多重循环)为 i, j, k.

对于有含义的变量名, jdk 自身代码的命名法为匈牙利命名法, 具体比较复杂, 给几个简单的例子.

JButton mutedBlueLoginButton = new JButton()

良好的代码可阅读性是优秀代码的开端.

所以, 博主来跟我学 kotlin 吧, 鸡巴公司出品, 必属精品.

嗯嗯 昨天还在和同学说: 我从来没用过issues

今天中午上课刷手机发现老哥居然给我提交这么大一段 issues 惊!
上体育课都心神不宁, 比上次被妹子要微信还尼玛兴奋ahhhhhhhh

换行符那个坑之前踩到过, 也听同学说过同一个代码放在 windowslinux 编译输出的格式略有差异可
能导致在 oj 平台上答题错误,但是我没有细心去挖掘这里面到底是啥篮子.
这才知道居然是操作系统的换行符不一样.
*nix 是 \n macos是 \r Windows 是 \r\n

再说到 javaprintln 的分隔符是由 line.separator 来的瞬间茅舍顿开23333
从这一点上看 看来以后不能懒了 不求甚解就是最后啥都不懂

再斐波那契数列 窗口滑动 这个思路真的是太骚拉666
第一次接触滑动窗口这个概念是 计算机网络 里面TCP的流量控制里边的,
没想到还可以借用过来 数组偏移 这么用, 刚刚敲着用了一下下非常好用,
试了下确实在93个数的时候越界long 6得一匹6得一匹.

代码规范、命名规范这一点我居然从未注意过... 这其实是个很严重的问题, 多亏老哥指出,会慢慢去改..

看到最后一句,笑出声来,JB 公司的 Kotlin 学,必须学!

本来我是不想做伸手党的,但是逼乎csdn找了一圈也没看到比较一致比较好的书和教程,老哥有推荐的书或者教程吗,寒假就准备啃 PAT题和安卓了,估计到时候还得来TG骚扰你 阴险.jpg

开这个Repo,本来是想试试:能不能每天点亮小绿 block, 没想到 czp 老哥粗现了,真的意外,并且老哥指出这多点,实在是受益良多

感蟹·真

@LiaoGuoYin LiaoGuoYin added the good first issue Good for newcomers label Jan 11, 2019
@czp3009
Copy link
Contributor Author

czp3009 commented Jan 11, 2019 via email

@LiaoGuoYin
Copy link
Owner

Java 方面的经典书籍有两本,<Java编程思想> <Java核心技术> 但是并不适合基础较差的新手学习。

实际上我个人是不推崇买很多大部头书籍的。一是大多数书并不适合现代人碎片化的休息时间, 二是技术更新很快,去年买的书今年可能就过时了, 买书比较浪费金钱。

对于想要自学某些语言,算法,框架的同学,我比较推荐使用 谷歌(请勿使用百度)。

大多数技术内容必须要用 英文搜索, 因为对应的中文翻译可能有歧义或者翻译的很糟糕。
举几个例子,套接字,句柄,双亲依赖,这几个词即使看中文,也看不懂他是什么意思。请不要以为这是自己太菜所以看不懂,实际上是翻译的极烂。

而英文搜索可以很好的规避这类问题,直达想要的搜索结果。

如何使用搜索引擎也是一种学问,例如搜索 Java的线程安全问题, 搜索时使用的语句应该如下

不要用任何连词,关键词之间用空格分割。

搜索结果的阅读有优先级,例如对于具体的框架或者语言,如果他有自己的 GitHub
页面甚至是官网,那么优先看官网的教程(Java也有教程,在Oracle网站上,只是很难阅读)(Java本身语法比较简单,只需要搜索所需的算法和设计模式来学习即可)。

然后是是 stack overflow 等问答论坛,这种论坛的回答是针对性的,可以一眼就明确问题的答案。

一般不要去 CSDN 和 知乎。

首先是 CSDN,大多数 CSDN 都是垃圾文,你抄我我抄你,而一开始那个被抄的就是不正确的。这个现象的出现是由于 CSDN 博客的盈利模式导致的。
CSDN 博主必须让自己的博文被尽可能多的人阅读,所以会疯狂复制别人的文章,哪怕自己并不能识别这篇文章是不是正确的,新手很容易被带进坑。

然后是知乎,知乎的回答者通常喜欢 抖机灵,回答不规范,不严谨,而且喜欢掺杂自我意识形态,可以当乐子看,但是千万不要当作什么真理来阅读。

几个著名的站点给你推荐一下,除了上面提到的 stack overflow,还有 stack Exchange,以及比较小的 segment
fault。都是问答论坛。

另外还有 ibm.com 上的开发者模块也有很多很好的文章(涵盖各种语言),会讲述一些非常细致的技术问题。

其实,自学也是一门技术。

进击的瓜皮 notifications@github.com 于 2019年1月11日周五 下午10:46写道:

如果博主用 idea 的话, 推荐在提交时(git commit)勾选格式化代码选项.

[image: image]
https://user-images.githubusercontent.com/17246126/50964380-17859f00-150a-11e9-80c1-d0ffdfb60a5d.png

这样代码更好看一些, 对于已经存在的代码, 可以在左边文件导航中选择一个文件夹, 然后按 ctrl+alt+L, 对单个文件的自动格式化同理.

注释推荐写在方法前或者类名前, 这样更好阅读.

A3 中提到的的 printf, 来自于 c语言 的 printf 函数(stdio.h), java 的 printf 语法与其一致.

println 意思是 print line, 真实输出的内容不一定是 \n. 而是由变量 "line.separator" 得到的.

在 *nix 操作系统下为 \n, NT 下为 \r\n.

可以使用此代码获取运行时系统的行分隔符

System.getProperty("line.separator")

而在 jdk 源码中(openjdk), 是这样获取的

lineSeparator = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("line.separator"));

此问题意味着, 手动输出的换行符可能是不正确的.

或许命令行里显示是正确的, 但是 System.out 可以被导向文件描述符, 另外具体的操作系统也可以重定向输出输出,
这意味着程序的输出日志可以被外部控制而写入到文件中. 在具体的操作系统中, 手动输出的换行符可能与操作系统不匹配, 而导致文件的换行显示错误.

因此在任何代码中都不要企图输出 \n 来期待换行, 虽然大部分时候这是正确的. 而应该使用 println 或者 通过
System.getProperty("line.separator") 得到换行符.

与 c语言 的 printf 不同的是, 由于 java 没有 c语言 那样细化的变量类型, 例如 unsigned int, long long
等比较变态的类型, java 对于 long/Long int/Integer short/Short 等整数的输出统一用 %d. 即没有 %ld
之类的东西.

A4 问题中, 斐波那契数列的输出, 不需要建立数组, 因为不需要存储整个数列.

只需要声明三个变量 a,b,c, 然后滑动此窗口, 并逐个输出即可, 例如.

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();

    long[] window = new long[]{1, 1, 0};
    //处理 n 小于 3 的情况
    for (int i = 1; i <= 2; i++) {
        if (i != 1) System.out.print(" ");
        System.out.print(window[i - 1]);
        if (i == n) return;
    }

    //此处的 i 为自然序号
    for (int i = 3; i <= n; i++) {
        //第三个数等于第一个数加第二个数
        window[2] = window[0] + window[1];
        System.out.print(" " + window[2]);
        //数组整体往左偏移一格, 也可以用循环队列实现
        window[0] = window[1];
        window[1] = window[2];
    }
}

}

实际上的斐波那契数列在第 93 还是第 94 个就超过 long 的上限了, 所以要用 BigInteger, 比较复杂.

有关于变量命名法, 通常情况下, 使用 x1 格式的变量名辨识度是非常低的, 尤其当代码很长时, 人脑是很难记得所有上文声明过的变量的.

因此通常使用 idea 自动命名,

例如输入

Scanner s

此时 idea 就会提示 scanner, 按一下回车, 变量名就取好了.

自动命名就是把变量类型的第一个字母改成小写.

自动命名可以用变量名本身标示变量类型, 可以很方便的阅读代码而不需要在变量声明处和下文之间来回查看.

自动命名只用于该变量没有特殊的含义或者整个函数里只有它是这个类型的. 例如此处的 Scanner, 是一个用完即丢的变量, 不需要为他起名,
因此直接使用自动命名.

一些地方的自动命名有其他规则, 例如循环中, 在 idea 中输入 fori 按下回车, 将产生如下代码

for (int i = 0; i < ; i++) {

}

循环变量依次按惯例取名为(多重循环)为 i, j, k.

对于有含义的变量名, jdk 自身代码的命名法为匈牙利命名法, 具体比较复杂, 给几个简单的例子.

JButton mutedBlueLoginButton = new JButton()

良好的代码可阅读性是优秀代码的开端.

所以, 博主来跟我学 kotlin 吧, 鸡巴公司出品, 必属精品.

嗯嗯 昨天还在和同学说: 我从来没用过issues

今天中午上课刷手机发现老哥居然给我提交这么大一段 issues 惊!
上体育课都心神不宁, 比上次被妹子要微信还尼玛兴奋ahhhhhhhh

换行符那个坑之前踩到过, 也听同学说过同一个代码放在 windows 和 linux 编译输出的格式略有差异可
能导致在 oj 平台上答题错误,但是我没有细心去挖掘这里面到底是啥篮子.
这才知道居然是操作系统的换行符不一样.
*nix 是 \n macos是 \r Windows 是 \r\n

再说到 java 的 println 的分隔符是由 line.separator 来的瞬间茅舍顿开23333
从这一点上看 看来以后不能懒了 不求甚解就是最后啥都不懂

再斐波那契数列 窗口滑动 这个思路真的是太骚拉666
第一次接触滑动窗口这个概念是 计算机网络 里面TCP的流量控制里边的,
没想到还可以借用过来 数组偏移 这么用, 刚刚敲着用了一下下非常好用,
试了下确实在93个数的时候越界long 6得一匹6得一匹.

代码规范、命名规范这一点我居然从未注意过... 这其实是个很严重的问题, 多亏老哥指出,会慢慢去改..

看到最后一句,笑出声来,JB 公司的 Kotlin 学,必须学!

本来我是不想做伸手党的,但是逼乎csdn找了一圈也没看到比较一致比较好的书和教程,老哥有推荐的书或者教程吗,寒假就准备啃
PAT题和安卓了,估计到时候还得来TG骚扰你 阴险.jpg

开这个Repo,本来是想试试:能不能每天点亮小绿block, 没想到czp老哥粗现了,真的意外,并且老哥指出这多点,实在是受益良多

感蟹·真


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#1 (comment), or mute
the thread
https://github.com/notifications/unsubscribe-auth/AQcnrsuIkSihi1bWkYves74RHHDD2W2Lks5vCKPcgaJpZM4Z5Xmt
.

大部头的那个《java编程思想》 确实是一翻开就没看下去的欲望了 流下了不学无术的眼泪.jpg

csdn你抄我我抄你这个现象是真的让人无语... 经常找问题找过去找过来都是那几个原始答案

stackoverflow; statck Exchange; segment fault; ibm.com
上谷歌+吭英文教材
getget,再次感谢老哥的耐心解答:)

@czp3009
Copy link
Contributor Author

czp3009 commented Jan 12, 2019 via email

@LiaoGuoYin
Copy link
Owner

之前你提到刷 pat,如果是指 patest 的话,我建议不要太过沉迷这个网站。因为 patest 经常过分纠结于输出格式(什么末尾可以有空行,可以少空格之类的他都得特意写出来)而忽略了算法本身,同时也缺少对于某些方面的专项训练。例如面向对象设计,处理错误的用户输入等,这些实际上比代码本身更重要。 我建议使用 https://leetcode.com 这是全球最强的程序学习平台,其专项训练甚至覆盖到 shell,SQL,以实际使用为基础进行训练,绝不搞学院派那一套东西。 另外 patest 缺少最重要的反馈和统计,用户做完一道题之后,不能看到其他人的优秀解答,然而众所周知,学习的本质就是复制他人的行为,既然都没有反馈,何谈学习,所以我完全不知道 patest 的设计为何如此糟糕。以至于我在大学里对老师推荐的 patest 非常反感。 leetcode 还提供类似评论的功能,用户可以在一道题目下提出各种问题。这可以避免题目描述缺陷(实际上 patest 经常题目讲的不明不白),也可以解决具体的某种语言处理这个问题遇到的额外问题。 你不是一个人在做题。 进击的瓜皮 notifications@github.com 于 2019年1月12日周六 上午1:05写道:

Java 方面的经典书籍有两本,<Java编程思想> <Java核心技术> 但是并不适合基础较差的新手学习。 实际上我个人是不推崇买很多大部头书籍的。一是大多数书并不适合现代人碎片化的休息时间, 二是技术更新很快,去年买的书今年可能就过时了, 买书比较浪费金钱。 对于想要自学某些语言,算法,框架的同学,我比较推荐使用 谷歌(请勿使用百度)。 大多数技术内容必须要用 英文搜索, 因为对应的中文翻译可能有歧义或者翻译的很糟糕。 举几个例子,套接字,句柄,双亲依赖,这几个词即使看中文,也看不懂他是什么意思。请不要以为这是自己太菜所以看不懂,实际上是翻译的极烂。 而英文搜索可以很好的规避这类问题,直达想要的搜索结果。 如何使用搜索引擎也是一种学问,例如搜索 Java的线程安全问题, 搜索时使用的语句应该如下 不要用任何连词,关键词之间用空格分割。 搜索结果的阅读有优先级,例如对于具体的框架或者语言,如果他有自己的 GitHub 页面甚至是官网,那么优先看官网的教程(Java也有教程,在Oracle网站上,只是很难阅读)(Java本身语法比较简单,只需要搜索所需的算法和设计模式来学习即可)。 然后是是 stack overflow 等问答论坛,这种论坛的回答是针对性的,可以一眼就明确问题的答案。 一般不要去 CSDN 和 知乎。 首先是 CSDN,大多数 CSDN 都是垃圾文,你抄我我抄你,而一开始那个被抄的就是不正确的。这个现象的出现是由于 CSDN 博客的盈利模式导致的。 CSDN 博主必须让自己的博文被尽可能多的人阅读,所以会疯狂复制别人的文章,哪怕自己并不能识别这篇文章是不是正确的,新手很容易被带进坑。 然后是知乎,知乎的回答者通常喜欢 抖机灵,回答不规范,不严谨,而且喜欢掺杂自我意识形态,可以当乐子看,但是千万不要当作什么真理来阅读。 几个著名的站点给你推荐一下,除了上面提到的 stack overflow,还有 stack Exchange,以及比较小的 segment fault。都是问答论坛。 另外还有 ibm.com 上的开发者模块也有很多很好的文章(涵盖各种语言),会讲述一些非常细致的技术问题。 其实,自学也是一门技术。 进击的瓜皮 @.*** 于 2019年1月11日周五 下午10:46写道: 如果博主用 idea 的话, 推荐在提交时(git commit)勾选格式化代码选项. [image: image] https://user-images.githubusercontent.com/17246126/50964380-17859f00-150a-11e9-80c1-d0ffdfb60a5d.png 这样代码更好看一些, 对于已经存在的代码, 可以在左边文件导航中选择一个文件夹, 然后按 ctrl+alt+L, 对单个文件的自动格式化同理. 注释推荐写在方法前或者类名前, 这样更好阅读. A3 中提到的的 printf, 来自于 c语言 的 printf 函数(stdio.h), java 的 printf 语法与其一致. println 意思是 print line, 真实输出的内容不一定是 \n. 而是由变量 "line.separator" 得到的. 在 *nix 操作系统下为 \n, NT 下为 \r\n. 可以使用此代码获取运行时系统的行分隔符 System.getProperty("line.separator") 而在 jdk 源码中(openjdk), 是这样获取的 lineSeparator = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); 此问题意味着, 手动输出的换行符可能是不正确的. 或许命令行里显示是正确的, 但是 System.out 可以被导向文件描述符, 另外具体的操作系统也可以重定向输出输出, 这意味着程序的输出日志可以被外部控制而写入到文件中. 在具体的操作系统中, 手动输出的换行符可能与操作系统不匹配, 而导致文件的换行显示错误. 因此在任何代码中都不要企图输出 \n 来期待换行, 虽然大部分时候这是正确的. 而应该使用 println 或者 通过 System.getProperty("line.separator") 得到换行符. 与 c语言 的 printf 不同的是, 由于 java 没有 c语言 那样细化的变量类型, 例如 unsigned int, long long 等比较变态的类型, java 对于 long/Long int/Integer short/Short 等整数的输出统一用 %d. 即没有 %ld 之类的东西. A4 问题中, 斐波那契数列的输出, 不需要建立数组, 因为不需要存储整个数列. 只需要声明三个变量 a,b,c, 然后滑动此窗口, 并逐个输出即可, 例如. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); scanner.close(); long[] window = new long[]{1, 1, 0}; //处理 n 小于 3 的情况 for (int i = 1; i <= 2; i++) { if (i != 1) System.out.print(" "); System.out.print(window[i - 1]); if (i == n) return; } //此处的 i 为自然序号 for (int i = 3; i <= n; i++) { //第三个数等于第一个数加第二个数 window[2] = window[0] + window[1]; System.out.print(" " + window[2]); //数组整体往左偏移一格, 也可以用循环队列实现 window[0] = window[1]; window[1] = window[2]; } } } 实际上的斐波那契数列在第 93 还是第 94 个就超过 long 的上限了, 所以要用 BigInteger, 比较复杂. 有关于变量命名法, 通常情况下, 使用 x1 格式的变量名辨识度是非常低的, 尤其当代码很长时, 人脑是很难记得所有上文声明过的变量的. 因此通常使用 idea 自动命名, 例如输入 Scanner s 此时 idea 就会提示 scanner, 按一下回车, 变量名就取好了. 自动命名就是把变量类型的第一个字母改成小写. 自动命名可以用变量名本身标示变量类型, 可以很方便的阅读代码而不需要在变量声明处和下文之间来回查看. 自动命名只用于该变量没有特殊的含义或者整个函数里只有它是这个类型的. 例如此处的 Scanner, 是一个用完即丢的变量, 不需要为他起名, 因此直接使用自动命名. 一些地方的自动命名有其他规则, 例如循环中, 在 idea 中输入 fori 按下回车, 将产生如下代码 for (int i = 0; i < ; i++) { } 循环变量依次按惯例取名为(多重循环)为 i, j, k. 对于有含义的变量名, jdk 自身代码的命名法为匈牙利命名法, 具体比较复杂, 给几个简单的例子. JButton mutedBlueLoginButton = new JButton() 良好的代码可阅读性是优秀代码的开端. 所以, 博主来跟我学 kotlin 吧, 鸡巴公司出品, 必属精品. 嗯嗯 昨天还在和同学说: 我从来没用过issues 今天中午上课刷手机发现老哥居然给我提交这么大一段 issues 惊! 上体育课都心神不宁, 比上次被妹子要微信还尼玛兴奋ahhhhhhhh 换行符那个坑之前踩到过, 也听同学说过同一个代码放在 windows 和 linux 编译输出的格式略有差异可 能导致在 oj 平台上答题错误,但是我没有细心去挖掘这里面到底是啥篮子. 这才知道居然是操作系统的换行符不一样. *nix 是 \n macos是 \r Windows 是 \r\n 再说到 java 的 println 的分隔符是由 line.separator 来的瞬间茅舍顿开23333 从这一点上看 看来以后不能懒了 不求甚解就是最后啥都不懂 再斐波那契数列 窗口滑动 这个思路真的是太骚拉666 第一次接触滑动窗口这个概念是 计算机网络 里面TCP的流量控制里边的, 没想到还可以借用过来 数组偏移 这么用, 刚刚敲着用了一下下非常好用, 试了下确实在93个数的时候越界long 6得一匹6得一匹. 代码规范、命名规范这一点我居然从未注意过... 这其实是个很严重的问题, 多亏老哥指出,会慢慢去改.. 看到最后一句,笑出声来,JB 公司的 Kotlin 学,必须学! 本来我是不想做伸手党的,但是逼乎csdn找了一圈也没看到比较一致比较好的书和教程,老哥有推荐的书或者教程吗,寒假就准备啃 PAT题和安卓了,估计到时候还得来TG骚扰你 阴险.jpg 开这个Repo,本来是想试试:能不能每天点亮小绿block, 没想到czp老哥粗现了,真的意外,并且老哥指出这多点,实在是受益良多 感蟹·真 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub #1 (comment) <#1 (comment)>, or mute the thread https://github.com/notifications/unsubscribe-auth/AQcnrsuIkSihi1bWkYves74RHHDD2W2Lks5vCKPcgaJpZM4Z5Xmt . 大部头的那个《java编程思想》 确实是一翻开就没看下去的欲望了 流下了不学无术的眼泪.jpg csdn你抄我我抄你这个现象是真的让人无语... 经常找问题找过去找过来都是那几个原始答案 stackoverflow; statck Exchange; segment fault; ibm.com 上谷歌+吭英文教材 getget,再次感谢老哥的耐心解答:) — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#1 (comment)>, or mute the thread https://github.com/notifications/unsubscribe-auth/AQcnrlKuA9zfDENbKfl-htHyhVGiT0tXks5vCMROgaJpZM4Z5Xmt .

去体验了几把LeetCode 体验吹爆...

我现在做 PAT 只是想熟悉下那个天梯比赛的题目😂
实际上我这才接触数据结构算法啥的,瓜皮得很,得慢慢去感受感受LeetCode

另外非常非常好奇 老哥现在是现在是在读吗、还是已经工作了啊= =~

@czp3009
Copy link
Contributor Author

czp3009 commented Jan 13, 2019 via email

@LiaoGuoYin
Copy link
Owner

LiaoGuoYin commented Jan 13, 2019

由于学校很烂,随便找了一个工作。 国内大多数大学的毕业生毕业时的水平可以用一个词形容“一无所知”(计算机类专业),导致所有公司都不敢招应届毕业生,简单的说,应届毕业生除非学校名字很好,不然极难找工作。 目前国内这方面的公司通常是使用 培训模式(包括bat)。也就是招收刚上大四的学生作为实习生(毕业生不招)然后培训与观察一年,再转正一年后还留着的实习生。 之前我在学校里的时候过分关注技术问题,这些事情当时完全不知道,实习也是随便找了一个,只是为了交差(向学校里)(就业统计)。毕业后凭这么烂的学校的毕业生去投简历所有公司都渺无音讯。(公司所说的应届生是一年后毕业的学生,真实的应届生属于社招,简历会直接被刷掉)。 丁香园的内推我从内推我的人那里得到了一句反馈消息,大意是这样的“每天有那么多人投简历,我为什么要去面试一个毕业了还没有工作的”。这意思就是说,毕业了却不在一个公司里,说明此人非常菜,属于末流,所以即使是内推,也不会有面试机会。 面试也是有技巧的,之前有两家公司愿意面试我,每一个问题我都做了非常细致的回答,但是后来想起来,我似乎回答的太多了,面试官的表情似乎是没听懂的样子(这样就会认为我是在乱说)。面试问题通常是面试官昨天晚上在面试宝典临时背的,而面试宝典的标准回答跟真正理解这个问题的人回答是不太一样的。类似于高中语文题,得按那一个套路来回答(八股文),毕竟很多面试官自己是不精通技术的。 最近又遇上国内IT行业寒冬(经济泡沫破裂),各大公司带着小公司一起裁员,很快就有很多人要家里蹲了。 在我毕业之后我才开始了解社会上的问题,这一行业大多数老板只认为程序员是写代码的,简称搬砖。所以国内程序员没有什么出路。国际有名的明星程序员有很多,但是国内可能永远不会有。甚至一些公司做法甚至非常极端,例如华为辞退了所有35岁以上的开发人员。 如果你还在大一或者大二,并且这个专业本身就是调剂过来的或者对计算机兴趣不是浓厚到睡觉还在想问题,我建议改行。 (才发现用邮件回复的issue换行不会自动变成两个 进击的瓜皮 notifications@github.com 于 2019年1月12日周六 下午8:28写道:

去体验了几把LeetCode 体验吹爆... 我现在做 PAT 只是想熟悉下那个天梯比赛的题目😂 实际上我这才接触数据结构算法啥的,瓜皮得很,得慢慢去感受感受LeetCode 另外非常非常好奇 老哥现在是现在是在读吗、还是已经工作了啊= =~ — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#1 (comment)>, or mute the thread https://github.com/notifications/unsubscribe-auth/AQcnrg-1Ty6_VL8d8whoqBp98rXYkRlLks5vCdTsgaJpZM4Z5Xmt .

  • 建议转行。最后,看到这劝退字样让我有点懵= =!

好好捋了捋我备好背包走上这条路的理由。之前一直以为,互联网寒冬什么的离我很遥远,这也还不是我这个阶段改想的问题,我对在互联网有走下去有莫名的决心和信心

但是了解了这些社会行业现状,又不免警觉起来:这个饭碗可能没我想象之中那么容易拿得起来.

其实前面有段时间,我在这个问题上我也有过苦恼,就是在当我学一样东西的时候,我发现我08、09年的文档资料就能解决我当时遇到的问题,我为什么要学这些东西,学出来的核心竞争力又在哪里?现在又行行转cs,培训班里面去熬一熬,厨师也能摇身一变也下得了厨房 撸得来代码。

我就在想,我之后也就是这样一个没有思想的芦苇吗?
当然不想,只是我在现阶段应该怎么做、应该学什么,这是让我怎么也琢磨不透的问题。
在大一一路走过来发现自己学习能力有限、耐性有限、方法错误,而且不光是在技术上,在自身很多认知层面的东西还很不成熟。好在慢慢摸索,慢慢尝试、暗地里慢慢努力或许能凑效

我现在本科也普通得不能再普通—XX工程技术大学,所以当了解到现在应届生就业的真实境况的时候我不禁背脊发凉, 好在专业还算对自己胃口 信息管理与信息系统 .

前一阶段去和系主任唠嗑解闷,他也说专业的培养方案逐步从传统的开发者、产品经理 转到做 数据分析 这块来,了解过这个之后 兴趣不减,更坚定了我要抢着吃上计算机这碗饭的想法。当然专业的培养方案和我个人的发展谈不上特别特别多的关联,一切还得靠自己.

其实袒露了这么多,我觉得凝聚成一句话就是内心拷问过后,我还是想干这行!

于我而言,还是相信互联网冬天离我比较遥远,在这个阶段把该努力的劲都使上了,选择的眼光没有太走偏,我相信寒冬不会过分为难我。退一步说,即便站错队,也还年轻,有退路可选。
这应该不算是盲目乐观吧ahhhhh

也不知道我大二了解这么多 真♂实 的东西是好是坏23333,有东西吊在头顶警醒着自己肯定是件好事。
老哥说这么多应该是担心我能不能顶得住,如你前面说说的,当复读机没了反馈,备受挫败感就可能会夭折,本来,我其实也担心这个问题… 但是如今说明了了,总归来说,我觉得我的信念反而是更坚定了…

几番交谈感jio老哥是个很有实力,而且眼界比较宽广的人。我相信你口中说的‘随便’找的工作绝壁是谦词,只是可能自我能力还没得到最大化的施展罢了,·真·心·真·意祝老哥早日拿到自己满意的offer,我也会努力,到时候等着你在那里面内推我 ahhhhhh:)

很喜欢这种复古email的交谈方式,让不善言辞的我能静下心来把自己的逻辑捋清倾述袒露出来,也很感谢你愿意抽出时间给素面未识的瓜皮,连续几天讲这么多,让我了解这么多.

最后的最后,来湖北恩施(家)和辽宁葫芦岛(学校)的话记得联系我,管吃管住 疯狂暗示.jpg。

@czp3009
Copy link
Contributor Author

czp3009 commented Jan 13, 2019 via email

@LiaoGuoYin
Copy link
Owner

要得hhhhhhhhhhhh

@czp3009 czp3009 closed this as completed Jan 15, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants