五岛润喵

五岛润喵 查看完整档案

深圳编辑南方科技大学  |  计算机科学 编辑深圳市梦途网络科技有限公司  |  CEO 编辑 zzw.at 编辑
编辑

很惭愧,就做了一点微小的工作,谢谢大家。

个人动态

五岛润喵 赞了回答 · 2月24日

解决为什么`echo -e "\n"`命令只有一个换行符却会输出两行空行?

因为echo命令本身默认会在输出字符串后面追加一个换行符,可以通过增加一个选项-n来阻止此默认行为:

echo -ne "\n"

关注 3 回答 3

五岛润喵 赞了回答 · 2019-12-19

解决Go有没有像Laravel一样优雅的框架,或者像Laravel Eloquent 的ORM?

优雅是个偏主观的口味,很难说你的优雅和我的优雅是一回事。

router层面,我觉得golang的很多框架都还蛮好,比如我就比较喜欢用chi这个框架,路由和中间件都有。

ORM这块,由于golang的OOP风格以及泛型的缺乏,的确没有类似风格的ORM实现,也许golang 2.0添加了泛型之后会有改观。社区比较流行的gorm也不符合我的口味,我目前也就是靠sqlx才能维持生活这个样子。

换语言,跨生态环境就这样,入乡随俗吧。

UPDATE:

有时候换了语言之后,老是想把原来习惯的那套东西弄到新语言这边来,但是这种做法是有坏处的,就是你可能最后搞出了一堆php味的golang代码而已。

越是抓住原先的习惯不放,就可能越难体会到golang的精髓。所以我经常会建议我那些转到golang的同事先试试把原先的那些东西忘掉,原汁原味的golang写多一点再说。

不破不立,有舍有得。

关注 10 回答 9

五岛润喵 赞了文章 · 2019-01-22

【前端面试】字节跳动2019校招面经 - 前端开发岗(三)

【前端面试】字节跳动 2019 校招面经 - 前端开发岗(三)

之前的一篇主要是 jQuery 和网络模型的知识点,这一篇则是侧重于编程实现,也是我二面所问的一些内容。

一、JS 的 new 操作符具体做了什么

描述

function A() {
  this.name = "a";
  this.getName = function() {
    return this.name;
  };
}
var a = new A();
  1. 编程实现 new 操作符。
  2. 考察继承实现 function inherit(Father, Son)

解析

/**
 * 编程实现new操作符
 */
var a = {};
a.__proto__ = A.prototype;
A.call(a);
console.log(a.name); //a

二、实现简易的模板函数

描述

function template(tmpl, data) {
  // TODO
}
template("我的名字是(name),我的工作是(work)", {
  name: "xxx",
  work: "yy"
});

// 函数的输出是 '我的名字是xxx,我的工作是yy'

解析

// 简易模版函数
function template(tmpl, data) {
  var result = tmpl;
  for (var key in data) {
    result = result.replace(new RegExp("\\(" + key + "\\)", "g"), data[key]);
  }
  return result;
}
let me = template("我的名字是(name),我的工作是(work),(name) Love (work)", {
  name: "xxx",
  work: "yy"
});
console.log(me);

三、使用 JS 实现一个 repeat 方法,

描述

function repeat(func, times, wait) {
  // TODO
}
const repeatFunc = repeat(alert, 4, 3000);
repeatFunc("hellworld");
//会alert4次 helloworld,每次间隔3秒

解析

function repeat(func, times, wait) {
  return message => {
    let timer = setInterval(() => {
      times-- > 0 ? func(message) : clearInterval(timer);
    }, wait);
  };
}
const repeatFunc = repeat(console.log, 4, 3000);
repeatFunc("hellworld");

四、算法——扑克牌问题

描述

我手中有一堆扑克牌, 但是观众不知道它的顺序。
第一步, 我从牌顶拿出一张牌, 放到桌子上。
第二步, 我从牌顶再拿一张牌, 放在手上牌的底部。
第三步, 重复第一步、第二步的操作, 直到我手中所有的牌都放到了桌子上。
最后, 观众可以看到桌子上牌的顺序是:(牌底部)1,2,3,4,5,6,7,8,9,10,11,12,13(牌顶部)
请问, 我刚开始拿在手里的牌的顺序是什么?
请编程实现。

解析

/**
 * Input 拿出牌的顺序 1,2,3,4,5,6,7,8,9,10,11,12,13
 * Output 牌堆原来的顺序
 */
function getCardsOrder(input, cards) {
  //Swap
  if (cards.length) {
    let popCard = cards.pop();
    cards.unshift(popCard);
  }

  //Push
  let popItem = input.pop();
  cards.unshift(popItem);

  console.log(`Popitem: ${popItem}`);
  console.log(`inputAfterPop: ${input}`);
  console.log(`Cards ${cards}`);
  console.log("");

  if (input.length == 0) {
    return cards;
  } else {
    return getCardsOrder(input, cards);
  }
}
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
let test = [1, 3, 5, 4, 2]; //1,2,3,4,5
let test2 = [1, 3, 2]; //1,2,3
let callback = getCardsOrder(input, []);
console.log(callback);
查看原文

赞 8 收藏 6 评论 5

五岛润喵 赞了文章 · 2018-10-10

使用 docker 搭建 web 服务环境

本文目的

做过开发的人对开发环境的安装、配置应该都不会太陌生,不管你做什么开发,对开发环境都会具有一定的依赖性的。对于 PHP 的 Web 开发来说,开发环境至少要有一个 Web 服务器(如 Apache、Nginx)、一个数据库服务器(如 MySQL)和一个 PHP 解析器吧,如果你的 PHP 代码使用的一些扩展,那你还需要给你的 PHP 安装上这些扩展,那样你的 PHP 代码才能够顺利地跑起来。对于一个只想静静地敲代码的开发人员来说,开发环境的安装与配置这种事情,只要经历一次就已经很折腾人了。可是,事情往往不能按人们的意愿进行的,你保不准会重装下系统,也保不准会换一个新的环境。总之就是,你会偶尔需要重新安装配置你的的开发环境!

你可以回想一下,上一次安装配置你的开发环境花费了多少时间,你所需要的 PHP 扩展是不是到运行时报错了才记起来没安装的呢?还好,自从有了 Docker 之后,妈妈再也不用担心我的开发环境的问题了。使用 Docker ,开发环境只需要安装配置一次,之后搭建相同的开发环境很简单,只需要一条命令即可完成!

这就是本文的目的,介绍 Docker 下安装配置 Web 的服务环境,实现一次安装配置,多次重用、跨平台重用的功能。

Docker 概述

Docker 是什么?可以将 Docker 理解为打包环境的容器,它可以将环境打包成镜像,在需要的时候,再基于该镜像来创建容器,这样所需要的环境就回来了。刚刚提到了 Docker 的两大核心概念,镜像和容器。

Docker镜像是为了满足特殊用途而按照Docker的规则制作的应用,有点儿类似于Win-dows里面的安装软件包。容器都是基于镜像而创建的,基于一个镜像可以创建若干个名字不同但功能相同的容器。镜像是静态的,容器是动态的。

除了镜像和容器之外,还有两个概念需要了解一下的,那就是仓库和 docker-compose。Docker 仓库是存放镜像的地方,我们可以从 Docker 仓库中拉取镜像到本地,然后再基于镜像创建容器。docker-compose 是管理容器的。Docker 的思想是一个容器只做一件事情,一个开发环境中可能会使用到多个容器,比如 Web 服务环境会使用到 PHP 、Nginx、MySQL 等等。那么一个 Web 服务环境就需要有三个容器,并且这些容器之间是存在依赖关系的,Nginx 依赖 PHP,PHP 依赖 MySQL。有了 docker-compose 就可以很好地管理这些容器了,它可以根据容器之间的依赖关系来决定每个容器的启动顺序和关闭顺序,可以管理各容器与宿主机器之间的端口映射关系,也可以配置容器与宿主机器之间的数据共享策略等等。

国内的镜像仓库

由于地理位置的原因,国内访问 Docker 的官方仓库是比较慢的,所以在这里介绍一个国内的 Docker 仓库:灵雀云。灵雀云镜像仓库中汇集了大量来自社区的优质作品,让用户组合、复用容器化微服务,轻松搭建新一代云端应用。

搭建 Web 服务环境

本文的重点是使用 Docker 搭建一套 Web 服务环境,如果在你的环境中还没有安装 Docker,可以参考这里自行安装。

安装了 Docker 之后,搭建 Web 服务环境就很简单了,只需要一个文件,一条命令即可!

一个文件: docker-compose.yml

nginx:
    image: index.alauda.cn/library/nginx
    links:
        - phpfpm
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - /Users/chenishr/www:/usr/share/nginx/html
        - ./nginx.conf:/etc/nginx/nginx.conf
        - ./nginx.d:/etc/nginx/conf.d

mysql:
    image: index.alauda.cn/library/mysql
    environment:
        MYSQL_ROOT_PASSWORD: qazasdedc123
    ports:
        - "3306:3306"

phpfpm:
    image: index.alauda.cn/library/php:7.0-fpm
    links:
        - mysql
    volumes:
        - /Users/chenishr/www:/var/www/html
    ports:
        - "9000:9000"
上面的文件内容很简单,它定义了三个容器,分别是 nginx、mysql 和 phpfpm 。每个容器定义里包含了一些信息,这里简单介绍一下。

image:这个字段表示该容器是基于那个镜像来创建的
links:表示在该容器内部需要访问那个其它的容器,该名字在容器内部的表现类似于域名,它会绑 定对应容器的 IP
ports:将容器内部的端口映射到宿主机器中
volumes:配置容器与宿主机器的共享文件或者目录

一条命令

有了上面的 docker-compose.yml 文件之后,只需要一条命令即可启动所有的容器,也就是搭建好了整个 Web 服务环境了!

docker-compose up -d

最后

有了 Docker 之后,搭建环境从未有过如此简单。

本文只是介绍了 Docker 的最基本的应用而已,它还很多用途而不仅限于本文。它可以实现多种版本的软件并存同时工作,比如,我可以在一个电脑上同时使用 PHP7 和 PHP5 而不会造成混淆。当然,还有其它的 …

查看原文

赞 7 收藏 13 评论 0

五岛润喵 回答了问题 · 2018-09-25

解决Vue无法在加载时读取cookies并加载到Vuex的store中

问题已经解决,原因是vue-router路由验证state中登录态时,用户信息还没有写入state中,因此只要在vue-router中验证state登录态之前将cookie中的用户信息写入state即可。

关注 1 回答 1

五岛润喵 提出了问题 · 2018-09-24

解决Vue无法在加载时读取cookies并加载到Vuex的store中

问题描述

我在使用Vue开发一个应用的前端,想要实现同时使用vuex的store和cookies来保存用户的登录信息,我的实现方法是:用户登录后将用户信息和isLogin字段保存在vuex的store以及cookies里面,然后vue-router跳转到用户后台,(vue-router验证vuex的store中isLogin字段是否为true来判断用户的登录态);在Vue加载时(mounted)我也写了将相关cookies读取并写入store的函数,但是每次刷新后这个并没有生效,所以总是要求用户重新登录。想知道应该怎么修改?谢谢大家!

相关代码

1. main.js中Vue的初始化:
new Vue({
    el: '#app',
    router,
    store,
    components: { App },
    template: '<App/>',
    mounted: function () {
        if (getCookie(isLogin)) {//getCookie等函数是我自己写的,应该没有问题
            this.$store.commit('account/setuser', getCookie('user'))
        } else {
            this.$store.commit('account/logout')
        }
    }
})
2. vuex的store中有关部分
export default {
  namespaced: true,
  state: {
    user: {},
    isLogin: false
  },
  mutations: {
    login (state, user) {//登录时调用的函数
      state.user = user
      state.isLogin = true

      setCookie('user', user)
      setCookie('isLogin', true)
  },

    logout (state) {//注销时调用的函数
        state.user = {}
        state.isLogin = false

        removeCookie('user')
        setCookie('isLogin', false)
    }
  }
}
3. vue-router中有关登录态的判断
router.beforeEach((to, from, next) => {
  //判断要去的路由有没有requiresAuth
  if(to.meta.requiresAuth){//需要认证
    if(store.state.account.isLogin == true){
      next();
    }else{
      next({
        path: '/login',
        query: { redirect: to.fullPath } 
      });
    }

}else if (to.meta.requiresNoAuth) {//需要不认证
    if(store.state.account.isLogin == false){
      next();
    }else{
      next({
        path: '/'
      });
    }
}{
    next();
  }
});

关注 1 回答 1

五岛润喵 关注了标签 · 2018-09-12

element-ui

Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库

A Vue.js 2.0 UI Toolkit for Web

https://element.eleme.cn/
https://github.com/ElemeFE/el...

关注 648

五岛润喵 关注了标签 · 2018-09-12

antdesign

react开发UI组件

关注 67

五岛润喵 关注了标签 · 2018-09-12

kotlin

Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。

Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

JetBrains,作为目前广受欢迎的Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。

Kotlin已正式成为Android官方支持开发语言。

关注 291

五岛润喵 关注了标签 · 2018-09-12

swift

Swift 是苹果 2014 年推出的编程语言,主要用来编写 iOS 和 OS X 程序。中文版手册:http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/。苹果宣称Swift的特点是:快速、现代、安全、互动。

关注 1142

认证与成就

  • 获得 0 次点赞
  • 获得 9 枚徽章 获得 0 枚金徽章, 获得 1 枚银徽章, 获得 8 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-12-21
个人主页被 135 人浏览