光哥java学习笔记
文章平均质量分 92
PostTruth
书写是对思维的缓存
展开
-
接口性能优化思路
接口性能优化思路背景HIS 这边有一个扫码取药的接口,涉及到整个就诊流程:预约–》签到–》开始就诊–》添加处方及药品–》确认处方–》确认账单–》创建交易及订单 --》付款 --》 结束就诊 --》 签退。整个流程业务非常复杂,涉及接口和远程服务也非常多,因此接口响应很慢,耗时很长。类似的涉及到整个就诊流程的操作还有很多,比如:核销,也是要走一遍上面的流程,只是在【诊中】的操作不同,可能是添加药品,也可能是添加检查,体检,诊次套餐之类。这类操作每个步骤都非常明确,常常以一个 Pipeline 的形式封原创 2021-01-29 17:17:15 · 2429 阅读 · 1 评论 -
布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点
布隆过滤器(概率型数据结构): 某样东西一定不存在或可能存在布隆过滤器原理?把一个 key 进行好几个 hash 运算后,得到的 hash 值,对一个 bit 数组取模放进去,用 1 表示, 比如下面示例:这个 再有其他 key 到来,再用同样的 方法计算 hash 值,判断bit数组的该位置是否为 1,都为 1 表示已存在(可能误判),不为 1,表示一定不存在.应用场景:1. 判断一个数据是否在数据库存在, 不存在再插入.(爬虫场景的幂等性入库操作)(对已经爬取过的 URL 去重)2.原创 2020-11-18 14:25:46 · 575 阅读 · 0 评论 -
关于使用第三方库的一些思考和建议
在项目中免不了要使用第三方库, 使用第三方库,不但要统一,还可以浅浅的封装一层,预留未来的扩展性。为什么建议浅浅的封装一层?举个例子,如果不封装,redis官方Java客户端Jedis可能有这样一些接口:String Memcache::get(String key)String Memcache::set(String key, String value)String Memcache::del(String key)浅浅的封装一层,会变成这样:String MyKV::get(Strin原创 2020-11-16 22:46:55 · 619 阅读 · 0 评论 -
IP、子网掩码、缺省网关/默认网关、DNS、服务器、端口的总结
网络的基本概念客户端:应用 C/S(客户端/服务器) B/S(浏览器/服务器)服务器:为客户端提供服务、数据、资源的机器请求:客户端向服务器索取数据响应:服务器对客户端请求作出反应,一般是返回给客户端数据screenshot.pngURLUniform Resource Locator(统一资源定位符)网络中每一个资源都对应唯一的地址——URLIP 、子网掩码转载 2016-04-23 10:52:57 · 24453 阅读 · 3 评论 -
抽象类与接口的区别:
抽象类与接口的区别:A:成员区别: 抽象类: 成员变量:可以是变量也可以是常量。 构造方法:有 成员方法:可以抽象也可以非抽象 接口: 成员变量:原创 2015-12-24 13:35:17 · 380 阅读 · 0 评论 -
白话java之带缓存的输入输出流详解
带缓存的输入输出流缓存是IO的一种性能优化,缓存流为IO流增加了内存缓存区.有了缓存区,使得在流上执行skip(),market(),reset() 方法成为了可能--_--_-__--_===.BufferedInPutStream和BufferedOutPutStream类BufferedInPutStream类可以对所有的InPutStream类进行带缓存区的包装,以达到性能的优原创 2015-12-25 14:43:14 · 3251 阅读 · 1 评论 -
比较InPutStream和BufferedInPutStream的性能
不是说BufferedInPutStream比InPutStream效率高吗?但是我用它们同样读取一个30M大小的文件却正好相反??怎摸回事呢?/** * 带缓存的输入输出流: 缓存是Io的一种性能优化 比较InPutStream和BufferedInPutStream的性能 */import java.io.BufferedInputStream;import java.io.F原创 2015-12-25 14:48:01 · 1398 阅读 · 0 评论 -
qq设计之 里氏替换原则
在面向对象的程序设计中,里氏替换原则(Liskov Substitution principle)是对子类型的特别定义。它由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次会议上名为“数据的抽象与层次”的演说中首先提出。转载 2016-04-21 07:17:45 · 448 阅读 · 0 评论 -
浅谈java异常处理机制
什么是异常?异常:异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序的正常运行。异常的继承结构是什么?在整个java的异常结构上,实际上有以下两个最常用的类:Exception、Error,这两个类都是Throwable的子类。Excep转载 2016-04-21 07:20:32 · 338 阅读 · 0 评论 -
java Io操作分类整理(终于不再迷糊了!!!)
下面对学习进行一下简单的总结 。(注图片未上传,想看请下载附件): IO流主要用于硬板、内存、键盘等处理设备上得数据操作,根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)。根据流向不同,可以分为:输入流和输出流。 其中主要结构可以用下图来表示:转载 2015-12-23 21:45:28 · 2798 阅读 · 3 评论 -
jav服务端-客户端Socket通信改进(多线程)
扩展的Socket通信实例:上述程序,只能相应一个客户端的链接请求,在实际应用中,服务器一般需要相应多个客户端的请求,因此severeSocket对象的accept()方法每当有一个连接请求发生时,就会产生一个客户端的Socket对象.因此只要用此方法反复监听客户端请求 ,就会为每一个客户生成一个专用的Socketduixiang 进行通信.下面是一个可实现一对多Socket通信的例子.imp原创 2015-12-23 00:38:18 · 1128 阅读 · 0 评论 -
解密Java IO流中的flush()方法的由来
前言: 大家在使用Java IO流中OutputStream、PrintWriter ……时,会经常用到它的flush()方法。 一.为什么要flush: 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存。这可以通过BufferedOutputStream或BufferedWriter 链接到底层流上来实现。因此,在写 完数据时,flush就显得尤为重要。 上图原创 2015-12-22 23:42:59 · 1410 阅读 · 0 评论 -
java编写服务_客户端通信实例讲解(适合初学者)
服务器端程序基于TCP协议的Socket通信是一种可靠的,基于连接的协议,发送方和接收方对应的两个socket之间必须建立链接,以便在TCp协议的基础上进行通信,当一个socket等待链接时(通常是值通常是指服务器socket),另一个socket可以要求进行链接,一旦两个socket进行链接起来,就可以进行双向数据传输.双方都可以进行发送或接受操作.对于客户端,可以生成一个Socket对象打开S原创 2015-12-22 23:38:55 · 484 阅读 · 0 评论 -
求二维数组鞍点
/** * 问题:找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列上最大(也可能没有鞍点) * 思路:先找二位数组每一行的最大值,记录下该最大值的列数,再比较这个数在该列是否最大,若最大则存在. */import java.util.Scanner;/** * 问题:找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列上最大(也可能没有鞍点) * 思路:先找二位数组每一原创 2015-12-22 00:34:32 · 6136 阅读 · 3 评论 -
java中Integer与int的种种比较你知道多少?
如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助。package com原创 2015-12-21 22:05:13 · 553 阅读 · 0 评论 -
深刻理解Java编程的7个例子
1. 阅读下列代码回答问题(第一个Java程序,理解PATH和CLASSPATH,学会使用javac和java命令) package cn.edu.uibe; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello原创 2015-12-20 23:17:34 · 430 阅读 · 0 评论 -
关于正则表达式的一道面试题
这里写代码片import java.util.Arrays;public class ip_test { /** * "172.25.27.1 3.25.118.32 105.38.225.12" * 对上面字符串把ip地址切割出来进行排序 * */ public static void main(String[] args) {原创 2015-12-19 17:44:44 · 2643 阅读 · 2 评论 -
Java中的垃圾回收
链接:http://it.deepinmind.com/gc/2016/04/19/garbage-collection-in-java.html原文:https://plumbr.eu/handbook/garbage-collection-in-java碎片及整理(Fragmenting and Compacting)JVM在清除不可达对象之后,还得转载 2016-04-21 07:29:19 · 423 阅读 · 0 评论 -
我是一个Java class
2016-04-18 IBM刘欣 Java编程来自:码农翻身(微信号:coderising)作者:IBM刘欣前言:本文主要想讲一下Java虚拟机的故事, 可能有点偏门,不妥之处欢迎留言交流。第一回 陌生警察我出生在C盘下面一个很深层次的目录下, 也不知道是谁把我放到这里的。我一直转载 2016-04-21 07:36:04 · 544 阅读 · 0 评论 -
我是一个线程(修订版)
2016-04-02 老刘 码农翻身第一回 初生牛犊我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴。我身边的同伴0x6900 待的时间比较长,他带着沧桑的口气对我说:“我们线程的宿命就是处理包裹。把包裹处理完以后还得马上回到这里,否则可能永远回不来了。”我一脸懵懂,“包裹,什么包裹?”“转载 2016-04-21 07:43:51 · 365 阅读 · 0 评论 -
还在业务中用if else,策略模式了解一下
if elseif ("BATCH_CHANGE_WAREHOUSE".equals(taskType)) { //批量转仓逻辑 } else if ("BATCH_CHANGE_SHIPPING".equals(taskType)) { //批量转快递逻辑 } else if ("BATCH_REPLACE_ORD...转载 2019-09-02 11:56:52 · 380 阅读 · 0 评论 -
Java 日志从入门到实战
日志和异常处理结合得当的话,会给项目维护带来非常大的价值。**日志:**就是介绍一个过程和经历的详细记录。**项目日志:**就是项目开发过程的详细记录,一般由项目经理记录。**代码里的日志:**就是程序员记录某个开发过程的详细情况,这是项目里每个程序员需要做的工作。代码里的日志在项目中扮演着非常重要的角色,日志记录的详细程度决定系统是否容易维护,Java 项目中日志记录的框架有很多,在...转载 2019-01-30 17:18:17 · 4955 阅读 · 2 评论 -
java开发中关于使用异常控制业务逻辑的理解
服务层返回错误信息,大体分为两派ResultModel(code,message),使用if、else判断。抛出自定义exception,异常控制逻辑。查看《阿里巴巴编码规约》中对异常处理的强制要求,不建议使用异常来做流程控制,如下:第二种方法的效率较低,因为会有堆栈信息的创建与输出。好处是逻辑代码清晰,无需各种判断。改进方式,覆写fillInStackTrace(),防止出现性...原创 2018-12-29 17:26:18 · 4627 阅读 · 1 评论 -
BigInteger精讲
BigInteger初识在java的整数类型里面,byte为8位,short为16位,int为32位,long为64位。 正因为这些数值的二进制位数已经固定,所以它们能表示的数值大小就有一定的范围限制。 如果想表示比这些数值更大的数,怎么办呢?可以使用BigInteger来帮忙. BigInteger用多少位二进制表示呢?其实,在BigInteger里面使用int数组来存储实现的.为...原创 2018-06-06 15:09:48 · 3909 阅读 · 0 评论 -
kafka与spring整合
标签(空格分隔): kafka参考: https://www.cnblogs.com/hei12138/p/7805475.html主要功能1 发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因2 以容错的方式记录消息流,kafka以文件的方式来存储消息流3 可以在消息发布的时候进行处理使用场景消息队列功能. 在系统或应用程序之...原创 2018-04-20 16:43:38 · 3312 阅读 · 0 评论 -
Memcached vs Redis, 挑选哪一个?
Memcached vs Redis, 挑选哪一个?标签: Mencached RedisMemchached 还是 Redis?该用哪一个?当我们讨论改进性能的时候,这是每次技术讨论中最常见的一个问题。每当性能需要改善时,采用缓存常常是迈出的第一步。与此同时,选择Memcached 或者 Redis 通常是第一个需要考虑的地方。哪个能给我们提供更佳的性能?它们的优点和缺点又是...原创 2018-04-20 15:15:49 · 5848 阅读 · 1 评论 -
java File类mkdir()与mkdirs()方法的区别:
File file_date = new File(“D:\\yyy\\2015-12-22”); // 如果该日期的文件夹存在,就把获得的指令文件夹建到该文件夹下。 // 如果该日期的文件夹不存在,就新建一个日期的文件夹。 if (file_date.exists()) { System.out.println("该日期的文件夹已经存在!"); } els原创 2015-12-22 10:11:09 · 12844 阅读 · 0 评论 -
分支/合并框架详解
分支/合并框架详解分支框架的目的是以递归的方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果.它是 ExecutorService 接口的一个实现,他把子任务分配给线程池(ForkJoinPool)中的线程.使用 RecursiveTask要把任务提交到池,必须创建 RecursiveTask 的一个子类,其中V是并行化任务产生的结果类型,RecursiveTask类源原创 2017-11-18 15:30:48 · 1436 阅读 · 0 评论 -
java.util.ConcurrentModificationException 异常解析
java.util.ConcurrentModificationException 异常解析准备数据集合;myList= new ArrayList<String>(); myList.add("1"); myList.add("2"); myList.add("3"); myList.add("4"); myList.a原创 2017-07-31 18:21:24 · 881 阅读 · 0 评论 -
一种Java运行时动态生成class的方法
Java运行时动态生成class的方法Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢?因为在有些时候,我们还真得在运行时为一个类动态创建子类。比如,编写一个ORM框架,如何得知一个简单的JavaBean是否被用户修改过呢?以User为例:public class User { private String id;原创 2017-05-11 09:21:56 · 4158 阅读 · 1 评论 -
Java的方向。。。
今天看到一篇关于Java体系的总结,给大家看看:一、Java SE部分1、java基础:基础语法;面向对象(重点);集合框架(重点);常见类库API;2、java界面编程:AWT;事件机制;Swing;3、java高级知识:Annotation;IO和NIO、AIO;多线程、线程池;阻塞、非阻塞、异步网络通信;反射、动态代理;二、JDBC编程4、SQL基础:基础SQL语句;基本查询;多表查询;子查询转载 2016-08-07 20:57:58 · 636 阅读 · 4 评论 -
Android 中的回调函数揭秘
在学习Android的过程中,经常会遇到”回调函数”这个词,那么甚么是回调函数呢? 简单地说,回调函数就是通过其指针来调用的函数, 她不会被自己所在的对象调用, 只会在调用别人的方法的时候反过来被调用. 大家都知道,Android程序是通过java程序来实现的, java中是没有指针的, 因此在实现回调时都是通过接口和抽象类. 回调的过程可以简单的理解为,在A类中定义了一个方法,这个方法中用到了原创 2016-06-13 09:57:05 · 510 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
Android 中的回调函数揭秘在学习Android的过程中,经常会遇到”回调函数”这个词,那么甚么是回调函数呢? 简单地说,回调函数就是通过其指针来调用的函数, 她不会被自己所在的对象调用, 只会在调用别人的方法的时候反过来被调用. 大家都知道,Android程序是通过java程序来实现的, java中是没有指针的, 因此在实现回调时都是通过接口和抽象类. 回调的过程可以简单的理解为,在A类中原创 2016-06-12 23:29:13 · 389 阅读 · 0 评论 -
java之正则表达式详解
正则表达式: 专门用于操作字符串,好处;用一些符号代替字符串,是代码更为简单. 弊端:因为都是符号组成的表达式,所以阅读性不高,而且必须先把符号学完.正则表达式语法元字符 描述\ 将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。原创 2015-12-18 23:29:59 · 398 阅读 · 0 评论 -
Java多种方式读取文件内容
概要:1.以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。2.以字符为单位读取文件,常用于读文本,数字等类型的文件。3.以行为单位读取文件,常用于读面向行的格式化文件。| |目录·多种方式读取文件内容·将内容追加到文件尾部多种方式读取文件内容Java | 复制12原创 2015-12-18 15:15:39 · 533 阅读 · 0 评论 -
java包装器
package 包装器;public class 包装器Test { /** * 相信各位对基本数据类型都非常熟悉,例如 int、float、double、boolean、char * 等。基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。。。, 为了让基本数据类型也具备对象的特性, Java * 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对原创 2015-11-26 11:00:06 · 463 阅读 · 0 评论 -
进制转换
一、 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。下面举例: 例:将十进制的168转换为二进制 得出结果 将十进制的168转换为转载 2015-12-12 14:41:37 · 511 阅读 · 0 评论 -
2.55乘100,结果竟不是255!
很久以前,准确点说应该是4年前的一个下午,程序员成心文同学遇到了他编程史上的第一个浮点数误差bug,这个bug正如标题所述,在他的程序下2.55*100的结果竟是254.99999999999997,而非255。因为是初次遇到,所以他也不知道是怎么回事,但在请教中外俩.NET大牛无果后,他果断拍板决定“自己动手,丰衣足食”。后来他终于找到了原因,简单地说:计算机将小转载 2015-12-11 21:39:50 · 1089 阅读 · 0 评论 -
ACM迷宫问题java描述
package acm;//* @author: /** * 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路原创 2015-12-11 20:07:17 · 1271 阅读 · 0 评论 -
放麦子 valueof substring
import java.math.BigInteger;public class Question8 { /** * 放麦子 你一定听说过这个故事。国王对发明国际象棋的大臣很佩服, 问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子, * 在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子, 在第4个棋盘格放8粒麦子,......后一格的数字是前一格的原创 2015-11-18 22:49:29 · 622 阅读 · 0 评论