提交 14a64466 编写于 作者: W wizardforcel

2020-06-12 11:38:27

上级 33fcb776
......@@ -4,7 +4,7 @@
您是否曾经想过,在任何单词编辑器中,拼写检查器会如何在您遇到任何拼写错误时建议您列出其他可能的单词? 这是通过**语音搜索**完成的。 **Soundex** 是一种语音算法,用于通过声音索引名称(英语发音)。 我们的目标是将同音异义词(发音与另一个单词相同,但含义不同,并且拼写可能有所不同)被编码为相同的表示形式,以便尽管拼写稍有不同(例如, `bear - beer``Nelson - Neilson - Neelson`
现在,它已成为流行的数据库软件(例如 *DB2,PostgreSQL,MySQL,Ingres,MS SQL Server 和 Oracle* )以及一些主要单词编辑器的标准功能。
现在,它已成为流行的数据库软件(例如 *DB2,PostgreSQL,MySQL,Ingres,MS SQL Server 和 Oracle*)以及一些主要单词编辑器的标准功能。
## Soundex 算法
......@@ -16,15 +16,22 @@ The Soundex code for a name consists of a letter followed by three numerical dig
查找 soundex 代码的完整算法如下:
1. 保留名称的第一个字母,并删除所有其他出现的 a,e,i,o,u,y,h,w
1. 保留名称的第一个字母,并删除所有其他出现的`a, e, i, o, u, y, h, w`
2. 如下将辅音替换为数字(在第一个字母之后):
b,f,p,v→1
c,g,j,k,q,s,x,z→2
d, t→3
l→4
m,n→5
r→6
3. 如果两个或两个以上具有相同编号的字母在原始名称中相邻(在步骤 1 之前),则仅保留第一个字母;否则,将保留第一个字母。 同样,两个以“ h”或“ w”分隔的相同数字的字母也被编码为一个数字,而以元音分隔的此类字母被编码两次。 此规则也适用于首字母。
`b, f, p, v → 1`
`c, g, j, k, q, s, x, z → 2`
`d, t → 3`
`l → 4`
`m, n→5`
`r → 6`
3. 如果两个或两个以上具有相同编号的字母在原始名称中相邻(在步骤 1 之前),则仅保留第一个字母;否则,将保留第一个字母。 同样,两个以“`h`”或“`w`”分隔的相同数字的字母也被编码为一个数字,而以元音分隔的此类字母被编码两次。 此规则也适用于首字母。
4. 重复上一步,直到有一个字母和三个数字。 如果您的单词字母太少而无法分配三个数字,请在后面加上零,直到三个数字为止。 如果您的字母超过 3 个,则只需保留前 3 个数字即可。
## Java 的 Soundex 实现
......@@ -137,13 +144,14 @@ B660
```
从上面的输出中很明显,单词“ bear”和“ beer”具有相同的代码; 所以他们是语音的 “ bearer”一词具有不同的代码,因为它的语音不同。
从上面的输出中很明显,单词“`bear`”和“`beer`”具有相同的代码; 所以他们是语音的 “`bearer`”一词具有不同的代码,因为它的语音不同。
您可以查看一些可用的 soundex 算法实现,例如 [**Apache Commons Soundex 实现**](https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/language/Soundex.html)
您可以查看一些可用的 soundex 算法实现,例如 [**Apache Commons Soundex 实现**](https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/language/Soundex.html)
#### 参考文献
[https://zh.wikipedia.org/wiki/Soundex](https://en.wikipedia.org/wiki/Soundex)
[http://introcs.cs.princeton.edu/java/31datatype/Soundex.java.html](http://introcs.cs.princeton.edu/java/31datatype/Soundex.java.html)
**祝您学习愉快!**
\ No newline at end of file
......@@ -2,11 +2,11 @@
> 原文: [https://howtodoinjava.com/java/multi-threading/compare-and-swap-cas-algorithm/](https://howtodoinjava.com/java/multi-threading/compare-and-swap-cas-algorithm/)
java 5 中最好的添加之一是`AtomicInteger``AtomicLong`等类中支持的原子操作。这些类可帮助您最大程度地减少对复杂(不必要) [**多线程[**](//howtodoinjava.com/category/java/multi-threading/ "multi-threading") 用于一些基本操作的代码,例如递增或递减在多个线程之间共享的值。 这些类在内部依赖于名为 **CAS(比较和交换)**的算法。 在本文中,我将详细讨论这个概念。
java 5 中最好的添加之一是`AtomicInteger``AtomicLong`等类中支持的原子操作。这些类可帮助您最大程度地减少对复杂(不必要) [**多线程**](//howtodoinjava.com/category/java/multi-threading/ "multi-threading")用于一些基本操作的代码,例如递增或递减在多个线程之间共享的值。 这些类在内部依赖于名为 CAS(比较和交换)的算法。 在本文中,我将详细讨论这个概念。
## 1.乐观锁和悲观锁
传统的锁定机制,例如,在 Java 中使用*同步的*关键字的**被称为锁定或多线程的悲观技术**。 它要求您首先保证在特定操作之间没有其他线程会干扰(即锁定对象),然后仅允许您访问任何实例/方法。
传统的锁定机制,例如,在 Java 中使用`syncronized`关键字的**被称为锁定或多线程的悲观技术**。 它要求您首先保证在特定操作之间没有其他线程会干扰(即锁定对象),然后仅允许您访问任何实例/方法。
> 这就像说“请先关上门; 否则,其他骗子会进来重新整理您的东西。”
......@@ -24,23 +24,23 @@ java 5 中最好的添加之一是`AtomicInteger`,`AtomicLong`等类中支持
CAS 操作有 3 个参数:
1. 必须替换值的存储位置 V
2. 线程上次读取的旧值 A
3. 新值 B 应该写在 V 上
1. 必须替换值的存储位置`V`
2. 线程上次读取的旧值`A`
3. 应该写在`V`上的新值`B`
> CAS 说:“我认为 V 应该具有值 A; 如果可以,则将 B 放在此处,否则不要更改它,但要告诉我我错了。” CAS 是一种乐观技术,它希望成功进行更新,并且自从上次检查变量以来,如果另一个线程更新了该变量,则可以检测到失败。
> CAS 说:“我认为`V`应该具有值`A`; 如果可以,则将`B`放在此处,否则不要更改它,但要告诉我我错了。” CAS 是一种乐观技术,它希望成功进行更新,并且自从上次检查变量以来,如果另一个线程更新了该变量,则可以检测到失败。
## 3\. Java 比较和交换示例
让我们通过一个例子来了解整个过程。 假设 V 是存储值“ 10”的存储位置。 有多个线程想要递增此值并将递增的值用于其他操作,这是一种非常实际的方案。 让我们分步介绍整个 CAS 操作:
让我们通过一个例子来了解整个过程。 假设`V`是存储值“10”的存储位置。 有多个线程想要递增此值并将递增的值用于其他操作,这是一种非常实际的方案。 让我们分步介绍整个 CAS 操作:
**1)线程 1 和 2 想要增加它,它们都读取值并将其增加到 11。**
*V = 10,A = 0,B = 0*
`V = 10,A = 0,B = 0`
**2)现在线程 1 首先出现,并将 V 与最后读取的值进行比较:**
**2)现在线程 1 首先出现,并将`V`与最后读取的值进行比较:**
*V = 10,A = 10,B = 11*
`V = 10,A = 10,B = 11`
```java
if     A = V
......@@ -50,11 +50,11 @@ if     A = V
   return V
```
显然,V 的值将被覆盖为 11,即操作成功。
显然,`V`的值将被覆盖为 11,即操作成功。
**3)线程 2 到来并尝试与线程 1** 相同的操作
**3)线程 2 到来并尝试与线程 1 相同的操作**
*V = 11,A = 10,B = 11*
`V = 11,A = 10,B = 11`
```java
if     A = V
......@@ -64,9 +64,9 @@ if     A = V
   return V
```
**4)在这种情况下,V 不等于 A,因此不替换值,并且返回 V 即 11 的当前值。 现在线程 2,再次使用以下值重试此操作:**
**4)在这种情况下,`V`不等于`A`,因此不替换值,并且返回`V`即 11 的当前值。 现在线程 2,再次使用以下值重试此操作:**
*V = 11,A = 11,B = 12*
`V = 11,A = 11,B = 12`
而这一次,条件得到满足,增量值 12 返回线程 2。
......
......@@ -8,9 +8,9 @@ Python 是一种流行的编程语言,由 Guido van Rossum 创建,并于 199
在本教程中,我们将学习 python 基础知识和一些高级概念。
## 1.解释 Python
## 1. Python 是解释语言
编程语言通常分为两类 -**解释语言****编译语言**
编程语言通常分为两类 - **解释语言****编译语言**
*编译语言*是指使用编译器事先将源代码编译为可执行指令的语言(例如 Java)。 以后,这些符合条件的指令可以由运行时环境执行。
......@@ -22,7 +22,7 @@ Python 是一种流行的编程语言,由 Guido van Rossum 创建,并于 199
Python 主要是为了强调代码的可读性而开发的,它的语法允许程序员用更少的代码行来表达概念。
根据语言中可用关键字的简单性粗略衡量,Python 3 有 33 个关键字,Python 2 有 31 个关键字。相比之下,C ++有 62 个关键字,Java 有 53 个关键字。
根据语言中可用关键字的简单性粗略衡量,Python 3 有 33 个关键字,Python 2 有 31 个关键字。相比之下,C++ 有 62 个关键字,Java 有 53 个关键字。
Python 语法提供了一种易于学习和易于阅读的简洁结构。
......@@ -54,13 +54,13 @@ Python 3.8.0
```
如果机器没有安装 python,那么我们可以从以下网站免费下载它: *https://www.python.org/*
如果机器没有安装 python,那么我们可以从以下网站免费下载它:<https://www.python.org/>
## 6.编写并执行 python 代码
#### 6.1 Python 文件
如前所述,python 是一种解释型语言,因此我们可以在扩展名为( **.py** )的文件中编写源代码,并使用`'python'`命令执行该文件。
如前所述,python 是一种解释型语言,因此我们可以在扩展名为(`.py`)的文件中编写源代码,并使用`'python'`命令执行该文件。
让我们在任何文本编辑器中编写第一个 Python 文件`helloworld.py`
......@@ -102,40 +102,61 @@ Hello, World!
#### 7.1 语言基础
[Python – 在 Sublime Editor 中安装](https://howtodoinjava.com/python/install-python-sublime-editor/)
[Python – 在 Sublime 编辑器中安装](https://howtodoinjava.com/python/install-python-sublime-editor/)
[Python – 注释](https://howtodoinjava.com/python/python-comments/)
[Python – 变量](https://howtodoinjava.com/python/python-variables/)
[Python – 数据类型](https://howtodoinjava.com/python/python-data-types/)
[Python – 关键字](https://howtodoinjava.com/python/python-keywords/)
[Python – 关键字](https://howtodoinjava.com/python/python-keywords/)
[Python – 整数](https://howtodoinjava.com/python/python-integer-ints/)
[Python – 字符串](https://howtodoinjava.com/python/python-strings/)
[Python – 列出](https://howtodoinjava.com/python/python-lists/)
[Python – 列表](https://howtodoinjava.com/python/python-lists/)
[Python – 元组](https://howtodoinjava.com/python/python-tuples/)
#### 7.2 弦乐
#### 7.2 字符串
[Python – 字符串`split()`示例](https://howtodoinjava.com/python/split-string/)
[Python – 字符串`startswith()`示例](https://howtodoinjava.com/python/string-startswith/)
[Python – 字符串 split()示例](https://howtodoinjava.com/python/split-string/)
[Python – 字符串 startswith()示例](https://howtodoinjava.com/python/string-startswith/)
[Python – 字符串 endswith()示例](https://howtodoinjava.com/python/string-endswith-method/)
[Python – 字符串`endswith()`示例](https://howtodoinjava.com/python/string-endswith-method/)
#### 7.3 馆藏
#### 7.3 集合
[Python – 查找列表或数组中的最大值和最小值](https://howtodoinjava.com/python/max-min/)
[Python – 查找最大 N 个(前 N 个)或最小 N 个项](https://howtodoinjava.com/python/find-largest-smallest-items/)
[Python- 将元组解包为变量](https://howtodoinjava.com/python/unpack-tuple-sequence/)
[Python – 元组比较](https://howtodoinjava.com/python/compare-tuples/)
[Python – 列表与元组](https://howtodoinjava.com/python/lists-vs-tuples/)
[Python – 解包元组 – 太多值无法解包](https://howtodoinjava.com/python/unpack-variable-length-tuple/)
[Python – Multidict 示例](https://howtodoinjava.com/python/multidict-key-to-multiple-values/)
[Python – OrderedDict 示例](https://howtodoinjava.com/python/ordereddict-ordered-dictionary/)
[Python – `Multidict`示例](https://howtodoinjava.com/python/multidict-key-to-multiple-values/)
[Python – `OrderedDict`示例](https://howtodoinjava.com/python/ordereddict-ordered-dictionary/)
[Python – 字典交集](https://howtodoinjava.com/python/dictionary-intersection/)
[Python – 优先级队列示例](https://howtodoinjava.com/python/priority-queue/)
#### 7.4 杂
#### 7.4 杂
[Python – 读写 CSV 文件](https://howtodoinjava.com/python/python-read-write-csv-files/)
[Python – httplib2 库](https://howtodoinjava.com/python/httplib2-http-get-post-requests/)
[Python – `httplib2`库](https://howtodoinjava.com/python/httplib2-http-get-post-requests/)
在评论中向我发送有关 python 的问题。
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/puzzles/java-puzzle-good-string-bad-string/](https://howtodoinjava.com/puzzles/java-puzzle-good-string-bad-string/)
**拼图:** Chandu 非常喜欢弦乐。 (或者他认为!)但是,他不喜欢具有相同连续字母的字符串。 没有人知道为什么会这样。 他称这些字符串为不良字符串。 因此,好的字符串是没有相同连续字母的字符串。 现在,问题很简单。 给定字符串 S,您需要将其转换为好字符串。
**拼图:** Chandu 非常喜欢字符串。 (或者他认为!)但是,他不喜欢具有相同连续字母的字符串。 没有人知道为什么会这样。 他称这些字符串为不良字符串。 因此,好的字符串是没有相同连续字母的字符串。 现在,问题很简单。 给定字符串 S,您需要将其转换为好字符串。
您只需要执行一项操作 - 如果有两个相同的连续字母,则删除其中一个。
......
......@@ -53,9 +53,9 @@ HashMap 不是线程安全的。 我们可以在并发应用中使用 **HashTabl
我是否应该建议您准备**集合框架**及其所有主要类别? 我想你已经足够聪明了。
如果没有任何与馆藏框架有关的问题,则任何面试(初中和中级)都将是不完整的。 它真正测试您的编程技能和对核心 Java API 的了解。 问题可能像集合层次结构一样简单,而困难的问题例如队列和堆栈。 这是此类常见收藏采访问题的列表:
如果没有任何与集合框架有关的问题,则任何面试(初中和中级)都将是不完整的。 它真正测试您的编程技能和对核心 Java API 的了解。 问题可能像集合层次结构一样简单,而困难的问题例如队列和堆栈。 这是此类常见收藏采访问题的列表:
* 解释馆藏层次?
* 解释集合层次?
* **设置****列表**之间的区别?
* **向量****ArrayList** 之间的差异?
* HashMap 和 HashTable 之间的区别?
......
......@@ -142,7 +142,7 @@ protected acces 修饰符的作用与默认访问权限相同,除了子类还
使用本机代码库的缺点也很重要:
1. JNI / JNA 倾向于破坏 JVM 的稳定性,尤其是当您尝试做一些复杂的事情时。 如果您的本机代码错误地执行了本机代码内存管理,则很有可能会使 JVM 崩溃。 如果您的本机代码是不可重入的,并且从多个 Java 线程中调用,则坏事……会偶尔发生。 等等。
2. 带有本机代码的 Java 比纯 Java 或纯 C / C ++更难调试。
2. 带有本机代码的 Java 比纯 Java 或纯 C / C++ 更难调试。
3. 本机代码可能为其他平台无关的 Java 应用引入重要的平台依赖项/问题。
4. 本机代码需要一个单独的构建框架,并且也可能存在平台/可移植性问题。
......
......@@ -85,7 +85,7 @@ Java 集合的最明显的**优点可以列出为:**
* 通过建立公共语言来回传递集合,从而在不相关的 API 之间提供互操作性
* 通过仅学习一些顶级接口和受支持的操作,易于学习的 API
#### 2)解释馆藏的等级?
#### 2)解释集合的等级?
![Java Collection Hierarchy](img/4d680a6ab9e27aa22e1a05cb1cc772fd.png "Java Collection Hierarchy")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册