
软件开发
文章平均质量分 84
360linker
360linker技术社区的发起人,曾在多家头部互联网公司任职,致力于打造一个帮助我们实现高效技能提升的圈子,分享IT圈内技术、产品、运营、市场等信息。
展开
-
跳表的实现原理
我们知道二叉搜索算法能够高效的查询数据,但是需要一块连续的内存,而且增删改效率很低。跳表,是基于链表实现的一种类似“二分”的算法。它可以快速的实现增,删,改,查操作。我们先来看一下单向链表如何实现查找当我们要在该单链表中查找某个数据的时候需要的时间复杂度为O(n).怎么提高查询效率呢?如果我们给该单链表加一级索引,将会改善查询效率。如图所示,当我们每隔一个节点就提取出来一个元素到上一层,把这一层称作索引,其中的down指针指向原始链表。当我们查找元素16的时候,单链表需要..转载 2021-01-26 10:37:46 · 1392 阅读 · 1 评论 -
IDEA使用总结
如果你之前使用的是其他的ide,刚开始会感觉不是很习惯。但当你熟悉IDEA的基本使用后,你会发现它相比其他ide的优点。下面是我使用过程中,觉得IDEA中比较重要的设置,功能和技巧。1.IDEA启动速度优化安装IDEA后,可能会感觉启动速度比较慢。通过修改IDEA的配置文件能有效加快IDEA的启动速度。找到IDEA的安装目录,如:C:\Program Files\JetBrains...转载 2020-01-10 13:52:32 · 315 阅读 · 0 评论 -
2018.4.16 linker航海日志之 软件版本中快照版本与发布版本区别
快照(SNAPSHOT)版本,在编译部署时会自动发布到快照版本库中,覆盖老的快照版本,而在使用快照版本的模块自动从镜像服务器上下载最新的快照版本。正式发布版本在编译部署时会自动发布到正式版本库中,而使用正式版本的模块编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。软件不同版本含义Beta: 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一缺陷,需要经过多次测试...原创 2018-04-17 09:34:26 · 369 阅读 · 0 评论 -
IntelliJ IDEA 的 .idea 目录加入.gitignore无效的解决方法
无效的原因是:对应的目录或者文件已经被git跟踪,此时再加入.gitignore后就无效了,解决办法:先执行[文件夹] git rm -r --cached .idea[文件] git rm --cached demo-project.iml再重新加入.gitignore文件...原创 2018-04-17 16:28:41 · 1319 阅读 · 0 评论 -
Gerrit 使用简单说明
代码提交要求一个Commit对应一个修改点(除非是在项目初始阶段或是升级BSP时)。不要随便修改文件的属性。Windows 修改过的文件属性会变成755,上传代码时请注意修改成文件的原属性,可以用git whatchanged 来查看自己commit修改的文件。缩进格式跟原文件保持一致。不要修改跟提交内容无关的代码。Git commit 注释要求设置GIT使用vim来编辑commit,请不要使用-...原创 2018-04-23 11:27:01 · 1953 阅读 · 0 评论 -
git&gerrit 使用过程中遇到的问题及解决方法
公司中使用git进行代码管理, 使用gerrit 来做code review及权限管理。在使用的过程中, 遇到了不少问题, 现把它分享出来, 供大家参考。1 push 失败【现象】git push 出错, ! [remote rejected] master -> master (prohibited by Gerrit)error: failed to push some refs to ...转载 2018-04-23 16:23:52 · 4516 阅读 · 0 评论 -
web项目启动流程分析
在web项目的启动过程中,我们希望知道它的一般流程是什么,这样我们就可以在各个流程中加入相应的功能,或者对于我们排错也有帮助。 我们知道,当我们启动tomcat容器以后,容器首先初始化一些必要的组件,加载项目所引用到的jar包(分别从jdk,tomcat,还有web-inf中的lib目录下),然后接下来的一步就是去读取web项目的web.xml配置文件。所以web项目里面必须要有web.xm...原创 2018-04-19 15:20:41 · 9491 阅读 · 1 评论 -
正确实现用spring扫描自定义的annotation
在使用spring时,有时候有会有一些自定义annotation的需求,比如一些Listener的回调函数。比如:@Servicepublic class MyService { @MyListener public void onMessage(Message msg){ }}一开始的时候,我是在Spring的ContextRefreshedEvent事件里,通过co...转载 2018-04-19 15:46:47 · 331 阅读 · 0 评论 -
RESTFUL URL命名原则
URL命名通常有三种,驼峰命名法(serverAddress),蛇形命名法(server_address),脊柱命名法(server-address)。由于URL是大小写敏感的,如果用驼峰命名在输入的时候就要求区分大小写,一个是增加输入难度,另外也容易输错,报404。蛇形命名法用下划线,在输入的时候需要切换shfit,同时下划线容易被文本编辑器的下划线掩盖,支付宝用的是蛇形命名法,stack...原创 2018-04-24 10:01:06 · 54611 阅读 · 3 评论 -
Maven和Gradle对比
java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。笔者有幸见证了Maven的没落和Gradle的兴起。Maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。我们可以从这五个方面来分析一下Gradle比起Maven的先进之处。依赖管理系统M...原创 2018-04-25 11:31:42 · 312 阅读 · 0 评论 -
使用Jackson进行json转对象时,遇到的字符串转日期的异常处理(Can not deserialize value of type Date from String)
出现的场景:服务端通过springmvc写了一个对外的接口,返回一个json字符串,其中该json带有日期,格式为yyyy-MM-dd HH:mm:ss客户端通过feign调用该http接口,指定返回值为一个Dto,Dto中日期的字段为Date类型客户端调用该接口后抛异常了。报错异常如下:feign.codec.DecodeException: JSON parse error: Can not ...原创 2018-05-17 18:46:20 · 4601 阅读 · 0 评论 -
Spring Cloud Feign 使用总结
(1)微服务客户端调用服务提供者提供接口实现方式:在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate,国内的OKHTTP 。其中,用起来...原创 2018-05-17 21:12:38 · 3024 阅读 · 0 评论 -
idea Autowired 提示红色更改
转载 2018-05-11 17:50:36 · 5205 阅读 · 0 评论 -
SpringCloud Feign报错:Method has too many Body parameters
1、feign多参数问题1.1GET方式错误写法@RequestMapping(value="/test", method=RequestMethod.GET) Model test(final String name, final int age); 启动服务的时候,会报如下异常:Caused by: java.lang.IllegalStateException: Method has...原创 2018-05-18 16:33:56 · 2447 阅读 · 0 评论 -
Win7配置gradle环境变量
配置gradle的环境变量的方式和配置JAVA_HOME等其他环境变量的步骤是一样的。通过"我的电脑"图标,右键打开菜单栏,找到"属性"点击打开,进入控制面板页面,找到高级系统设置打开,进入环境变量的配置界面。图1.点击上图的"环境变量"进入配置界面,在下面的"系统变量"一栏进行创建,将gradle目录复制过来贴上,到bin的上一级,在path中引用的时候如果环境变量只到bin的上一级,那么在引用...原创 2018-04-29 07:05:16 · 2345 阅读 · 0 评论 -
莫名其妙遇到“找不到或无法加载主类”
idea本身缓存的问题。IDEA-》file-》invalidate Cache/restart之后再重新build。问题解决了。原创 2018-05-15 16:22:28 · 756 阅读 · 0 评论 -
ntelliJ IDEA 报错:找不到包或者找不到符号
项目找不到编译文件。调整项目编译文件输出目录。原创 2018-05-16 11:14:06 · 3420 阅读 · 1 评论 -
Spring 中两个bean之间相同属性的赋值工具类
BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。二、用法:BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:pu...原创 2018-05-22 18:25:47 · 5615 阅读 · 0 评论 -
总结一个技术总监的教训和经验
资深程序员是团队中最强大的生产力,但往往被不合理的工作安排浪费掉。因此作为一个团队的技术的“头”,必须要有明确清晰的认识,把主要的事务性工作剥离出来,并且放弃大量的管理“权力”,以提高团队开发质量和效率为最主要的目标去安排自己的工作。一般来说技术总监其实会被要求做事实上是2个职位的工作:主程、项目经理(技术化)因此必须明确此两个职位的工作任务分割,然后把项目经理的工作,安排给另外一个人做。当然其职...转载 2018-05-16 15:11:11 · 6234 阅读 · 0 评论 -
接口设计六原则
一.单一职责原则 Single Responsibility Principle, 简称SRP。定义:There should never be more than one reason for a class to change. 应该有且仅有一个原因引起类的变更。职责的划分?单一的定义和级别?应该根据实际业务情况而定。关注变化点。实际使用时,类很难做到职责单一,但是接口的职责应该尽量单一。 ...原创 2018-05-16 15:15:50 · 249 阅读 · 0 评论 -
HTTP 304状态码的作用,减少不必要的数据传输
304状态码或许不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应。整个请求响应过程如下:客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。服务端只要判断这个时间...原创 2018-05-27 16:40:24 · 4211 阅读 · 0 评论 -
主流Java数据库连接池比较及前瞻
主流数据库连接池常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等C3p0: 开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。DBCP (Database Connection Pool...转载 2018-05-16 16:54:51 · 1583 阅读 · 0 评论 -
git 简易教程
Git 是用C写的一个分布式版本控制系统。集中式 VS 分布式集中式版本控制系统必须联网才能工作。分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库。多个人如何协作只需把各自的修改推送给对方,就可以互相看到对方的修改了。和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多。Git的优势不单是不必联网还有极其强大的分支管理,把SVN等远远抛在了后面。GIT 的组成部...原创 2018-05-16 19:58:12 · 640 阅读 · 0 评论 -
Feign正确的使用姿势和性能优化注意事项
1. feign自定义Configuration和root 容器有效隔离。用@Configuration注解不能在主@ComponentScan (or @SpringBootApplication)范围内,从其包名上分离注意避免包扫描重叠,最好的方法是明确的指定包名2. Spring Cloud Netflix 提供了默认的Bean类型:Decoder feignDecoder: Respons...原创 2018-05-28 12:55:42 · 5721 阅读 · 0 评论 -
Spring Cloud Eureka详解
一 Eureka服务治理体系1.1 服务治理服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装。主要负责完成微服务架构中的服务治理功能。 Eureka服务治理体系如下:1.2 服务注册在服务治理框架中,通常都会...转载 2018-05-28 14:00:38 · 363 阅读 · 0 评论 -
spring cloud : 网关Zuul(过滤:安全、监控、限流、路由)
单点搭建注意:蓝色虚线代表注册;绿色虚线代表调用、红色虚线代表心跳1. 添加依赖创建项目tcloud-gateway-zuulserver , pom.xml内容如下<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs...转载 2018-05-28 14:14:43 · 1427 阅读 · 0 评论 -
Spring Cloud 客服端负载均衡 Ribbon
一、简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。包括前面的提供的声明式服务调用也是基于该Ribbon实现的。理解Ribbon对于我们使用Spring Cloud来讲非常的重要,因为负载均...转载 2018-05-28 14:21:45 · 225 阅读 · 0 评论 -
客户端实现负载均衡:springCloud Ribbon的使用
客户端实现负载均衡:springCloud Ribbon的使用 Netfilx发布的负载均衡器,是一个基于http、tcp的客户端负载均衡工具,具有控制http、tcp客户端的行为,为ribbon配置服务提供者的地址后,ribbon就可以经过springCloud的封装实现客户端负载均衡的服务调用。 服务端负载均衡负载均衡主要是实现对系统的高可用、网络压力的缓解、处理能力的伸缩。对于数据流量...转载 2018-05-28 14:25:37 · 289 阅读 · 0 评论 -
移动端本地 H5 秒开方案探索与实现
| 导语 企业微信移动端项目中有需求要展示数据趋势的可视化图表,经过调研,最终决定以单页面 H5 来完成,对 APP 里的一些使用 H5 实现的功能模块,一般体验都比原生差,那么怎么提高h5加载速度?优化 h5 体验?适用场景:需要快速迭代、客户端难实现的、用作展示的功能模块,例如可视化图表。一、为什么 H5 体验糟糕为什么打开一个 H5 页面会有一长段白屏时间?因为它做了很多事情,大概是:初始化...转载 2018-06-11 12:40:23 · 309 阅读 · 0 评论 -
DApp会是下一个风口?
在过去的10年,移动互联网、云计算、大数据等风起云涌,而在未来10年,随着区块链分布式技术的发展,公链基础设施的不断完善, DApp(去中心化应用)可能将成为主流。与传统的互联网应用不同,DApp去掉了第三方运营平台,不需要平台方运营代码、储存用户数据,而是直接连接用户和开发者。研发DApp则不需要经过任何公司批准,平台的规则也不会被任何人改变。从系统结构的角度看,DApp的后端运行在去中心化的...转载 2018-06-04 14:43:16 · 940 阅读 · 0 评论 -
Go语言简易教程
简介创立时间2007年 google作为20%项目开始研发 2009年11月10日 开源,获得TIOBE年度语言 2012年3月28日 发布Go1.0版本 2016年8月18日 发布Go1.7版本创始人Robert Griesemer (V8,Chubby,HotSpot JVM) Rob Pike(Unix,UTF-8,plan9) Ken Tompson(B语言、C语言、Unix之父,图灵奖)...转载 2018-06-04 15:39:48 · 385 阅读 · 0 评论 -
git pull 报错:权限不够 Permission denied
一、背景在git 提交的时候,突然就行不通,一直报错:Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.12345二、解决方案1、刚开始以...转载 2018-05-28 17:20:38 · 11524 阅读 · 0 评论 -
服务的注册与发现(Eureka)
一、spring cloud简介spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于springboot的,所以需要开发中对springboot有一定的了解,如果不了解的话可以看这篇文章:2小时学会spring...转载 2018-05-28 19:41:24 · 312 阅读 · 0 评论 -
服务消费者(rest+ribbon)
在上一篇文章,讲了服务的注册和发现。在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。一、ribbon简介Ribbon is a client side load balancer which...转载 2018-05-28 19:42:28 · 499 阅读 · 0 评论 -
服务消费者(Feign)
一、Feign简介Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。简而言之:Feign 采用的是基于接口的注解Feign 整合了ribbon二、...转载 2018-05-28 19:43:30 · 200 阅读 · 0 评论 -
git merge 和 git rebase 小结
git merge是用来合并两个分支的。git merge b # 将b分支合并到当前分支同样 git rebase b,也是把 b分支合并到当前分支-----------------------------------他们的 原理 如下:假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。$ git checkout -b mywork origin假设远程分支"...转载 2018-06-11 18:10:22 · 154 阅读 · 0 评论 -
kafka如何彻底删除topic及数据
前言:删除kafka topic及其数据,严格来说并不是很难的操作。但是,往往给kafka 使用者带来诸多问题。项目组之前接触过多个开发者,发现都会偶然出现无法彻底删除kafka的情况。本文总结多个删除kafka topic的应用场景,总结一套删除kafka topic的标准操作方法。step1:如果需要被删除topic 此时正在被程序 produce和consume,则这些生产和消费...转载 2018-06-05 07:30:06 · 127862 阅读 · 5 评论 -
tornado下https配置
在这篇文章中:问题背景SSLError问题背景越来越多的网站已经支持https,相比于http更安全。尤其有的开发网站只支持https,例如微信公众平台。这里暂时不提tornado如何搭建https服务,回头有时间再记一下。SSLError可以用AsyncHTTPClient发送一个简单的https请求https_url = "https://path" https_client = ...转载 2018-06-05 07:32:18 · 2951 阅读 · 0 评论 -
tornado 简易教程
引言回想Django的部署方式以Django为代表的python web应用部署时采用wsgi协议与服务器对接(被服务器托管),而这类服务器通常都是基于多线程的,也就是说每一个网络请求服务器都会有一个对应的线程来用web应用(如Django)进行处理。考虑两类应用场景 用户量大,高并发 如秒杀抢购、双十一某宝购物、春节抢火车票 大量的HTTP持久连接 使用同一个...转载 2018-06-05 07:34:57 · 26917 阅读 · 2 评论 -
HBase跨版本数据迁移总结
在这篇文章中:一.迁移过程遇到问题以及解决二.后续某客户大数据测试场景为:Solr类似画像的数据查出用户标签——通过这些标签在HBase查询详细信息。以上测试功能以及性能。其中HBase的数据量为500G,Solr约5T。数据均需要从对方的集群人工迁移到我们自己搭建的集群。由于Solr没有在我们集群中集成,优先开始做HBase的数据迁移,以下总结了HBase使用以及数据迁移遇到的各种问题以及解决方...转载 2018-06-05 07:43:27 · 599 阅读 · 0 评论