Published on

ARTS 第9周

Authors

Algorithm

Palindrome Number

package org.nocoder.leetcode.solution;

/**
 * 9.Palindrome Number
 * <p>
 * Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
 * <p>
 * Example 1:
 * <p>
 * Input: 121
 * Output: true
 * Example 2:
 * <p>
 * Input: -121
 * Output: false
 * Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
 * Example 3:
 * <p>
 * Input: 10
 * Output: false
 * Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
 * Follow up:
 * <p>
 * Coud you solve it without converting the integer to a string?
 *
 * @author jason
 * @date 18/9/1.
 */
public class PalindromeNumber {
    public static boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }

        int div = 1;
        while (x / div >= 10) {
            div *= 10;
        }

        while (x != 0) {
            int left = x / div;
            int right = x % 10;

            if (left != right) {
                return false;
            }

            x = (x % div) / 10;
            div /= 100;
        }

        return true;
    }

    public static void main(String [] args){
        System.out.println(PalindromeNumber.isPalindrome(121));
        System.out.println(PalindromeNumber.isPalindrome(-121));
        System.out.println(PalindromeNumber.isPalindrome(10));
    }
}

Review

Using Command Pattern in Java

https://medium.com/@p.osinaga/using-command-pattern-in-java-6fd6bb36fd42

命令模式属于行为型模式,将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其它对象。命令模式也可以支持撤销操作。

command

文中作者用 从 AppleStore 中选购商品为例,演示了命令模式在java中的使用,Store类来记录购买哪些Product和然后执行BuyProductSellProduct命令,相当于把多个命令记录下来,然后顺序执行这些命令,这些命令可以组合、复用。

PS: BuyProduct类里居然调用的productsell()方法,这个老外太TM不认真了。

Tip

两个小坑

  1. 一个 vue 项目 执行npm run dev 提示有几个 modules 和 dependencies 找不到,之前在 windows 下build run 都是没问题的,换了 ubuntu 之后,就运行不起来,检查后发现这几个路径的大小没写对,在 linux 环境下引入 module 和 dependencies 是要区分大小写的。当然这也是开发人员书写不规范问题,引入文件应当与实际文件大小写保持一致才是。
ERROR  Failed to compile with 5 errors

These dependencies were not found:

* @/components/login/Login.css in ./src/router/index.js
* @/components/library/LibraryMaintain/LibraryMaintain.vue in ./src/router/index.js
* @/components/webmanagement/details/Details.vue in ./src/router/index.js

To install them, you can run: npm install --save @/components/login/Login.css @/components/library/LibraryMaintain/LibraryMaintain.vue @/components/webmanagement/details/Details.vue


These relative modules were not found:

* ../../common/infoWindowLight.js in ./~/_babel-loader@7.1.5@babel-loader/lib!./~/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=script&index=0!./src/components/common/scatterMap.vue
* ../../common/infoWindow.js in ./~/_babel-loader@7.1.5@babel-loader/lib!./~/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=script&index=0!./src/components/common/scatterMap.vue

2.为一个项目配置了nginx转发,80端口转发到8075端口,直接用ip访问,上传图片大小超过1M就会抛 413 request entity too large,修改nginx配置文件 client_max_body_size=20M,默认配置大小为1M,超过就会抛上述异常。

Share

Command Pattern

命令模式,我觉得还是比较好理解的,《大话设计模式》里作者用买烤羊肉串和《Head First 设计模式》的餐厅点餐的例子、遥控器的例子,足以让我们很好的理解这个模式的使用了。例如餐厅里,顾客(Client)创建一个订单,订单里的菜品就是由一个个的命令(Command)组成,交给服务员(Invoker),将订单拿走交给厨师(Receiver),厨师按菜单制做菜品,相当于顺序执行命令。项目中,我们使用Apache Chain,结合责任链和命令模式,来处理队列请求,我们老大很喜欢用这个Chain,放在下次arts的share来写一下Apache Chain以及责任链模式。