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

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

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

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

Algorithm LeetCode算法

最后一个单词的长度 (https://leetcode-cn.com/problems/length-of-last-word/)

题目描述:给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例

代码语言:javascript
复制
输入: "Hello World"

输出: 5

今天这个算法,也不知道说啥好,没想到自己选了这么一个题目,是不是快被你们鄙视了呢。为了练手,我也是拼了。但是,要想让算法的结果提升,在这里还是需要告诉大家,传统的方式只是解决问题,优化的方式才是你需要在算法上实践并掌握的。

代码语言:javascript
复制
/**
 * 
 * @Title: lengthOfLastWorld
 * @Description: 利用库函数求解
 * @param s
 * @return int
 * @throws
 */
public static int lengthOfLastWorld(String s) {
    if (s == null) {
        return 0;
    }

    String[] result = s.split(" ");
    if (result.length == 0) {
        return 0;
    }
    int length = result[result.length -1].length();
    return length;
}

/**
 * 
 * @Title: lengthOfLastWorld1
 * @Description: 反向求解
 * @param s
 * @return int
 * @throws
 */
public static int lengthOfLastWorld1(String s) {
    int start = -1;
    int end = -1;
    for (int i = s.length() - 1; i >= 0; i--) {
        if (s.charAt(i) != ' ' && end == -1) {
            end = i;
            start = i;
        } else if (s.charAt(i) == ' ' && end != -1) {
            start = i + 1;
            break;
        } else if (s.charAt(i) != ' ' && end != -1) {
            start = i;
        }
    }
    if (end == -1) {
        return 0;
    }
    return end - start + 1;
}

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

How to write like the great entrepreneurs (https://venturehacks.com/writing)

大伙们看到标题了吗?《如何像伟大的企业家一样写作》,是不是很吸引你呢,反正就是对我来说,确实值得一看。

在很多大V的建议里,写作一直都是一件必备的技能,不管你从事什么职业。如果你会写作,平时做好经验总结,个人感悟,打造出属于自己的IP,那么,对你的人生成长很有帮助。小编现在就是在坚持写作这件事,看到这文章,眼前一亮。

点进去文中,这篇文章虽然短小,但是确实句句实用。开头先引出“企业家是世界上最好的商业作家。如果你不能写,你就无法筹集资金。或招募。或出售。” 然后用了马斯克,乔布斯,以及巴菲特的案例。

这些是本文的引言,接下来给出了15条小贴士,让大家看看如何写作,所以在这我也分享给大家。因为力求原文意思,所以我只列出原文的话,具体解释原文里也有,请移步观看。

  1. Writing is a customer service problem.
  2. Pretend you’re sending an email.
  3. Sum it up in a tweet.
  4. Read it on your phone.
  5. Don’t write your thought process.
  6. Start with a summary.
  7. Writing is rewriting.
  8. Delete half the words.
  9. Avoid adjectives.
  10. Scrutinize every word for bias.
  11. Kill your darlings.
  12. Use persuasion checklists.
  13. Skim Strunk & White.
  14. Break the rules once you learn the rules.
  15. Writing is a design problem.

以上就是文中给出的建议,基本上都是很实用的。比如让你像写邮件一样进行写作;重复去写作修改;注重言辞等等等等,看完你会很兴奋的。加油吧!

Tip 一个技术技巧

今天还是接上一次关于Android存储优化的下一篇,是《数据库SQLite的使用和优化》。

SQLite的那些事儿

微信开源的内部使用的SQLite数据库WCDB

  1. ORM(Object Relational Mapping) 对象关系映射

Android中最常用的ORM框架有开源greenDAO和Google官方的Room。使用ORM框架真的非常简单,但是简易性是需要牺牲部分执行效率为代价的,具体的损耗跟ORM框架写得好不好很有关系。

为了提高开发效率,应用的确应该引入ORM框架。但这不能是我们不去学习数据库基础知识的理由,只有理解底层的一些机制,我们才能更加得心应手地解决疑难的问题

考虑到可以更好的与Android Jetpack的组件互动,WCDB选择Room作为ORM框架

  1. 进程与线程并发

多进程并发:简单来说,多进程可以同时获取SHARED锁来读取数据,但是只有一个进程可以获取EXCLUSIVE锁来写数据库。对于iOS来说可能没有多进程访问数据库的场景,可以把locking_mode的默认值改成EXCLUSIVE。

代码语言:javascript
复制
PRAGMA locking_mode = EXCLUSIVE

在EXCLUSIVE模式下,数据库连接在断开前都不会释放SQLite文件的锁,从而避免不必要的冲突,提高数据库访问的速度。

多线程并发:SQLite支持多线程并发模式,需要开启下面的配置,当然系统SQLite会默认开启多线程Multi-thread模式。

代码语言:javascript
复制
PRAGMA SQLITE_THREADSAFE = 2

跟多进程的锁机制一样,为了实现简单,SQLite锁的粒度都是数据库文件级别,并没有实现表级甚至行级的锁。还有需要说明的是,同一个句柄同一时间只有一个线程在操作

  1. 查询优化
  • 索引优化
  • 页大小与缓存大小
  • 其他优化:慎用“select *”,需要使用多少列,就选取多少列;正确地使用事务;预编译与参数绑定,缓存被编译后的SQL语句;对于blob或超大的Text列,可能会超过一个页的大小,导致出现超大页;定期整理或者清理无用或可删除的数据

通过引进ORM,可以大大的提升我们的开发效率。通过WAL模式和连接池,可以提高SQLite的并发性能。通过正确的建立索引,可以提升SQLite的查询速度。通过调整默认的页大小和缓存大小,可以提升SQLite的整体性能

SQLite的其他特性
  1. 损坏与恢复
  2. 加密与安全

数据库的安全主要有两个方面,一个是注入,一个是加密。防注入可以通过静态安全扫描的方式,而加密一般会使用SQLCipher支持。

  1. 全文搜索
SQLite的监控
  1. 本地测试

可以通过EXPLAIN QUERY PLAN测试SQL语句的查询计划,是全表扫描还是使用了索引,以及具体使用了哪个索引等。

  1. 耗时监控
  2. 智能监控

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

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

公众号地址: 设计模式之工厂模式(三)

爱生活,爱学习,爱感悟,爱挨踢

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Algorithm LeetCode算法
  • Review 阅读并点评至少一篇英文文章
  • Tip 一个技术技巧
    • SQLite的那些事儿
      • SQLite的其他特性
        • SQLite的监控
        • Share 一篇有观点和思考的技术文章
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档