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

 
 

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

Algorithm LeetCode算法

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

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

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

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

示例

输入: "Hello World"输出: 5

输出: 5

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

/** *  * @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;}
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。

PRAGMA locking_mode = EXCLUSIVE

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

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

PRAGMA SQLITE_THREADSAFE = 2

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

  1. 查询优化

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

SQLite的其他特性
  1. 损坏与恢复

  2. 加密与安全

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

  1. 全文搜索

SQLite的监控
  1. 本地测试

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

  1. 耗时监控

  2. 智能监控

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

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

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

爱生活,爱学习,爱感悟,爱挨踢
640?wx_fmt=jpeg


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小跃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值