自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 资源 (1)
  • 收藏
  • 关注

原创 软件代码设计-小优化(三)

redis不仅仅可以作为key-value存储,还能实现发布订阅。

2022-03-04 15:55:32 324

原创 代码整理-优化(二)

看到同事在业务方法底部打印了日志,不禁想到了切面打印日志。于是动手测试了一把。这是同事在业务方法结尾加的打印日志。而且不止这一个方法有,其他方法都有。log.info("车辆故障列表返回完毕。");想到了切面,@Aspect,这个东西整体打印日志,不好么?于是上手测试了一番。虽然说代码都是一步一步优化来的, 我在这只贴最终版本。首先定义两个对象,记录日志信息。@Datapublic class RequestInfo { private String ip; pri

2022-02-16 10:48:17 118

原创 代码整理-小优化(一)

虽然更多时候都是使用CV大法,但是看见同事的代码,忍不住还是小优化了一下。具体看以下代码的优化。 String customerOrderId; if( (hitch.getReportOrderId() == null) || (hitch.getReportOrderId() == -1L) ) { customerOrderId = ""; } else {

2022-02-16 09:28:34 167

原创 外包有那么不堪吗?

鄙人一直做java开发工作,13年的时候,进入中科软外包给国家开发银行,18年的时候因为想进入互联网公司,提出离职。首先说提出离职,是想更多了解互联网公司用的技术,因为自己思想太局限了,对互联网的东西一概不知。所以觉得有必要走出去取了解更多一点。 这5年期间,鄙人一直对接国家开发银行的专家委员会一个业务部门,主要负责两个项目。15年之前一直是从小需求到大需求的升级完善。15年到18年正式启动一个新的项目。鄙人一直都是开发+需求、设计、项目进度把控+运维等等工作。这个过程是快乐的,是看的见成...

2021-07-31 15:25:34 1247 1

原创 对不起,已经过去的32年

请原谅我很自卑,我一直都在寻找自己的问题,为什么我总在频繁的换工作,为什么我从来没接触过架构升级,为什么我干了很多年的开发依旧这样一事无成。 但是骨子里有种自信,32了,依旧能找到一份开发的工作。我总在频繁的换工作,我还是能找到工作。 我有个特点,很独立。什么事情都情愿不张嘴,不去求别人,自己去搞定。我的圈子很小,除了工作有交集以外的,其他的不接触。我不八卦,无论跟任何人。但是我总自己臆想,想的天花乱坠的,有些没说出来,有些说出去了,感觉很傻X。 ...

2021-07-08 14:45:24 95

原创 git使用

首先看一下常用的版本控制工具:GITSVNCVSVSSTFS现在市面上用的最多的就是GIT和SVN,以GIT最火。但是两者真正的区别,有多少人能说的清楚呢。我想很大一部分人是跟着潮流去用的git吧。现在我们用的SVN,而且每次开发是没有打分支的,一直在主干上开发。的确是有这样的问题,就是改bug和新的需求并存的时候,只能等着bug提交测试上线,然后才能提交其他新需求功能代码。但是以原来的经验,其实svn也是可以解决这个问题的, 就是新需求肯定是在一个新的分支上开发,而改b.

2021-05-02 17:51:06 79

原创 为什么我们项目的日志只有最近七天的,是怎么设置的?

一直都是查看日志,看日志里的异常,看最近几天的日志。今天听课,老师提到“日志一般保存几天”这个点,然后发现我们的日志都是保留最近七天的,这是怎么设置的呢?首先说我们用的日志是log4j 1.2然后是我们日志的一个输出形式,具体自行百度: <appender name="pay" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="/home/www/logs/pro

2021-04-17 18:15:24 590

原创 spring boot同时兼容 jsp 和 thymeleaf

首先看一下目录结构,html和jsp存放的位置:第二步,看一下,配置,分别转向jsp和html的配置@Configurationpublic class WebConfigure extends WebMvcConfigurationSupport { @Resource IndiaInterceptor indiaInterceptor; /** * 注册我们的拦截器 * @param registry */ @Ov.

2021-03-25 10:25:41 567

原创 spring boot 打包,测试包和正式包

早几年,在外包公司,区分测试环境、正式环境,后来还弄个准生产环境。于是就有个问题,配置文件从测试环境上到准生产环境,要改一遍。从准生产环境上到正式环境,又要改一遍。当时觉得就这么习以为常。现在项目(spring mvc+spring),其实除了应用程序部署,是区分测试环境和正式环境的,其他的数据库、缓存服务器等等都是公用的。不过,配置文件是分开测试和正式的,那怎么对应测试环境就加载测试的配置文件,正式环境就加载正式环境的配置文件???????1. spring配置文件<beans pr

2021-03-23 15:45:51 753

原创 spring boot 项目 设置编码

spring mvc 项目设置编码,是在web.xml中配置CharacterFilter过滤器,然后设置encoding为UTF-8到了spring boot,没有配置文件了,怎么设置编码呢?1. 注册CharacterFilter,调用setEncoding@Bean public FilterRegistrationBean indiaCharacterFilter(){ CharacterEncodingFilter encodingFilter =..

2021-03-19 11:26:48 1084

原创 spring boot 整合filter

1.自定义filter这个spring mvc 和 spring boot没什么区别,都是implements Filterpublic class IndiaRegisterFilter implements Filter { private final Logger logger = Logger.getLogger(IndiaRegisterFilter.class); @Override public void init(FilterConfig filter.

2021-03-18 18:16:02 105

原创 spring boot整合拦截器

1.定义拦截器,spring mvc中定义拦截器,是extendsHandlerInterceptorAdapter类,这个类在spring boot(本人用的spring boot2.0) 中已经标记为@Deprecated。spring boot中定义拦截器,是implements HandlerInterceptor接口。重写方法和之前是没什么区别的。import com.springboot03.indiabotprj03.annotation.AuthWhite;import..

2021-03-18 17:57:32 129

原创 redis初识一

不知道redis诞生了多少年了,但是从2020年才开始接触这个东西。到2021年才算了解一些,但还是表面。Redis能用来干嘛我们项目里redis用作缓存,说到缓存就要说redis能存储的数据类型。说到存储,就要说到往哪里存储,还有数据丢失了,怎么回复呢。还有缓存穿透,缓存雪崩,缓存击穿等等。。。。我们项目里还用redis模拟队列,不过一般听课说的都是redis的list类型模拟队列,但是我们用的是redis的zset类型模拟的队列,用放到队列里的当前时间作为score...

2021-03-17 10:47:02 82

原创 springboot 整合redis

spring boot 一切从简,连整合redis都这么简单第一步,引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>第二步,自动加载R

2021-02-25 18:10:20 103 2

原创 spring boot实现文件上传

现在发现spring boot好简单啊,上传文件没有引入任何的配置, 无论是单文件上传还是多文件上传,都是手到擒来。下面是单文件上传: @RequestMapping(value = "/uploadImg.do") public Object uploadImg(@RequestParam MultipartFile file) { JSONObject retJson = new JSONObject(); retJson.put("isSucc

2021-02-20 15:08:01 116

原创 字符串拼接的几种方式

第一种方式:+= public static String plus1To10(){ String str = ""; for (int i = 1 ; i < 10 ; i++) { str += i + ""; if(i < 9) { str += ","; } } return str; }第二种

2021-02-19 10:03:52 802 1

原创 spring boot工程中,生成mybatis的mapper文件

在创建spring boot工程时,已经引入了mybatis的依赖。这里不再赘述。这里要说的是spring boot工程,中生成mybatis的mapper文件maven中配置对generator的依赖 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core&l.

2021-02-04 15:54:20 398

原创 spring boot 返回 jsp

1. 引入spring boot 对jsp的支持2. 定义spring mvc 视图解析器,jsp的前缀、后缀3. 定义controller转向jsp <!-- 内嵌tomcat对jsp的支持 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>to...

2021-02-04 15:18:40 1482

原创 Spring Boot使用JDBC连接,注入jdbc属性

这篇文章来说一下,如果使用jdbc,如何注入jdbc连接的一些属性呢?1. 是配置文件中定义jdbc连接的属性dataSource.driverClassName=com.mysql.jdbc.DriverdataSource.jdbcUrl=jdbc:mysql://localhost:3306/mysql?characterEncoding=utf-8&serverTimezone=GMT%2B8dataSource.username=usernamedataSource.pas

2021-02-02 14:11:05 775

原创 第一个spring boot应用

第一步,先创建spring boot工程,我用的maven,同时要引入对mysql、mybatis的依赖这时候,mysql的驱动、连接,mybatis就可以大胆使用了。第二步,就是mysql的驱动、连接等注意:这里的url后面要加上serverTimezone,我在测试的时候因为没加,抛出了如下异常:com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zon.

2021-01-28 18:13:08 107

原创 web网页播放音频文件

我们的产品或者运营为了监控主播聊天记录,给开发提了一个需求,就是在管理后台增加一个列表,用于查看主播和所有男用户的聊天记录。初步完成需求,就是直接把聊天记录份分页显示出来,加了一些查询条件。使用期间发现,音频文件并没有在线播放,要求能播放。于是加了一段如下的代码,但是无法播放,后来发现我们的音频文件竟然是amr文件。请注意:amr文件用<audio>标签是无法播放的<audio controls="controls" > <source id="a

2021-01-20 11:08:36 1972

原创 Mysql调优

字段 对于长度固定,建议用定长char。长度不固定,使用varchar。 能用tinyint就不用int,能用int就不用bigint 对于手机号固定长度11位,用bigint代替char,一般的字符集有gbk和utf8,gbk占2字节,utf8占3字节,用它们存储手机号占用的空间分别是22和33字节 尽量使用TimeStamp而不是DateTime 索引 主键,外键加索引; 关联表在关联字段上加索引;..

2021-01-14 20:33:32 81

原创 代码优化小技巧 -java

尽量重用对象比如String是不可变的,String str1 = "abc"; str1 += "def",实则这是两个对象。此时我们应该考虑用StringBuffer或者StringBuilder拼接字符串,保证一个对象。尽量使用局部变量局部变量保存在栈中,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。数据库连接、io流,要及时关闭尽量减少对变量的重复计算 for(int i = 0;i < list.size();i++){} 修改为 ...

2021-01-14 20:04:59 102

原创 mysql索引使用 三

引擎Mysql引擎有两种,MyIsam和InnoDB。默认是InnoDBSql执行计划Explain + sql语句 查看执行计划id select_type table partitions type possible_keys key key_len ref rows filtered ExtraSIMPLE 查询对应的表名 REFRANGE 可能用到的索引 真正用到的索引 使用索引的长度id越大,优先执行。Id相同,从上往下执行。select_type:因为现在都是分库分表,所以我

2020-10-27 08:04:26 108

原创 mysql索引使用 二

引擎Mysql引擎有两种,MyIsam和InnoDB。默认是InnoDBSql执行计划Explain + sql语句 查看执行计划 id select_type table partitions type possible_keys key key_len ref rows .

2020-09-20 21:30:48 178 1

原创 一个版本更新的需求,一个服务端开发与2个产品+1个android的对决

有人说“用人不疑,疑人不用”,但是马云说“用人也得疑”。在这个需求上,这个道理,提现的确实有点淋漓尽致。产品的需求是这样的,“用户一直不更新到新版本,导致应用的部分功能不能使用,所以要来个强制更新。但是要给用户1天的冗余时间,在发版日期的基础上给出1天的时间,如果再不更新,就不让使用了”。咋一看,好简单啊。于是产品负责人就去问android的老大,这个大概需要多久。各位可以忽略这个细节,因为产品不懂开发,不懂工作量估算,所以觉得谁可信就去问谁。这位老大是这么回复的,“这个就是服务端做,这个简单”

2020-08-01 21:45:33 180

原创 曾经从技术走向管理

2013年,工作已经有4个年头,那时候依然是一个追求技术的程序员。频繁的换工作但不知道想要去什么样的公司,很随心所欲的换工作,然后很随心所欲的选择公司,反正差不多也能驾驭的了。然后来了一家外包公司。。。。。。做为一位程序猿,一位很听领导话的程序猿,刚开始很努力的熟悉公司的项目,一下熟悉了好像是3个项目。然后被定为在了一个 【专家管理系统】的项目经理上,实际面试的是开发工程师,从进入公司到离开一直做得是项目经理的工作。这是5年的时间,错过了互联网,在这里做着项目经理的工作。我是一位程序猿,

2020-06-21 15:39:54 207

原创 java使用firebase推送带有文字、图片的消息

前端时间,印度的应用,增加了firebase推送。然后,来了新的需求,firebase推送,增加图片。这是我们第一种方式:AndroidNotification.Builder(具体使用查看官方文档),自带了setImage方法,但是设置了图片以后没推送出来。继续查文档,第二种方式:旧版http,仍然没推送出来。JSONObject notification = new JSONObject();notification.put("title", title); // Notif

2020-06-12 18:04:20 1809 2

原创 去做海外,无数深坑-第一次使用java调用javascript,第一次调用curl

工作很多年了,发现互联网有着很多以前从来没听过的名词,真是尴尬啊。前端时间,产品经理提出 【埋点】,当时我就有点懵圈,这是啥玩意。后来请求了android的姑娘,大致意思就是我们的操作上报第三方,由第三方来统计。先说这是印度市场的产品,产品联系了上报branch,那这事必须落到开发头上啊。branch这家是收费的,提供技术支持。我找了半天文档,也没发现java api。只看到了web调用。这个也只能调用啊,怎么办呢,奔着完成任务去的啊。原来从来不知道java还能调用javascript,不管是人

2020-06-09 13:01:20 236

原创 分表之后的批量建表

感谢人生每一次经历。如果不亲自创建表,还不知道分100表是怎么创建的。delimiter //drop procedure if EXISTS `createGroupChatTablesWithIndex`;create procedure createGroupChatTablesWithIndex()BEGINDECLARE `@i` int(11); DECLARE...

2020-04-03 21:40:57 466

原创 java8新特性-Date

Date类增强8.1 Clock8.2 LocalTime8.3 LocalDate8.4 LocalDatetime实例://获取当前时间对应的毫秒数原来:System.currentTimeMillis()现在:clock.millis()//创建LocalDateLocalDate localDate1 = LocalDate.now();Loca...

2020-03-18 18:36:41 175

原创 java8新特性-Stream

Stream:Stream 的创建需要指定一个数据源,比如 java.util.Collection的子类,List或者Set, Map不支持。Stream的操作可以串行执行或者并行执行。Stream操作分为中间操作和最终操作,中间操作都会返回一个Stream,可以继续其他的中间操作,而最终操作之后将不能再继续执行其他Stream。6.1 中间操作 1). filter()...

2020-03-18 18:33:57 144

原创 java8新特性-Optional

Optional5.1 提供方法: 1). of(),提供转换成Optional对象,不能处理null,如果值是null,直接抛出NullPointerException 2). ofNullable(),提供转换成Optional对象,可以处理null 3). isPresent(),存在返回true,不存在返回false,null返回fal...

2020-03-18 18:32:58 308

原创 大型网站技术架构-大型网站架构衡量指标及优化策略

在读《大型网站技术架构》第二章大型网站技术架构模式,光谈模式怎么也不好理解。在读第三章大型网站技术架构要素之后,觉得这两章应该合并来说。大型网站的几个要素:性能 衡量指标:响应时间、TPS、性能计数器 优化手段: 1. CDN(网站架构模式缓存) 2. 反向代理(网站架构模式缓存) 3. 负载均衡(网站架构模式缓存)...

2020-03-17 08:54:28 298

原创 大型网站技术架构-大型网站架构演化

这是第二遍看这本书,用思维导图+博客的形式,来整理,消化,输出。我不能再以读过这本书来作为努力安慰自己。

2020-03-15 22:49:09 134 3

原创 重新封装List的多种方法

我设计过数据库,也写过很多业务代码。我们设计数据库的时候,一般都是外键关联,每次需要外键涉及到的表的属性,都是直接关联查询或者用到的时候再去查询。原来没有分库分表,一个sql搞定。现在分库分表之后,发现每次都得二次查询。这样就需要针对查询出来的list再重新封装一次。我们大家很熟悉的,都不用思考的就是这样写,至少我从来没测试过这样写的效率,for(int i = 0;i<userI...

2020-03-02 16:38:07 918

转载 Tomcat 爆出高危漏洞!

转载:https://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&mid=2247492800&idx=1&sn=6dad86167622ce1607a77033bd755132&chksm=eb5061f6dc27e8e0e87b213e6f8e5aeef78db632ade3b4b219857c56e863251c8a7d...

2020-02-27 12:11:40 643

原创 jquery知识点记录一

今天写一段定制页面的jquery代码,发现好多都没有记忆,于是一边写,一边百度。具体列的形式如下图:需求就是控制列的显示,比如激活数、注册数等等可显示或不显示,每一个统计最多显示5天少则1天可定制。这是最后的代码:$("input:checkbox[name^='checkStat_']").each(function(index,eachCheckStat){ ...

2020-02-20 20:32:32 210

原创 推荐书单-微信读书约起

技术类 并发编程 1. 《java多线程编程核心技术》 2. 《java并发编程的艺术》管理类 1. 《人件》 2. 《李元芳履职记》传记类 1. 《腾讯传》历史类 1. 《明朝那些事》亲子类 1. 《龙应台人生三书》 ...

2020-02-14 13:45:25 167

原创 mysql索引使用 一

来公司几个月了,成长很快。无论是业务还是技术,自己能感觉到熟悉的很快,也听到了领导的夸奖。谢谢啊!工作10年了,感谢这10年奠定的基础。能让我很快的熟悉项目,很快的协助同事完成任务。最近几年也做过项目管理的一些事,所以我也敢说敢问。勇敢的跟同事去要任务,因为其他服务端开发的同事都是兼职,所以我必须感谢我的勇敢。来到公司的这几个月,除了维护项目,也做了几个新功能。说到这里有点不好意思, 还做...

2020-02-14 11:19:31 265

并发编程示例,涉及到AtomicXXX、CountDownLatch、线程池等

并发编程的一些小示例 1.等待通知的几种方式,包括Object的wait/notify,Condition的await/signal 2. CountDownLatch,统一控制多线程开始和结束 3.原子操作,AtomicXXX 4.线程池

2020-02-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除