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

Dimple在左耳听风ARTS打卡(十二)

作者头像
程序员小跃
发布2019-12-27 14:57:17
2750
发布2019-12-27 14:57:17
举报
文章被收录于专栏:程序员小跃程序员小跃

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

今天早上更新版本,出现了小插曲,让自己惊出一身冷汗。没想到看到了一篇deadlines的文章,让我好像知道了点什么,也把小插曲的事情忘记了。或许,这就是技术的魅力所在吧。

Algorithm LeetCode算法

最大子序和 (https://leetcode-cn.com/problems/maximum-subarray/)

题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:

代码语言:javascript
复制
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

算法题,就是考察你对算法的熟悉程度,然鹅,小编因为没怎么熟悉,所以经常使用不是很厉害的算法来解题,好尴尬的。

今天这个,小编的第一反应自然就是用循环解法,没想到做完了,才发现,这个叫动态递归,哈哈。其实就是以连续数组结束位置为每一步的解,sum其实就是记录了上一步骤的解,在这个步骤上进行对比,如果上一步的解小于0,那自然就舍弃了。得到当前步骤的解,与之前步骤解的最大值result进行比较,自然就知道答案了。

代码语言:javascript
复制
public static int maxSubArray(int[] nums) {
    int sum = 0;
    int result = nums[0];
    for (int i : nums) {
        sum = sum > 0 ? sum + i : i;
        if (result < sum) {
            result = sum;
        }
    }
    return result;
}

当然啦,这题提示还有一个解法是通过分治法解决的,思路就是通过递归分治不断的缩小规模,问题结果就有三种,左边的解,右边的解,中间的解,得到三个解通过比较大小即可。思路给你啦,因为也不是小编的解答,所以,这里,你自己去试试看吧。

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

How to make peace with deadlines in software development (https://medium.com/free-code-camp/how-to-make-peace-with-deadlines-in-software-development-6cfe3e993f51)

说来也巧,今天通过朋友的努力,让我出去呼吸了下新鲜空气,正好碰到打卡的日子,顺带去看一篇文章。这篇又是标题吸引了我,在我们软件开发的过程中,经常会有各种deadlines,前段时间还因为这个deadlines没确定好的问题,引起了一些不必要的麻烦,在这里就不详细赘述了。

那么如何很好的确定一个deadlines呢?在文中给出了以下11点,为了让我的翻译不迷惑大家,我在这里就把原文的标题给出来了,感兴趣的朋友可以参考原文哦。这里的11点,是作者做的精华总结,真的很赞,值得大家好好品味。

  1. Work in a calm environment
  2. Our estimates suck
  3. Good enough is fine
  4. Don’t be too optimistic. Be realistic
  5. Differentiate between “you have to do”, “you could do” and “you want to do”
  6. Say no by default
  7. Never change the deadline
  8. Be aware that there will be always some problems
  9. Don’t add more people to a project
  10. Don’t procrastinate
  11. Communicate: See where is the bottleneck?

一个好的deadlines的建立,不仅仅需要各方面的能力,还得是自己有能力来做判断。比如第4点,如果技术不够,认清不了现实,那肯定是很难制定出来了。

还有最后一条,一个项目的完成,肯定是一个团队努力的结果。所以,沟通是最最重要的,良好的沟通胜过很多无用功。当然啦,沟通也是有技巧的,怎么做,还得从实际情况实际出发来说,这里小编暂时也没有给出太多的意见来了那就。

Tip 一个技术技巧

Java的技术栈,到上一次为止,先结束了。今天和下次,我将给大家分享下Android的存储优化相关。这是第一篇。

“将特定结构的数据转化为另一种能被记录和还原的格式”

数据存储六个关键要素:正确性、时间开销、空间开销、安全、开发成本和兼容性。

我们今天主要来讲讲Android常用的序列化方法如何进行选择。

对象的序列化
  1. Serializable Serializable的注意事项
  • 不被序列化的字段。类的static变量以及被声明为transient的字段,默认的序列化机制都会忽略该字段,不会进行序列化存储。当然我们也可以使用进阶的writeReplace和readResolve方法做自定义的序列化存储
  • serialVersionUID。这个ID我们可以显示声明也可以让编译器自己计算。通常我建议显示声明更加稳妥。因为隐式声明假如类发生了一点点变化,进行反序列化都会由于serialVersionUID改变而导致InvalidClassException异常
  • 构造方法。
  1. Parcelable 核心作用就是为了解决Android中大量跨进程通信的性能问题。

Parcel序列化和Java的Serializable序列化差别还是比较大的,Parcelable只会在内存中进行序列化操作,并不会将数据存储到磁盘里。

代码语言:javascript
复制
**Parcelable的注意事项**
  • 系统版本的兼容性
  • 数据前后兼容性 一般来说,如果需要持久化存储的话,一般还是不得不选择性能更差的Serializable方案
  1. Serial

事实上,关于序列化基本每个大公司都会自己自研的一套方案,我在专栏里推荐Twitter开源的高性能序列化方案Serial。

从数据上来看,Serial在序列化与反序列化耗时,以及落地的文件大小都有很大的优势

从实现原理看,Serial就像是吧Parcelable和Serializable的优点集合在一起的方案

数据的序列化
  1. JSON
  2. Protocol Buffers 如果应用的数据量非常大,又或者对性能有更高的要求,此时Protocol Buffers是一个非常好的选择
  • 性能。使用了二进制编码压缩,相比JSON体积更小,编码速度也更快
  • 兼容性。跨言语和前后兼容性都不错,也支持基本类型的自动转换,但是不支持继承与引用类型
  • 使用成本。Protocol Buffers的开发成本很高,需要定义.proto文件,并用工具生成对应的辅助类
存储监控
  1. 性能监控 六大要素,更关注正确性、时间开销、空间开销
  2. ROM监控

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

这周还是继续在设计模式的世界里前行中。

公众号地址: 设计模式之工厂模式(二) 爱生活,爱学习,爱感悟,爱挨踢

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Algorithm LeetCode算法
  • Review 阅读并点评至少一篇英文文章
  • Tip 一个技术技巧
    • 对象的序列化
      • 数据的序列化
        • 存储监控
        • Share 一篇有观点和思考的技术文章
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档