前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dimple在左耳听风ARTS打卡(第五期)

Dimple在左耳听风ARTS打卡(第五期)

作者头像
程序员小跃
发布2019-12-25 17:19:28
3370
发布2019-12-25 17:19:28
举报
文章被收录于专栏:程序员小跃程序员小跃

所谓ARTS:每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)这是第五期打卡。

Algorithm LeetCode算法

最长公共前缀 (https://leetcode.com/problems/longest-common-prefix/)

题目描述:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1:

代码语言:javascript
复制
输入:["flower","flow","flight"]
输出: "fl"

示例 2:

代码语言:javascript
复制
输入:["dog","racecar","car"]
输出: ""
解释:输入不存在公共前缀

说明:所有输入只包含小写字母 a-z。

这题有一个很大的坑,就是边界问题,小编给的答案好几次不通过,就是因为遇到了各个边界问题没有处理好,导致一直出错,甚至还出现了一次数组越界,尴尬。在小编代码习惯里,其实理论上已经做了处理的,可能在跑算法的时候确实不行吧。

而且,这次虽然是标记为简单的题目,但是解法却有很多,小编看这题讨论的也是很激烈。如你所想,小编还是没有很给力,写了个双重循环,循环来判断是否符合要求,而且还提交了好几次。

在题解里,分别有几种方法,水平扫描法水平扫描分治二分查找法,这题小编感觉很是经典,解答的示例和解释小编看了好几遍,学习了好几遍。(https://leetcode-cn.com/problems/longest-common-prefix/solution/)这是中文版地址的解答描述,大家可以去看下,小编在这里就不一一赘述啦。

代码语言:javascript
复制
public static String longestCommonPrefix(String[] strs) {
        if (strs.length < 0) {
            return "";
        }

        if (strs.length == 1) {
            return strs[0];
        }

        StringBuilder stringBuilder = new StringBuilder();
        if (strs.length > 1) {
            int length = strs[0].length();
            for (int i = 0; i < length; i++) {
                String[] aStringArr = strs[0].split("");
                String info = aStringArr[i];
                for (int j = 1; j < strs.length; j++) {
                    if (strs[j].length() <= i || !String.valueOf(strs[j].charAt(i)).equals(info)) {
                        return stringBuilder.toString();
                    }

                    if (String.valueOf(strs[j].charAt(i)).equals(info) && j == (strs.length - 1)) {
                        stringBuilder.append(info);
                    }
                }
            }
        }

        return stringBuilder.toString();
    }

Review 阅读并点评至少一篇英文文章

Android Q Beta 2 is now available, including new ‘bubbles’ for multi-tasking (https://thenextweb.com/google/2019/04/03/android-q-beta-2-is-now-available-including-a-new-way-to-multi-task/)

前段时间,Android更新了最新版本Android Q的Beta1,现在又更新了Beta2,作为曾经狂热的Android开发者,现在是Java开发,还是迫不及待地想了解一番最新版本的Android到底有什么美妙的地方。

文中着重介绍了Android Q Bete1版本有个隐藏的功能,将通知放在浮动的“气泡”中,类似于Facebook的Chat Heads消息。这个有一个好处就是,可以让你在不下拉通知栏的情况下阅读通知,并可以在手上使用手机的时候轻松完成更多的任务。但是,他之所以隐藏,是因为感觉还不成熟。

但是,后面又进行了这个想法的猜想,比如之前说的Facebook有类似的功能,那我们就可以想到,其实我们的短信,微信也是可以这样的。在消息来的第一时间用一个气泡提示框弹出,并且快速回复。小编在想,如果那时候我正在玩王者荣耀,正在吃鸡咋办,不过攻城狮们肯定已经想到何事开启啦。或者王者荣耀等游戏、或者手机开发厂商定制ROM的时候,肯定已经制定好对策,比如来一个游戏勿扰模式等等。这个勿扰模式貌似现在是不是已经有的了,那就是勿扰增强模式吧。

不过都是猜想,要是现在有一台谷歌亲儿子,那是可以考虑升级一下的。噢?什么是谷歌亲儿子?那就是对我们略遥远的Pixel phone啦,目前只有他可以下载更新Android Q Beta1和Beta2版本。小编朋友有个Google忠实粉,好像入手过的,回头看看,让他尝尝鲜,顺带看看刚才说的打游戏情景下如何处理吧。

虽然离开Android开发一年多了,但是Android生态真的是感觉越来越好,小编在考虑业余时间也还是需要重拾Android的,毕竟方便调试,方便自主开发,方便实现自己想要的功能的App。还记得当初自学的时候,那种自己编写,自己成功的感觉很爽。你觉得呢?

Tip 一个技术技巧

上次聊到的是我学习《Java核心技术36讲》中第26讲的内容,这次我把第27讲做的笔记和大家分享下,主要是描述Java垃圾收集器相关的内容。学完Java这门课程,还输出了一篇读后感,在share部分一同分享给大家,和大家一起在Java的世界里遨游。

垃圾收集器(GC,Garbage Collector) 典型回答

  • Serial GC,它是最古老的垃圾收集器,体现在其收集工作是单线程的,并且在进行垃圾收集过程中,会进入臭名昭著的“Stop-The-World”状态 从年代的角度,通常将其老年代实现单独称作Serial Old,它采用了标记-整理(Mark-Compact)算法,区别于新生代的复制算法。对应的JVM参数是:-XX:+UserSerialGC
  • ParNew GC,很明显是个新生代GC实现,它实际是Serial GC的多线程版本,最常见的应用场景是配合老年代的CMS GC工作,对应参数:-XX:+UserConcMarkSweepGC -XX:+UserParNewGC
  • CMS(Concurrent Mark Sweep)GC,基于标记-清除(Mark-Sweep)算法,设计目标是尽量减少停顿时间。攒在这内存碎片化问题,所以难以避免在长时间运行等情况下发生full GC。因为并发,CMS会占用更多CPU资源,并和用户线程争抢
  • Parrallel GC,早起JDK 8等版本中,是server模式JVM的默认GC选择,被称作吞吐量优先的GC。特点是新生代和老年代GC都是并行进行的,在常见的服务器环境中更加高效。 开启选项:-XX:+UserParallelGC
  • 另外,Parrallel GC引入了开发者友好的配置项,我们可以直接设置暂停时间或吞吐量等目标,JVM会自动进行适应性调整,例如
代码语言:javascript
复制
    -XX:MaxGCPauseMillis=value
    -XX:GCTimeRatio=N // GC 时间和用户时间比例 = 1/(N+1)
  • G1 GC 这是一种兼顾吞吐量和停顿时间的 GC 实现,是JDK 9以后的默认GC选项
常见的垃圾收集器算法
  • 复制(Copying)算法,新生代GC
  • 标记-清除(Mark-Sweep)算法
  • 标记-整理(Mark-Compact),类似于标记-清除,但我为了避免内存碎片化,它会在清理过程中将对象移动, 以确保移动后的对象占用连续的内存空间

Share 一篇有观点和思考的技术文章

继续设计模式的学习执行,更新到观察者模式。在上面说道,我学习Java输出了一篇学后感,和大家一起共勉。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑吧攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Algorithm LeetCode算法
  • Review 阅读并点评至少一篇英文文章
  • Tip 一个技术技巧
    • 常见的垃圾收集器算法
    • Share 一篇有观点和思考的技术文章
    相关产品与服务
    短信
    腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档