ARTS 第一周

  • Algorithm主要是为了编程训练和学习。每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell
  • Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。所以,需要你阅读并点评至少一篇英文技术文章,我个人最喜欢去的地方是http://Medium.com(需要梯子)以及各个公司的技术blog,如Netflix的。
  • Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。
  • Share:主要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考的技术文章

打卡地址

Algorithm 算法

整数反转

两种方式

1.模10

  • 使用int接收(有误)

    public static int reverse(int x) {
        int returnInt = 0;
        if (x > Integer.MAX_VALUE || x < Integer.MIN_VALUE) {
            return 0;
        }
        while (x/10 !=0 ) {
            returnInt = returnInt * 10 + x % 10;
            x = x/10;
        }
        try {
            returnInt = returnInt * 10 + x;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
        return returnInt;
    }

使用int接收返回值,使用int接收,尽管最开始判断了是否超过范围,但是在反转的最后一部时有可能会超出范围,

比如传递的参数是2147483647,在returnInt = returnInt * 10 + x;这个最后一部时,计算结果为-1126087180,数值已经有问题了。所以为了避免结果超过int最大值,要使用long来接收反转的值,最后再判断反转后的值是否大于int最大值。

   

  • 使用long接收

    public static int reverse(int x) {
        long returnInt = 0;
        if (x > Integer.MAX_VALUE || x < Integer.MIN_VALUE) {
            return 0;
        }
        while (x/10 !=0 ) {
            returnInt = returnInt * 10 + x % 10;
            x = x/10;
        }
        returnInt = returnInt * 10 + x;
        if (returnInt > Integer.MAX_VALUE || returnInt < Integer.MIN_VALUE) {
            return 0;
        }
        return (int)returnInt;
    }

2.字符串反转 

    public static int reverse(int x) {
        long returnInt = 0;
        if (x > Integer.MAX_VALUE || x < Integer.MIN_VALUE) {
            return 0;
        }
        if (x/10 ==0) {
            // x是正负一位数.
            return x;
        }
        String xS = String.valueOf(new Integer(x));
        // 负数标识.
        boolean negative = false;
        if (x < 0) {
            xS = xS.substring(1, xS.length());
            negative = true;
        }
        StringBuffer sb = new StringBuffer(xS);
        sb = sb.reverse();
        xS = sb.toString();
        // 去除开头的0.
        while (xS.startsWith("0")) {
            xS = xS.substring(1, xS.length());
        }
        returnInt = Long.parseLong(xS);
        if (negative) {
            returnInt = -returnInt;
        }
        if (returnInt > Integer.MAX_VALUE || returnInt < Integer.MIN_VALUE) {
            return 0;
        }
        return (int)returnInt;
    }

 

 

Review 回顾

看到耗子叔《左耳听风》第71节《程序员练级攻略:正式入门》中推荐的《The Key To Accelerating Your Coding Skills》于是开始阅读,估计要花上几周,英语是在太烂,所以原谅我在这里把不会的单词词组也列出来,毕竟耗子叔也说是为了学英语(哭)。

 

inflection point:拐点

phase:阶段

self-sufficient:自给自足

frustrating :令人沮丧的

accelerate:加快,促进

encounter:遭遇

invaluable :无价的;非常宝贵的

start out:启程,出发;开始(着手)做

domain-specific:特定领域

extract :提取;获得

encompasses:包含

protocols:协议

apparent:明显的

patterns:模式

initially:最初

over time:随着时间的过去

 

Once you master certain tasks, the broad strokes of how the pieces fit together will start to become apparent

一旦你精通某一工作,那么它是如何组成的将会变得明显起来。

materials:材料

tutorials:教程

Even the most minor typos and misspellings will result in error messages or bugs

即使最细微的拼写错误也会导致错误信息和bug

 

frustrating :令人沮丧的

crucial:至关重要的;关键性的

Seeing error messages is a frustrating experience at first, but it’s a crucial step in the learning process

一开始看到错误信息是一种令人沮丧的体验,但这也是学习过程中至关重要的一步。

 

detail-oriented:注重细节

incredibly:极端地;极其;令人难以置信

Debugging error messages is incredibly important.

调试错误信息极其重要

The fact of the matter is, error messages are just a part of programming: they are seen by inexperienced and very experienced developers alike

事实上,错误信息恰恰是编程的一部分:没经验的和有经验的开发人员都会看到它们。

 

 

 

Tip 知识点

sql相关的问题

能关联就不要子查询,有时候子查询会慢上百倍

对于我来说,子查询的方式确实更容易让人理解,当一个表中的数据等于另一个表中的数据时(=),当一个表中的数据在另一个表的范围中时(in),巴拉巴拉,这速度简直是给自己挖坑。

之前还有一个sql没有理清思路,使用了union all 的方式,其实左关联后用or的方式就解决了。

总之要理清思路,多数时候还是可以进行表关联的。

    select
      DISTINCT
      f.docId AS id,
      f.file_name AS file_name,
      f.create_time AS create_time,
      f.update_time AS update_time,
      f.create_user AS create_user,
      f.update_user AS update_user,
      f.file_url AS file_url
    from
      view_file_manage f
    LEFT JOIN tb_sec_mc_task task on (f.groups_id = task.task_id)
    /*LEFT JOIN tb_sec_mc_task task1 on (task.task_root_node = task1.task_id)*/
    LEFT JOIN tb_task_project pro on (task.project_id = pro.project_id)
    LEFT JOIN tb_task_user_relation ttur on
    (
      /*(SUBSTRING_INDEX(ttur.path_code, '-', 1) = task1.task_path_code  and ttur.role_type in(31,35,41,51) and ttur.project_id=task1.project_id)*/
      (ttur.task_id = task.task_id  and ttur.role_type in(31,35,41,51))
      or
      (ttur.project_id = task.project_id and ttur.role_type in(11,15,21,1))
    )
    WHERE f.file_name is not NULL and ttur.user_id =#{userId}
    <if test="fileName != null and fileName!=''">
      AND f.file_name LIKE CONCAT("%"#{fileName,jdbcType=VARCHAR}"%" )
    </if>
    <if test="projectId != null and projectId !='' and type == 'project'">
      AND pro.project_id = #{projectId}
    </if>
    <if test="taskId != null and taskId!='' and type == 'task'">
      AND task.task_id = #{taskId}
    </if>
    ORDER BY f.update_time DESC, f.create_time DESC

 

 

 

 

Share分享

极客时间-许式伟的架构课

这篇文章中关于浏览器的观点,看过之后发人深省。

消除客户端的多样性,并且跨平台提供统一编程接口的,是浏览器

 

浏览器主要改变的是软件分发的方式,让软件可以即取即用,无需安装。

 

假如软件包足够小,那么这种行为和Web应用就毫无区别。不同之处只在于Web应用基于的指令不是机器码,而是更高阶的JavaScript脚本。

 

JavaScript因为指令更高阶,所以程序的尺寸比机器码会有优势。但另一方面来说JavaScript是文本指令,表达效率又要比机器码低。

 

浏览器的地位非常特殊,我们可以看作操作系统之上的操作系统。一旦某种浏览器流行起来,开发人员都在浏览器上做应用,那么必然会导致底层操作系统管道化,这是操作系统厂商所不愿意看到的。

 

而如果浏览器用户量比较少,那么通过它能够触达的用户量就太少,消除不同底层操作系统差异的价值就不存在,开发人员也就不乐意在上面开发应用。

 

有趣的是,移动浏览器的战场似乎是从中国开始打起的,这就是微信引发的小程序之战,它本质上是一场浏览器的战争。

 

浏览器是一个基础软件, 它能够解决多大的问题,依赖于它的市场占有率。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目名称:Java中的简单游戏和应用程序 项目简介: 简单游戏和应用程序是一个Java项目。该项目包含23个不同的Java制作的应用程序和游戏。项目中还包括记事本、拼图等简单应用程序。这是一个单框架程序,你可以选择并运行你希望运行的程序。要运行此项目,你必须在系统上安装JDK路径。 项目简介: 这是一个简单的游戏和应用程序集合,由不同的Java应用程序组成,使该项目独特。你可以选择要运行的程序。如果你想运行记事本,只需在应用程序中点击选项。在记事本中,你可以轻松进行写作,可以处理任何你想要的文本样式。 此外,该项目还包括游戏和测验,例如井字棋和拼图游戏。项目中还提供了字数统计功能。你可以输入任意多的文本,之后可以统计段落中的字数。你还可以玩数独和太空侵略者游戏。不仅如此,你还可以在这个项目中运行不同的应用程序。 项目功能: 记事本:进行文本写作和格式处理。 拼图游戏:挑战你的智力。 井字棋:经典的两人游戏。 字数统计:统计输入文本的字数。 数独:经典的数字填空游戏。 太空侵略者:经典的射击游戏。 其他应用程序和游戏:总计23个不同的程序。 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值