所有由zhufenghua发布的文章

英文短语 hit the road

若按字面意思去理解英语中的一些短语,有的时候的理解很容易让人望文生义,甚至会让人哭笑不得,比如 kick the habit 或 face the music 等,它们都不是它们的字面意思,各自都有其他的寓意。

  1. kick the habit 不意为“踢习惯”,而意为“戒掉(坏)习惯”

She used to bite her nails but she kicked the habit last year.

她过去常咬指甲,但去年改掉了。

I’ve really been trying to kick my habit of compulsive shopping lately, but it’s a lot harder than I thought it would be.

我最近真的在努力改掉强迫购物的习惯,但这比我想象的要困难得多。

2. face the music 不意为“面对音乐”,而意为“承担后果,接受批评”等

You have to face the music eventually.

你最终得接受批评。

He’s been cheating us out of our money for years and now it’s time for him to face the music.他多年来一直骗取我们的钱,现在是他该接受惩罚的时候了。

同理 hit the road 或 hit the rail 不意为“打路”,而是指开始一个旅程或动身回家,意为“离开,出发,上路”,意思相当于 depart,leave 或短语动词 set out 等。当指开始一个旅行时,主要用于指的是公路旅行,而不是表示飞机或火车旅行,例如:

1. hit the road:

We’d better pack the car and hit the roadbeforeit gets dark.我们最好在天黑前把车收拾好上路。

I’d love to stay and have dinner, but I’d better hit theroad.我很想留下来吃晚饭,但我最好还是出发吧。

I’d love to stay longerbutI must be hitting the road.我很想多呆一会儿,但我得出发了。

We’d better hit the road before traffic gets even worse.

我们最好在交通变得更糟之前出发。

2. depart:

The train for Cambridge will depart from platform 9.

去剑桥的火车将从9号站台开出。

We would like to remind all our guests to leave their keys at reception before they depart.

我们想提醒所有客人在出发前把钥匙留在接待处。

3. leave:

The plane leaves Heathrow at 12.35.

飞机于12:35在希思罗机场起飞。

Your flight to Perth will leave from Terminal 4.

飞往珀斯的航班将从4号航站楼起飞。

4. set out:

They set out on the last stage of their journey.

他们动身踏上最后一段行程。

They set out in a westerly direction along the riverbank.

他们沿着河岸向西出发了。

Hit 可以意为“达到(某地),因此 hit the road 中的 hit 可以理解为”到路上“,那么它就表示要准备出发了。跟 hit 的用法的类似,英语中还有一个单词 roll,它可以意为”滚动“,那么 be ready to roll 或 Let’s roll 也可以表示准备开始或动身,例如:

be ready to roll:

Give me a call when you’re ready to roll and I’ll meet you outside.

你准备好动身时打电话给我,我在外面等你。

let’s roll:

I think I’ve had enough of this party. Let’s roll, Sarah.

我想我已经受够了这个聚会。我们出发吧,莎拉。

That’s everything we need from the store. Let’s roll!

这就是我们从商店需要的一切。我们开始吧!

类似的表达: hit the hay = go to bed

elasticSearch–windows目录结构

目录含义
bin可执行脚本目录
config配置目录
jdk内置 JDK 目录
lib类库
logs日志目录
modules模块目录
plugins插件目录

jdk目录是内置的jdk,如果环境中存在jdk则会被优先使用,在启动日志中可以查看到使用的是哪个jdk

进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务

注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http
协议 RESTful 端口。

打开浏览器(推荐使用谷歌浏览器),输入地址:http://localhost:9200,查看es的运行状态

Elasticsearch 是使用 java 开发的,且 7.8 版本的 ES 需要 JDK 版本 1.8 以上,默认安装
包带有 jdk 环境,如果系统配置 JAVA_HOME,那么使用系统默认的 JDK,如果没有配
置使用自带的 JDK,一般建议使用系统配置的 JDK。

双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改
config/jvm.options 配置文件

# 设置 JVM 初始内存为 1G。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存
# Xms represents the initial size of total heap space
# 设置 JVM 最大可用内存为 1G
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g

elasticSearch简介

elasticSearch,是一个开源的分布式搜索引擎服务,基于java开发

elastic表示弹性可伸缩,search表示搜索

数据按分类一般有视频、图片、文章等

按数据格式分类,一般可以分为结构化数据、非结构化数据,半结构化数据。

es可以管理数据,并帮助搜索,大数据分析。

系统中的数据,随着业务的发展,时间的推移,将会非常多,而业务中往往采用模糊查询进行数据的
搜索,而模糊查询会导致查询引擎放弃索引,导致系统查询数据时都是全表扫描,在百万级别的数据库中,
查询效率是非常低下的,而我们使用 ES 做一个全文索引,将经常查询的系统功能的某些字段,比如说电
商系统的商品表中商品名,描述、价格还有 id 这些字段我们放入 ES 索引库里,可以提高查询速度。

Elastic Stack技术栈

The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。
能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视
化。Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic
Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上
百台服务器,处理 PB 级别的数据。

全文搜索引擎

Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时
候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日
志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。
一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进
行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。建
立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
基于以上原因可以分析得出,在一些生产环境中,使用常规的搜索方式,性能是非常差
的:
 搜索的数据对象是大量的非结构化的文本数据。
 文件记录量达到数十万或数百万个甚至更多。
 支持大量基于交互式文本的查询。
 需求非常灵活的全文搜索查询。
 对高度相关的搜索结果的有特殊需求,但是没有可用的关系数据库可以满足。

对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况。
为了解决结构化数据搜索和非结构化数据搜索性能问题,我们就需要专业,健壮,强大的全
文搜索引擎
这里说到的全文搜索引擎指的是目前广泛应用的主流搜索引擎。它的工作原理是计算机
索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的
次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反
馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

Elasticsearch And Solr

Lucene 是 Apache 软件基金会 Jakarta 项目组的一个子项目,提供了一个简单却强大的
应用程式接口,能够做全文索引和搜寻。在 Java 开发环境里 Lucene 是一个成熟的免费开源
工具。就其本身而言,Lucene 是当前以及最近几年最受欢迎的免费 Java 信息检索程序库。
但 Lucene 只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的
服务框架搭建起来进行应用。

目前市面上流行的搜索引擎软件,主流的就两款:Elasticsearch 和 Solr,这两款都是基
于 Lucene 搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同,所以两者除了
服务器安装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十
分类似。

在使用过程中,一般都会将 Elasticsearch 和 Solr 这两个软件对比,然后进行选型。这两
个搜索引擎都是流行的,先进的的开源搜索引擎。它们都是围绕核心底层搜索库 – Lucene
构建的 – 但它们又是不同的。像所有东西一样,每个都有其优点和缺点

Elasticsearch Or Solr

Elasticsearch 和 Solr 都是开源搜索引擎,那么我们在使用时该如何选择呢?

Google 搜索趋势结果表明,与 Solr 相比,Elasticsearch 具有很大的吸引力,但这并不
意味着 Apache Solr 已经死亡。虽然有些人可能不这么认为,但 Solr 仍然是最受欢迎的
搜索引擎之一,拥有强大的社区和开源支持。

与 Solr 相比,Elasticsearch 易于安装且非常轻巧。此外,你可以在几分钟内安装并运行
Elasticsearch。但是,如果 Elasticsearch 管理不当,这种易于部署和使用可能会成为一个
问题。基于 JSON 的配置很简单,但如果要为文件中的每个配置指定注释,那么它不适
合您。总的来说,如果你的应用使用的是 JSON,那么 Elasticsearch 是一个更好的选择。
否则,请使用 Solr,因为它的 schema.xml 和 solrconfig.xml 都有很好的文档记录。

Solr 拥有更大,更成熟的用户,开发者和贡献者社区。ES 虽拥有的规模较小但活跃的
用户社区以及不断增长的贡献者社区。
Solr 贡献者和提交者来自许多不同的组织,而 Elasticsearch 提交者来自单个公司。

Solr 更成熟,但 ES 增长迅速,更稳定。
 Solr 是一个非常有据可查的产品,具有清晰的示例和 API 用例场景。 Elasticsearch 的
文档组织良好,但它缺乏好的示例和清晰的配置说明。

那么,到底是 Solr 还是 Elasticsearch?

有时很难找到明确的答案。无论您选择 Solr 还是 Elasticsearch,首先需要了解正确的用
例和未来需求。总结他们的每个属性。

由于易于使用,Elasticsearch 在新开发者中更受欢迎。一个下载和一个命令就可以启动
一切。

如果除了搜索文本之外还需要它来处理分析查询,Elasticsearch 是更好的选择

如果需要分布式索引,则需要选择 Elasticsearch。对于需要良好可伸缩性和以及性能分
布式环境,Elasticsearch 是更好的选择。

Elasticsearch 在开源日志管理用例中占据主导地位,许多组织在 Elasticsearch 中索引它
们的日志以使其可搜索。

如果你喜欢监控和指标,那么请使用 Elasticsearch,因为相对于 Solr,Elasticsearch 暴露
了更多的关键指标

Elasticsearch 应用案例

GitHub: 2013 年初,抛弃了 Solr,采取 Elasticsearch 来做 PB 级的搜索。“GitHub 使用
Elasticsearch 搜索 20TB 的数据,包括 13 亿文件和 1300 亿行代码”。

维基百科:启动以 Elasticsearch 为基础的核心搜索架构

SoundCloud:“SoundCloud 使用 Elasticsearch 为 1.8 亿用户提供即时而精准的音乐搜索
服务”。

百度:目前广泛使用 Elasticsearch 作为文本数据分析,采集百度所有服务器上的各类指
标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常
或业务层面异常。目前覆盖百度内部 20 多个业务线(包括云分析、网盟、预测、文库、
直达号、钱包、风控等),单集群最大 100 台机器,200 个 ES 节点,每天导入 30TB+
数据。

新浪:使用 Elasticsearch 分析处理 32 亿条实时日志。

阿里:使用 Elasticsearch 构建日志采集和分析体系。

Stack Overflow:解决 Bug 问题的网站,全英文,编程人员交流的网站

java通过maven引入mongodb,简单使用

坐标,mongo-java-driver

    <dependencies>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.0.3</version>
        </dependency>
    </dependencies>

连接到服务器:

        // 连接到 mongodb 服务
        MongoClient mongoClient = new MongoClient("localhost", 27017);

显示与删除数据库:

        String DB_NAME = "mydb";
        // 显示所有数据库名字
        mongoClient.listDatabaseNames().forEach((Block<String>) name -> {
                System.out.println("DB_NAME: " + name);
                if (name.equals(DB_NAME)) {
                    mongoClient.dropDatabase(DB_NAME);
                    System.out.println("DB " + name + " DROPPED ======================");
                }
        });

连接到数据库:

        // 连接到数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase(DB_NAME);

创建与获取集合

        String DB_COL = "mycol";
        // 创建集合
        mongoDatabase.createCollection(DB_COL);
        // 获取集合
        MongoCollection mongoCollection = mongoDatabase.getCollection(DB_COL);

插入文档:

        //插入文档
        Document document = new Document("title", "MongoDB").append("description", "database").append("likes", 100);
        List<Document> documents = new ArrayList<>();
        documents.add(document);
        documents.add(new Document("title", "HBase").append("description", "database2").append("likes", 90));
        documents.add(new Document("title", "Redis").append("description", "database3").append("likes", 80));
        mongoCollection.insertMany(documents);

更新文档:

        // 更新文档
        mongoCollection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));

删除文档:

        // 删除符合条件的第一个文档
        mongoCollection.deleteOne(Filters.eq("likes", 80));
        // 删除所有符合条件的文档
//        mongoCollection.deleteMany (Filters.eq("likes", 80));

查看文档:

        // 查看所有文档
        mongoCollection.find().forEach(((Block<Document>) doc -> System.out.println(doc)));

        // OR view collections like this way
//        FindIterable<Document> findIterable = mongoCollection.find();
//        MongoCursor<Document> mongoCursor = findIterable.iterator();
//        while(mongoCursor.hasNext()){
//            System.out.println(mongoCursor.next());
//        }

        mongoClient.close();

注意,mongodb的数据,类型不严格,而java严谨,比如数据某个值为double,而另一个为string,此时java就有可能报错:

        // 条件查询 查询浏览量 大于 1000 的记录
        BasicDBObject gtObject = new BasicDBObject("visits", new BasicDBObject("$gt", 1000));
        FindIterable<Document> gtFilterFind = spit.find(gtObject);

        // 展示查询结果
        for (Document doc : gtFilterFind) {
            System.out.println("_id: " + doc.get("_id"));
            System.out.println("content: " + doc.getString("content"));
            System.out.println("userid: " + doc.getString("userid"));
            System.out.println("nickname: " + doc.getString("nickname"));
            System.out.println("--------------------------------------------");
        }
        // 关闭连接
        client.close();

以上就是java简单操作mongodb的全部内容了。

MongoDB复杂查询

比较大小

>,>=,<,<=操作符

db.集合.find({"field":{$gt:value}})

大于:gt

大于等于:gte

小于:lt

小于等于:lte

包含与不包含

db.find({"field": {$in: [$value1,$value2..]}})

包含:$in

不包含:$nin

多条件

逻辑与

$and[ { }, { }, { }]

逻辑或

$or:[ { }, { } ,{ }]

列值增长

在一个列的基础上增加或减少,可以使用 $inc 进行运算

db.集合.update({"_id":"2"}, {$inc:{NumberInt(1)}})

国内做软件行业总是不挣钱?

在国内,很多人都知道,软件最好和硬件结合起来卖,能获得更高的收益。这背后隐藏的意思是,软件作为一门生意,中国人认为没有硬件这门生意好

在由中国电子信息行业联合会发布的2019年中国软件企业百强榜中,排名第1的软件企业是华为。华为是软件+硬件一起销售的典型。

现在国内做SaaS,很多投资人和创业者都有着共同的观点,就是必须做SaaS+,也就是说光卖软件不行,必须把软件和其他类型业务结合起来,要么做广告投放代理,要么做撮合交易,要么收取支付和贷款的佣金,要么卖课程内容,要么卖皮肤模板。虽然,任何其他类型的业务,都有其他类型业务的特点,有其他业务的门槛和门道,盲目的冲进其他业务中,成为炮灰的概率极大。但大家仍然认为要做SaaS+,是因为很多人内心都认为,其他类型的业务,都比软件这门生意要好。得通过做软件,去切入其他业务的领域。

再比如,为何最近HR SaaS比CRM SaaS要火?如果单论SaaS,企业对CRM的需求肯定强于HR,但是每个企业的销售模式都不尽相同,所以CRM叠加其他服务相对比较难,而每个企业对人力资源相关服务的需求差距不那么大,所以容易叠加别的服务。

现象确实是这样,那么背后的原因是什么呢?

第一、还是知识产权的问题,盗版思维余孽未消。

虽然现在各种防盗版,防破解,互联网账号技术,已经极大的解决了盗版的问题。但是这种思维没有被彻底解决,这种思维是对知识产权的不重视。大量的人不愿意为看不见摸不着的知识产权付费,或者付很多费。举个例子,现在钉钉应用于数百万家企业,但是假如钉钉一旦收费,我估计会带来超过95%的企业用户流失。中国的书一直很便宜,也是这个原因。

个人有这样的想法,这就带动了小企业主也是这样的想法。这样间接导致失去了培养出优秀的软件企业的土壤。

第二、重资源,不重效率。功利主义

软件是一个生产工具而已,好的软件自然能提升个人或者企业的生产效率。效率的提升很多情况下不能立竿见影,经常是还需要先投入,然后再获得提升的。

相比之下,国人更加喜欢的是能够立竿见影的东西,比如你帮我介绍个客户,或者介绍个关系。

有一个软件同行说,卖给餐饮店软件,5000元老板都嫌贵,但是说要给餐饮店投放个广告,5万元老板眼睛都不眨一下。

中国是全球最大的消费市场,但是在软件行业的消费中,中国的市场其实没有那么大。

第三、缺乏好的产品

拥有软件人才的企业不少,但是把软件人才用于做好的软件产品的企业不多,很多企业都把软件人才当做原材料直接出售给客户了,这叫做软件外包公司,在2019年中国软件企业百强榜中,可以看到很多软件外包公司,比如中软,东软,文思海辉。

相比做产品,需要前期大量的投入,风险较大。软件外包行业按人天给客户计费,定期收款,经营风险相对较小。于是很多企业转向了做软件外包服务,而不是开发软件产品。地方政府也开始更加喜欢软件外包行业,因为解决的软件就业的人多。

但越是这样,就越难做出好的软件产品来。

如何衡量一个公司做出的产品好还是不好?一般来说只有两个标准,客户愿意为你的产品花钱或者花时间,在企业软件领域,主要是花钱。只有客户愿意为靠License(或者租用费)这部分付钱,才能叫做好产品。当然,如果国外的客户也为你的产品License(或者租用费)付费的话,那就更加证明是好产品了。

流量变现?

大部分的软件,都很难找到真正盈利的点。

如果是提供一个特有的收费功能,第一个是困难,第二是容易被盗版模仿。

如果是在众多功能点中,小收费,或许是比较简单的,这也意味着你做的软件功能非常庞大,不同的用户来了都能找到消费的点,也就是说:超市模式,仍然是挣钱最简单的模式,多人口少收费,这也意味着国内软件普遍是低水平,国内环境下每年付费几万使用一个软件产品几乎没人会愿意,这也让国内更加难以诞生高水平软件。

英文词汇 between和among区别

通常情况下,between表一个物体在两者之间,among表一个物体在三者或三者以上的中间,或者多个物体在其余更多物体中间。

例1:a little box between two big ones两个大盒子间的小盒子

例2:a ball among many boxes很多盒子间的一个球

three balls among boxes 

盒子间的三个球

注意:其实between也可以用于“三者或三者以上”,强调其中每两者之间的相互关系。

the friendly relation between the people of allcountries 

各国人民之间的友好关系

Intelligence varies between people 

人与人的智商有差异。

a path between/among the trees 

一条林间小路(between强调从很多“两棵树”之间穿过)