技术文章

Laravel系列之环境搭建 — VirtualBox+Vagrant+Homestead

怎甘沉沦 提交于 2021-02-17 22:56:40
一、为啥需要搭建环境   为了解决环境不统一问题,所以要搭建这么个玩意儿 二、步骤    Laravel对环境有所要求(不使用Homestead情况下),具体参考 官网    使用Homestead步骤   1. Homestead、VirtualBox、Vagrant     摘要:     Laravel 致力于让整个 PHP 开发体验变得愉快, 包括你的本地开发环境。 Vagrant 提供了一种简单,优雅的方式来管理和配置虚拟机。 Laravel Homestead 是一个官方预封装的 Vagrant box,它为你提供了一个完美的开发环境,而无需在本地机器安装 PHP 、Web 服务器和其他服务器软件。不用担心会搞乱你的操作系统!Vagrant boxes 是一次性的。如果出现问题,你可以在几分钟内销毁并创建 Box! Homestead 可以运行在任何 Windows,Mac,或 Linux 系统,它包括了 Nginx web 服务器, PHP 7.2,PHP 7.1,PHP 7.0,PHP 5.6, MySQL,PostgreSQL,Redis,Memcached, Node,以及开发 Laravel 应用程序所需要的东西。——摘自后盾人向军大叔(网站升级中,后期补链接)    1. 1 VirtualBox     VirtualBox 是 Oracle

手眼标定传统方法

眉间皱痕 提交于 2021-02-17 22:56:22
一、对机器人手眼协调关系的研究可以追溯到20世纪70年代。MIT和Stanford联合研制了一个手眼系统,该系统是由摄像机和机械手构成的机器人视觉系统。手眼系统根据 构型可以分为: (1) Eye-in-Hand 摄像机安装在机械手末端并跟随其一起运动。 (2) Eye-to-Hand 摄像机安装在机械臂外部的固定位置。 对于Eye-in-Hand,摄像机坐标系相对机器人世界坐标系的位姿总是变化的,而相对末端的位姿是恒定。对于Eye-to-Hand而言,则正相反。因此,对于前者,手眼标定求 取的是摄像机(眼)相对于机器人末端坐标系(手)的位姿。 二、一般描述法 机器人末端处于不同位姿下,对摄像机相对于靶标的外参进行标定,根据摄像机相对于靶标的外参和机器人末端的位姿,计算摄像机相对于机器人末端的外参。 三、坐标系说明 物体坐标系O,摄像机移动前后两个位置的坐标系为C1和C2,机械手末端移动前后两个位置的坐标系为E1和E2。下图是一个参考系关系图。 箭头方向从参考系指向被描述系 四、手眼标定基本问题 根据物体相对摄像机位姿,可得 其中,位姿变换矩阵的左上标是参考系,右上标是被描述系。 根据摄像机成像模型 M是外参矩阵。实际上,外参矩阵是世界坐标系相对于摄像机坐标系的位姿。 来源: oschina 链接: https://my.oschina.net/u/4397463/blog

堆内存泄漏移除导致tcp链接异常高

三世轮回 提交于 2021-02-17 22:55:29
故障现象: 1:活动前端Nginx服务器TCP连接数到1万多 2:活动后端Tomcat其中1台TCP连接数达4千,并且CPU瞬间到780%(配置8核16G),内存正常 3:重启后端Tomcat后,TCP连接数正常,但是持续1~2天,TCP连接数暴增,仍需再次重启 故障分析: Tomcat服务器TCP连接数上升,并发现象 1:Tomcat服务器内存异常,每次重启后一段时间内存使用到一定阶段后出现问题 2:Tomcat服务器top命令,服务进程异常,占用内存到4.4G后,出现CPU使用异常飙升 故障分析结论 1:Tomcat堆内存使用出现问题,GC资源回收次数增长和回收时长增加,最终导致CPU资源异常和TCP连接数飙升 故障分析结论验证 验证方法: 监控Tomcat服务JVM堆内存使用情况 Tomcat启动脚本添加 JAVA_OPTS="-Dfile.encoding=utf-8 -javaagent:/home/tomcat_games/lib/jmxtrans-agent-1.2.6.jar=/home/tomcat_games/conf/jmxtrans-agent.xml " 并将数据收集到elasticsearch HEAP内存使用数据绘图如下: 堆内存使用超过最大允许值,直线下降部分是服务重启 故障定位: 查找具体什么原因导致堆内存无法释放 故障定位方法一: jmap

“一次编码、到处运行”,淘宝云端一体化探索

我的未来我决定 提交于 2021-02-17 22:54:44
作者|孙棋(空蒙) 出品|阿里巴巴新零售淘系技术部 导读:当前移动互联网业务研发运维模式,云与多端互相割裂,有些全栈的探索缺乏成功案例,行业对云端一体化研发这块仍是空白,我们要思考: 如何能实现 1 个研发支撑云 + android + iOS 三端的业务快速落地。 是否有新的研发运维模式,让程序员回归程序,“一次编码、到处运行”是我们的答案。我们在闲鱼项目验证,原本 60 天的项目时间减少了 20 天,提效 33% 。希望本文的分析也能够给大家带来收获。 业务研发模式的演进 效率是业务研发运维模式演进核心驱动力 PC 互联网时代,单体应用包含前后端是最初的研发模式(淘宝经历开发人员写 velocity 模板,以及更早的 jsp、asp 页面)其实质是中心化搭火车的研发模型。 随着业务发展复杂性快速增加,赶火车的交付模式,极大的限制了业务发展,因此诞生了服务化的拆分,淘宝在 09 年的五彩石项目即基于这样的背景,微服务是一种软件架构,这背后更是一种研发模式的变革,从中心化研发模式到分布式的研发模式升级。 在业务分布式研发模式升级的同时,前后端分离研发模式也在同步的演进,从 ajax 到专业前端独立完成业务闭环,职业分工细化提效。但对前端同学而言,服务端的运维始终是其痛苦的技术门槛,以及在阿里以 Java 语言为基础的中间件生态内,一直没有很好解决。 进入移动互联网时代

elasticsearch重建索引

感情迁移 提交于 2021-02-17 22:54:24
1 、重建索引 一个 field 的设置是不能被修改的,如果要修改一个 Field ,那么应该重新按照新的 mapping ,建立一个 index ,然后将数据批量查询出来,重新用 bulk api 写入 index 中 批量查询的时候,建议采用 scroll api ,并且采用多线程并发的方式来 reindex 数据,每次 scoll 就查询指定日期的一段数据,交给一个线程即可 1.1 如果说旧索引的名字,是 old_index ,新索引的名字是 new_index ,终端 java 应用,已经在使用 old_index 在操作了,难道还要去停止 java 应用,修改使用的 index 为 new_index ,才重新启动 java 应用吗?这个过程中,就会导致 java 应用停机,可用性降低 给 java 应用一个别名,这个别名是指向旧索引的, java 应用先用着, java 应用先用 goods_index alias 来操作,此时实际指向的是旧的 my_index PUT /my_index/_alias/goods_index 1.2 新建一个 index ,调整其字段的类型 1.3 使用 scroll api 将数据批量查询出来 GET /my_index/_search?scroll=1m { "query": { "match_all": {} }, "sort"

16进制转换10进制的方法

爷,独闯天下 提交于 2021-02-17 22:54:04
之所以想到这个问题,是看阻塞队列大小的时候,看不懂: public static final int MAX_VALUE = 0x7fffffff; // 0x开头的标识16进制 16进制就是逢16进1,0~9这十个数字相同,我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方,依次类推。 所以,在第N(N从0开始)位上,如果是数a (a大于等于0,并且a小于等于 15,即:F)表示的大小为 a×16的N次方。 假设有一个十六进数 2AF5 直接计算就是: 5×16º+F×16¹+A×16²+2×16³=10997 也可以用竖式表示: 第0位: 5×160=5 第1位: F×16¹=240 第2位: A×16²=2560 第3位: 2×16³=8192 16进制 十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。 来源: oschina 链接: https://my.oschina.net/u/2244961

Java笔试题

痴心易碎 提交于 2021-02-17 22:52:31
精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑话我们这些未出校门的孩纸们,但是IT公司就喜欢考这些基础的东西,所以为了能进大公司就~~~当复习期末考吧。花了不少时间整理,在整理过程中也学到了很多东西,请大家认真对待每一题~~~ 下面都是我自己的答案非官方,仅供参考,如果有疑问或错误请一定要提出来,大家一起进步啦~~~ 1. 下面哪些是Thread类的方法() A start() B run() C exit() D getPriority() 答案:ABD 解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System类的方法,如System.exit(0)。 2. 下面关于java.lang.Exception类的说法正确的是() A 继承自Throwable B Serialable CD 不记得,反正不正确 答案:A 解析:Java异常的基类为java.lang.Throwable,java.lang.Error和java.lang.Exception继承 Throwable

二进制部署K8s集群第25节之k8s技术点整理

喜欢而已 提交于 2021-02-17 22:51:11
容器几个知识点 容器作用 • 可以把应用程序代码及运行依赖环境打包成镜像,作为交付介质,在各环境部署 • 可以将镜像(image)启动成为容器(container),并且提供多容器的生命周期进行管理(启、停、删) • container容器之间相互隔离,且每个容器可以设置资源限额 • 提供轻量级虚拟化功能,容器就是在宿主机中的一个个的虚拟的空间,彼此相互隔离,完全独立 • 三大核心要素 镜像(Image)、容器(Container)、仓库(Registry) • 容器1号进程觉定容器存活 Docker指令: • COPY|ADD 添加本地文件到镜像中,不同的是,如果是压缩包,ADD会解压,是链接,ADD会下载 cp 可以从宿主机拷贝文件到容器,也可以从容器拷贝镜像到宿主机 • CMD 构建容器后调用,也就是在容器启动时才进行调用,CMD不同于RUN,CMD用于指定在容器启动时所 要执行的命令,而RUN用于指定镜像构建时所要执行的命令。启同容器后执行的命令会覆盖CMD命令 • ENTRYPOINT 设置容器初始化命令,使其可执行化 ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT

2021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应,那么一个数字字符串比

左心房为你撑大大i 提交于 2021-02-17 22:50:37
2021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应,那么一个数字字符串比如"111”就可以转化为:"AAA"、"KA"和"AK"。给定一个只有数字字符组成的字符串str,请问有多少种转化结果? 福哥答案2021-02-17: 自然智慧即可。 1.递归。有代码。 2.动态规划。有代码。 代码用golang编写,代码如下: package main import "fmt" func main() { str := "7210231231232031203123" fmt.Println("1.递归:", number1(str)) fmt.Println("2.动态规划:", number2(str)) } func number1(str string) int { if len(str) == 0 { return 0 } return process1(str, 0) } func process1(str string, index int) int { strLen := len(str) if strLen == index { //1 return 1 } if str[index] == '0' { return 0 } ret := process1(str, index+1) if index+1 < strLen && (str

安装Docker Registry私服

↘锁芯ラ 提交于 2021-02-17 22:50:24
Docker的镜像服务器 1. https://hub.docker.com搜索registry 2. docker pull registry 3. 创建目录并编辑配置文件,如下图: 4. 配置内容如下: version:'3.1' services: registry: image:registry restart:always container_name:registry ports: - 5000:5000 volumes: - /usr/local/docker/registry/data:/var/lib/registry 5. 如图所示: 6.启动:docker-compose up -d 7. 访问:ip:5000/v2/ 8. 加速器的文件 /etc/docker/daemon.json中配置添加如下内容 "insecure-registries":["ip:5000"] 9. 如下图所示: 10. 保存退出编辑器 11. 重启服务 systemctl daemon- reload systemctl restart docker 12. 查看是否配置成功 docker info 13. 测试上传功能,先从中央仓库拉取一个tomcat镜像 docker pull tomcat 14. 查看全部镜像 docker images 15. 标记本地镜像并指向目标仓库