Published on

ARTS 第13周

Authors

Algorithm

package org.nocoder.leetcode.solution;

import java.util.HashMap;
import java.util.Stack;

/**
 * Given a string containing just the characters '(', ')', '{', '}', '[' and ']',
 * determine if the input string is valid.
 * <p>
 * An input string is valid if:
 * <p>
 * Open brackets must be closed by the same type of brackets.
 * Open brackets must be closed in the correct order.
 * Note that an empty string is also considered valid.
 * <p>
 * Example 1:
 * <p>
 * Input: "()"
 * Output: true
 * Example 2:
 * <p>
 * Input: "()[]{}"
 * Output: true
 * Example 3:
 * <p>
 * Input: "(]"
 * Output: false
 * Example 4:
 * <p>
 * Input: "([)]"
 * Output: false
 * Example 5:
 * <p>
 * Input: "{[]}"
 * Output: true
 *
 * @author jason
 * @date 2018/10/1.
 */
public class ValidParentheses {

    public boolean isValid(String s) {
        if (null == s && "".equals(s)) {
            return true;
        }

        if ((s.length() % 2) != 0) {
            return false;
        }

        HashMap<Character, Character> map = new HashMap<Character, Character>();
        map.put('(', ')');
        map.put('[', ']');
        map.put('{', '}');

        Stack<Character> stack = new Stack<Character>();

        for (int i = 0; i < s.length(); i++) {
            char curr = s.charAt(i);

            if (map.keySet().contains(curr)) {
                stack.push(curr);
            } else if (map.values().contains(curr)) {
                if (!stack.empty() && map.get(stack.peek()) == curr) {
                    stack.pop();
                } else {
                    return false;
                }
            }
        }

        return stack.empty();
    }
}

Review

Dynamic Proxies in Java

https://www.baeldung.com/java-dynamic-proxies https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html

Tip

Valid Parentheses 解题思路

  • 建立栈
  • 遍历字符串,如果是左括号,将其入栈,如果是右括号,将其与栈顶的左括号比较,如果是一对则将栈顶元素出栈,如果不是就返回False
  • 遍历完成后如果栈中还有元素,返回False

Share

花了点时间总结一下来公司这些日子做的东西,自我感觉良好,跟着春哥学了不少东西,这半年还是很充实的。 记得有一次春哥笑着跟我说,“你要相信,别人能做出来的东西,你也可以。”

架构设计

  • 领域驱动设计
  • 分布式系统架构设计

框架应用

  • eureka
  • springboot
  • alibaba oss
  • alibaba canal应用
    • 伪装slave向mysql请求binlog,将分析结果发送到客户端,客户端获取到数据变更后,作相应数据的统计分析操作
  • mysql
    • binlog
  • elasticsearch
    • 全文检索,用于app搜索功能
  • node.js
  • vue
    • 前端框架
  • pm2
    • 用于生产环境的nodejs server

CI/CD

  • jenkins pipeline
    • 从gitlab拉取项目源码
    • mvn命令打包,使用maven-dockerfile插件实现自动构建和上传到远程私有仓库

容器应用

  • docker
    • 云图书馆所有java应用docker化
    • jenkins pipeline实现半自动化
    • docker-compose

中间件

  • nginx
  • kafka

设计模式应用

  • 数据统计分析系统重构
    • 观察者模式
    • 责任链模式
    • 命令模式
  • ARTS
    • 代理模式
      • 静态代理
      • 动态代理
    • 策略模式

操作系统

  • ubuntu
    • 了解到我的日常工作不用依赖于windows系统后,果断换了ubuntu,很爽

工具

  • idea
  • vscode
    • 很好用的编辑器,出自微软
  • navicat
    • 数据库客户端
  • xmind
    • 思维导图
  • pycharm
    • python 编辑器

脚本语言

  • python
    • 写了一个清理docker image的小程序,从配置文件读取server信息,使用ssh登陆到server,执行shell命令

Java

  • 多线程
  • 异常处理