自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Chennyken

走别人的路,让别人无路可走.

  • 博客(26)
  • 资源 (3)
  • 问答 (4)
  • 收藏
  • 关注

原创 单体应用提高性能和高并发处理-合理使用多核处理

合理使用多核处理能力可以显著提高单体应用的性能和高并发处理能力。多线程编程:利用多线程并行处理任务,充分利用多核资源。线程池:使用线程池管理线程,减少创建和销毁线程的开销。并行计算:将任务分解为子任务并行执行,使用Fork/Join框架优化复杂计算。合理设置线程数:根据任务类型设置合适的线程数,避免上下文切换和资源浪费。避免共享资源竞争:通过和细粒度锁等技术减少线程间的资源争用。通过这些策略,可以充分发挥多核处理器的优势,提升单体应用在高并发环境下的性能。

2024-08-12 21:37:17 562

原创 单体应用提高性能和处理高并发-避免同步操作

使用无锁数据结构:如原子类和无锁队列。分区或局部状态:将数据分区或使用线程局部变量,减少共享数据的访问。使用不可变对象:通过不可变对象避免同步需求。使用协作机制:通过队列或事件通知等方式实现线程协作,而非直接同步。细粒度并发控制:尽量缩小锁的范围,减少同步操作的影响。这些策略可以有效减少锁竞争,提高应用在高并发环境下的性能。

2024-08-12 21:26:13 983

原创 单体应用提高性能和处理高并发-监控和性能分析

在应用中,可以通过日志记录自定义性能指标,并分析这些日志来发现问题。例如,记录数据库查询的时间、外部 API 调用的时间等。// 执行任务try {// 模拟任务执行时间说明:该代码记录了任务执行的时间,通过日志输出。日志可以被 Logstash 收集并进一步分析。通过使用监控工具如 Prometheus、Grafana、New Relic,开发者可以实时监控单体应用的性能指标,及时发现并解决性能瓶颈。

2024-08-11 12:30:09 896

原创 单体应用提高性能和处理高并发-高效的网络通信压缩数据

通过数据压缩、优化 TCP 配置、使用异步 I/O 以及采用更高效的序列化格式,单体应用可以显著提高性能,尤其是在高并发和网络通信方面。这些措施不仅可以减少带宽消耗和传输时间,还可以优化网络延迟和减少丢包率,从而提升应用的整体响应速度。

2024-08-11 12:12:01 492

原创 单体应用提高性能和处理高并发-资源管理连接池

线程池通过复用线程资源,避免了频繁创建和销毁线程的开销,提高了系统的并发处理能力。在这个示例中,HikariCP通过配置预先创建了一定数量的数据库连接(最大10个,最小5个),这些连接会被保存在连接池中,供应用程序复用。数据库连接池是管理数据库连接的常用方式,它通过预先创建一定数量的数据库连接,存放在池中供应用程序复用,从而避免每次访问数据库时都需要重新建立连接的开销。线程池是一种线程管理机制,通过预先创建一定数量的线程放入池中供应用程序复用,避免了频繁创建和销毁线程所带来的开销。Java标准库提供了。

2024-08-10 12:49:16 656

原创 单体应用提高性能及处理高并发-异步处理与消息队列

在很多Web应用中,文件上传是一个常见功能,尤其是在需要处理大文件的场景中。通过异步处理,文件上传过程可以不阻塞主线程,从而提高系统的并发处理能力。消息队列能够解耦应用程序中的不同模块,并使得长时间运行的任务能够异步处理,避免阻塞主线程。异步处理与消息队列是两个有效的手段,可以帮助开发者将耗时操作与主线程分离,减少阻塞,提高系统的响应速度和吞吐量。在一个电商平台中,用户下单后,需要进行一系列操作,如库存检查、支付处理、物流通知等。这种方式大幅提高了文件上传的处理效率,尤其是在大文件上传的场景中。

2024-08-10 12:30:29 1274

原创 单体应用提高性能和处理高并发-负载均衡

负载均衡是单体应用实现高并发的重要手段。通过合理配置和部署负载均衡器,可以将请求分散到多个服务器实例,从而提高系统的并发处理能力和可用性。负载均衡不仅仅是流量分配的工具,更是保障系统稳定性和扩展性的关键组件。在实际项目中,需要根据应用的具体需求,选择合适的负载均衡策略和实现方式,并进行持续监控和优化,以确保系统在高并发场景下的稳定运行。

2024-08-08 22:28:47 1524

原创 单体应用提高性能和处理高并发-数据库优化

在单体应用中实现高并发的数据库优化涉及多个方面,包括数据库设计、索引优化、查询优化、缓存使用、连接池管理、异步与批量处理、分区与分库、以及读写分离与数据库复制。通过合理应用这些技术,可以显著提升单体应用在高并发环境下的数据库性能,减少瓶颈,并增强系统的稳定性与可扩展性。每种优化策略都有其适用场景和注意事项,实际应用时需要结合具体的业务需求和数据库特性进行合理的选择和组合,以达到最佳效果。

2024-08-08 21:56:21 1147

原创 单体应用提高性能和处理高并发-使用缓存

通过使用内存缓存(如Ehcache、Caffeine)和分布式缓存(如Redis、Memcached),可以显著提高单体应用的性能,处理高并发请求。合理选择缓存工具、应用适当的缓存策略、处理常见缓存问题,可以有效优化系统的响应时间和负载能力。

2024-08-06 21:40:05 1102

原创 单体应用提高性能和处理高并发-代码优化和算法

优化代码和算法涉及多个方面,包括性能分析、选择高效的算法和数据结构、减少锁竞争、优化I/O操作和避免重复计算。通过应用这些优化策略,可以显著提高单体应用的性能,并有效地处理高并发负载。

2024-08-06 21:24:41 1086

原创 关系数据库的规范化-七种范式

试问就以上这种说法有多少人能理解?写书的人真不考虑读者的心。

2024-08-06 20:43:44 630

原创 Java中如何高效读写文件

第一种方式,

2024-07-31 21:34:18 1341

原创 java解决高并发之数据库连接池配置

使用的IDE是IDEA ,项目是springboot框架的项目 最近一直在处理高并发的问题,大致情况是这样的:大概有五六千人会在中午十二点同时访问网站,操作数据库,导致服务器崩溃。对于频繁修改数据的这种情况,例如:用户要抢商品,且抢完后要刷新看自己抢的商品,这会造成频繁的修改数据库和查询数据库,所以对于用数据库读写分离来说并不高效,因为这涉及到频繁的查询和修改数据库...

2019-03-19 02:34:46 10782 1

原创 JAVA中封装对数据库的访问操作

对数据库SQL的操作不外乎就是增删查改,我们通过JBDC连接数据库后,对其进行这些操作.我们在没有封装方法之前,对这些操作都是单条逐一写SQL语句进行增删查改操作.但封装后,我们可以调用该方法很方便的对数据库进行操作,下面来看方法:这个方法是基于DBHelper类里已经连接好数据库,在DAO层的封装./** * 执行所有的insert、delete、update语句(without trans...

2018-05-25 20:10:10 3224 1

原创 JBDC--java和数据库之间的连接

首先, 本人用到编译器是idea, 主要聊聊java和Oracle数据库的连接 .首先要在网上下载ojdbc8.jar 或者ojdbc6.jar这两个可以说成驱动程序.这是准备工作,当然前提是你的idea是已经安装好的,你的数据库也是装好了并可以使用的.基本步骤如下:      打开idea,创建一个新工程,即project;      在工程目录下再创建一个文件夹,即Directory,名字就叫...

2018-05-14 20:29:46 2012

原创 Java中的ClassLoader 类加载器

ClassLoader的定义:ClassLoader是java中的类加载器,而且不止一种.      与c/c++不同,Java编写的程序不是可执行文件.exe,而是由许多独立的类文件组成,而且这些类文件不是全部都装入内存,而是根据需要来加载进去.ClassLoader是JVM实现的一部分,ClassLoader包括bootstrap classloader(启动类加载器),在JVM运行的时候加载...

2018-05-05 15:08:19 193

原创 Java 多线程之Lock的用法

        Lock 为线程加锁解锁,因为多个线程在访问同一个资源时,一个资源不能同时给两个线程进行读写操作. 所以使用线程同步的方式来对资源进行访问限制.        下面来看Lock的用法(使用流程):    1. 创建ReentrantLock对象, 首先,这个ReentrantLock类(重入锁),是一种递归无阻塞的同步机制的一个类.        创建方式如下:          ...

2018-05-03 20:21:34 488

原创 Java中的异常处理

异常从名字上看就不正常,Java中为我们提供了异常类来供我们在编译时和运行时可能出现的异常现象进行处理.Java中的异常类的根类是Throwable,它两个子类: Error 和Exciption两个, Error 指错误,一般是JVM产生的问题,不需要我们自己解决. Exciption就是我们所说的异常,一般分为两种: 一种是运行时异常(RuntimeExciption),另一种则是非运行时异常...

2018-04-23 20:39:38 199

原创 Java二十三种设计模式之策略

首先, 策略模式是对算法的一种包装.其次,策略模式包含3个部分: * 1.接口/抽象类: 声明算法(策略) * 2.实现类: 实现上面的接口.提供不同的具体的策略 * 3.环境: Context  里面固定有三个内容: *      1. 接口声明作为成员变量,表明当前上下文拥有策略 *      2. 通过set方法来决定到底要使用哪一个策略 *      3. 调用策略中的方法.获取结果.下面...

2018-04-23 19:16:57 188

原创 java中lambda表达式的用法

先来看写法: Lambda  表达式的写法:         最简单的用法:简化匿名内部类.      1.   如果要重写的方法是无参的.                  ()->{ 方法体}      2.   如果只有一个参数                 参数名 -> {方法体}       3.  如果有多个参数的                   (参数1,参数2) ...

2018-04-23 19:03:18 3777

原创 Java中String,StringBuffer,StringBuilder的区别

String:它是一个常量,对字符串的拼接无非就是创建多个字符串对象而已创建字符串的方式:String str=”abc”;(推荐使用这种方式,会节约内存空间)String str = new String(“abc”);两者区别:StringBuffer:线程安全的字符串缓冲区StrtingBuilder:功能和StringBuffer一模一样,唯一的区别是线程不安全.(单线程效率比较高,多线程...

2018-04-19 20:47:32 166

原创 Java中的自动拆装箱,枚举

自动装拆箱 --基本数据类型都有与之对应的包装类(引用数据类型)   byte—Byte   short—Short   int—Integer   long---Long   float---Float   double---Double   boolean---Boolean   char---Character1 自动装箱:就是从基本类型自动转换成与之对应的包装类2 自动拆箱:就是从包装类型...

2018-04-19 20:41:21 165

原创 Java高级特性之内部类

1.   什么是内部类(InnerClass)?        一个类中嵌套着另一个类,这样的类就叫内部类.       语法:class outClass{ public class innerClass{ }}2.   内部类的作用     一. 为了更好的封装, 更好的隐藏细节;     二. 对面对对象的继承进行了完善,也就是说: Java里是没有多继承的,然而在现实生...

2018-04-19 20:24:06 171

原创 java的七种设计原则之单例

     当我们在做项目时,会出现这么一种情况: 有很多类都想创建一个类的对象,然而每次创建这个类的对象时都要花销内存.而且在很多个类中都要创建那一个公共类的对象,这样显得很麻烦,当项目很大类很多时,我们难道还要每次都要在需要调用那个公共类的方法的时候再去创建一个对象吗?      我们可以这样想:能不能把这个公共类封装起来,不让其他的类再new出对象呢?也就是让这个类的对象唯一呢?这样我们就不用...

2018-04-18 19:34:27 183

原创 Java继承问题

在现实生活中个体和个体之间是存在各种各样关联的.比如学生和学生用的电脑.那学生和电脑之间就是一种使用关系.比如人和手机.是拥有关系. 继承和上面一样也是这些关系中的一种.我们通过一个判断语句来判断是否符合继承:is – a.比如 猫 is – a 老鼠.从现实生活中的逻辑上来看,猫不是一个老鼠,就代表代码中猫这个类不可以继承老鼠这个类.再比如手机 is – a 移动设备.这个判断是成立的,所以在代...

2018-04-12 19:53:01 261

原创 C++学习重要笔记之呱呱坠地

main函数作为接口函数的函数头,编译器都是从这里开始进入执行,有两种类型:分别是返回类型和非返回类型,(int main()和void main()).   我们一般都使用 int main() 因为这是c\c++的标配,也可以使用void main()函数头,他们逻辑上是一致的,void返回类型意味着函数不返回任何值,该变体实用于很多系统,但由于它不是当前标准强制的一个选项,因此在某些

2016-09-23 10:43:12 273

eclipse-inst-win64安装包

eclipse安装包,下载可直接安装使用,可以根据自己的需求安装不同的环境

2018-09-27

通过URL地址获取远程数据并用json返回

通过URL访问接口,获取数据,并将xml格式转换为json格式输出。

2018-09-27

自己写的小游戏壳

switch uMsg 判断发送过来的是什么消息 { case WM CREATE: 要通过函数指针 创建子类的对象 if CGameCtrl::pfun create NULL { MessageBox NULL "创建游戏失败" "提示" MB OK ; 销毁窗口 DestroyWindow hwnd ; 退出程序 PostQuitMessage 0 ; } else { 调用函数指针创建子类对象 ctrl CGameCtrl::pfun create ; 设置句柄 ctrl >SetHandle hwnd hIns ; 游戏的初始化 ctrl >OnCreateGame ; } break; case WM PAINT: ctrl >OnGameDraw ; break; case WM TIMER: ctrl >OnTimer wParam ; break; case WM LBUTTONDOWN: { POINT point; point x LOWORD lParam ; point y HIWORD lParam ; ctrl >OnLButtonDown point ; } break; case WM RBUTTONDOWN: { POINT point; point x LOWORD lParam ; point y HIWORD lParam ; ctrl >OnRButtonDown point ; } break; case WM MOUSEMOVE: { POINT point; point x LOWORD lParam ; point y HIWORD lParam ; ctrl >OnMouseMove point ; } break; case WM KEYDOWN: ctrl >OnKeyDown wParam ; break; case WM DESTROY: PostQuitMessage 0 ; 如果是退出的消息 就退出 break; }">switch uMsg 判断发送过来的是什么消息 { case WM CREATE: 要通过函数指针 创建子类的对象 if CGameCtrl::pfun create NULL { MessageBox NULL "创建游戏失败" "提示" MB OK ; 销毁窗口 DestroyWindow hwnd ; [更多]

2015-02-07

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

TA关注的人

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