【JavaWeb项目】——外卖订餐系统用户购买餐品、查询购物车、取消购物车餐品操作

【JavaWeb项目】——外卖订餐系统用户购买餐品、查询购物车、取消购物车餐品操作_第1张图片

个人主页:【Y小夜】

作者简介:一位双非学校的大二学生,编程爱好者,

专注于基础和实战分享,欢迎私信咨询!

入门专栏:【MySQL,Java基础,Rust】

热门专栏:【Python,Javaweb,Vue框架】

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

目录

购买餐品

后端处理AddCarServlet部分

代码

解析

查询购物车

后端处理UshowCarServlet部分

代码

解析

前端界面showCar2.jsp部分

代码

解析

取消购物车餐品

后端处理DelCarServlet部分

代码

解析


购买餐品

后端处理AddCarServlet部分

代码

package com.dingcan.controller;

import com.dingcan.service.CarService;
import com.dingcan.service.Impl.CarServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "AddCarServlet", value = "/addCarServlet")
public class AddCarServlet extends HttpServlet {
    CarService carService=new CarServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String cname=req.getParameter("fname");
        int cprice=Integer.parseInt(req.getParameter("fprice"));
        int cfid=Integer.parseInt(req.getParameter("fid"));
        int cuid= (int) req.getSession().getAttribute("uid1");
        int cdid=Integer.parseInt(req.getParameter("fdianid"));
        if(carService.addCar(cname,cprice,cfid,cuid,cdid))
        {
            resp.sendRedirect("ushowCarServlet");
        }
        else
        {
            resp.sendRedirect("fail.jsp");
        }

    }
}

解析

        这段Java代码是一个Servlet控制器,用于处理将新餐品添加到购物车的请求:

  1. 包声明:

    • package com.dingcan.controller;: 声明了这个类属于 com.dingcan.controller 包。
  2. 导入服务类:

    • 导入了 com.dingcan.service.CarService 接口及其实现类 com.dingcan.service.Impl.CarServiceImpl
  3. @WebServlet 注解:

    • @WebServlet(name = "AddCarServlet", value = "/addCarServlet"): 注解用于注册Servlet,定义了它的名称和URL映射。当访问 /addCarServlet 路径时,这个Servlet会被调用。
  4. 类定义:

    • public class AddCarServlet extends HttpServlet: 定义了一个名为 AddCarServlet 的类,它继承自 HttpServlet
  5. 成员变量:

    • CarService carService = new CarServiceImpl();: 创建了 CarService 接口的实现类 CarServiceImpl 的实例。
  6. service 方法:

    • @Override: 表示重写了父类的方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的 service 方法,用于处理客户端的请求。
  7. 获取请求参数:

    • 从请求中获取商品名称 (cname)、价格 (cprice)、商品ID (cfid)、用户ID (cuid) 和店铺ID (cdid)。
  8. 从会话中获取用户ID:

    • int cuid = (int) req.getSession().getAttribute("uid1");: 从会话中安全地获取用户ID。
  9. 添加商品到购物车:

    • if (carService.addCar(cname, cprice, cfid, cuid, cdid)): 使用 carService 的 addCar 方法尝试添加商品到购物车。
  10. 重定向:

    • 如果添加成功,使用 resp.sendRedirect("ushowCarServlet") 重定向到 ushowCarServlet,这将展示添加成功的反馈或购物车列表。
    • 如果添加失败,使用 resp.sendRedirect("fail.jsp") 重定向到错误页面。
  11. 异常处理:

    • 方法声明中包含了 throws ServletException, IOException,表示这个方法可能会抛出 ServletException 和 IOException 异常。

    AddCarServlet 的主要作用是接收用户提交的商品信息,调用服务层方法添加商品到购物车,并根据操作结果重定向到相应页面。这个过程中,它利用了会话管理来获取当前登录用户的ID,并与用户提交的商品信息一起存储到数据库中。如果添加失败,可能需要添加额外的逻辑来提供反馈信息给用户。

查询购物车

后端处理UshowCarServlet部分

代码

package com.dingcan.controller;


import cn.hutool.db.Entity;
import com.dingcan.service.CarService;
import com.dingcan.service.Impl.CarServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "UshowCarServlet", value = "/ushowCarServlet")
public class UshowCarServlet extends HttpServlet {
    CarService carService=new CarServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取session中的uid1
        int uid1= (int) req.getSession().getAttribute("uid1");
        List list=carService.uFindCar(uid1);
        if (list!=null){
            req.setAttribute("list",list);
            req.getRequestDispatcher("/u1/showCar2.jsp").forward(req,resp);
        }

    }
}

解析

        这段Java代码是一个Servlet控制器,用于展示用户购物车中的餐品信息:

  1. 包声明:

    • package com.dingcan.controller;: 声明了这个类属于 com.dingcan.controller 包。
  2. 导入相关类:

    • 导入了 cn.hutool.db.Entity 用于数据库操作。
    • 导入了 com.dingcan.service.CarService 接口及其实现类 com.dingcan.service.Impl.CarServiceImpl
  3. @WebServlet 注解:

    • @WebServlet(name = "UshowCarServlet", value = "/ushowCarServlet"): 注解用于注册Servlet,定义了它的名称和URL映射。当访问 /ushowCarServlet 路径时,这个Servlet会被调用。
  4. 类定义:

    • public class UshowCarServlet extends HttpServlet: 定义了一个名为 UshowCarServlet 的类,它继承自 HttpServlet
  5. 成员变量:

    • CarService carService = new CarServiceImpl();: 创建了 CarService 接口的实现类 CarServiceImpl 的实例。
  6. service 方法:

    • @Override: 表示重写了父类的方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的 service 方法,用于处理客户端的请求。
  7. 获取会话属性:

    • int uid1 = (int) req.getSession().getAttribute("uid1");: 从会话中获取用户ID (uid1)。
  8. 查询数据库:

    • List list = carService.uFindCar(uid1);: 使用 carService 的 uFindCar 方法根据用户ID查询购物车中的商品信息。
  9. 检查查询结果:

    • if (list != null): 检查查询结果是否不为空。
  10. 设置请求属性:

    • req.setAttribute("list", list);: 将查询结果 list 设置为请求属性,这样就可以在JSP页面中通过 ${list} 访问这些数据。
  11. 请求转发:

    • req.getRequestDispatcher("/u1/showCar2.jsp").forward(req, resp);: 将请求转发到 /u1/showCar2.jsp 页面,携带请求属性。
  12. 异常处理:

    • 方法声明中包含了 throws ServletException, IOException,表示这个方法可能会抛出 ServletException 和 IOException 异常。

    UshowCarServlet 的主要作用是根据用户ID检索购物车中的商品信息,并将这些信息转发到 showCar2.jsp 页面进行展示。如果查询结果为空,则可能不会执行转发,这意味着在 showCar2.jsp 页面中需要对 list 可能为 null 的情况进行处理。使用 hutool 库的 Entity 类来处理数据库查询结果。这个Servlet通过转发请求到JSP页面,实现了MVC架构中的控制层功能。

前端界面showCar2.jsp部分

代码

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 20/6/2024
  Time: 下午10:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    展示商家1登入的信息
    
    
    


LOGO
餐名 价格 状态 操作
${car.cname} ${car.cprice} ${car.cstate == 1 ? "发货中" : "未发货"} 取消

解析

        这段代码是一个JSP页面,用于展示用户登录后的信息,特别是他们购物车中的商品信息:

  1. JSP注释:

    • 页面顶部的注释由IntelliJ IDEA自动生成,提供了创建者、日期和时间。
  2. 页面指令:

    • <%@ page contentType="text/html;charset=UTF-8" language="java" %>: 设置页面的MIME类型为HTML,字符集为UTF-8,脚本语言为Java。
    • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>: 引入JSTL核心库,使用c作为前缀。
  3. HTML结构:

    • : 根元素。
    • : 包含页面的元数据,如标题和样式链接。
    • </code>: 页面标题为“展示用户购物车的信息”。</li> </ul></li> <li> <p><strong>Bootstrap和自定义CSS</strong>:</p> <ul> <li><code><link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"></code>: 引入Bootstrap的CSS文件,用于页面样式。</li> <li><code><link href="css/uShow.css" rel="stylesheet"></code>: 引入自定义的CSS样式文件。</li> </ul></li> <li> <p><strong>页面内容</strong>:</p> <ul> <li><code><div class="first"></code>: 包含整个页面的主要内容。</li> <li><code><div class="one"></code>: 包含LOGO和系统名称。</li> <li><code><div class="two"></code>: 包含LOGO图片和系统名称标签。</li> <li><code><div class="three"></code>: 包含注销按钮,链接到<code>exitServlet</code>。</li> </ul></li> <li> <p><strong>导航菜单</strong>:</p> <ul> <li><code><div class="btn-group-vertical"></code>: 垂直排列的按钮组,包含不同商家和分类的链接。</li> </ul></li> <li> <p><strong>购物车商品列表</strong>:</p> <ul> <li><code><table class="table table-striped table-bordered table-condensed"></code>: 使用Bootstrap样式的表格,展示购物车中的商品信息。</li> <li><code><thead></code>: 表格的头部,包含列标题。</li> <li><code><tbody></code>: 表格的主体,使用JSTL的<code><c:forEach></code>标签循环遍历<code>list</code>集合。</li> </ul></li> <li> <p><strong>JSTL标签</strong>:</p> <ul> <li><code><c:forEach items="${list}" var="car"></code>: 用于遍历作为请求属性传递到页面的<code>list</code>集合。</li> </ul></li> <li> <p><strong>表格行</strong>:</p> <ul> <li><code><tr></code>: 表格的一行,用于显示单个商品的信息。</li> <li><code><td></code>: 表格单元格,显示商品的名称(<code>car.cname</code>)、价格(<code>car.cprice</code>)、状态。</li> </ul></li> <li> <p><strong>操作链接</strong>:</p> <ul> <li><code><a href="delCarServlet?cid=${car.cid}" class="btn btn-primary">取消</a></code>: 在操作列中,创建一个链接到<code>delCarServlet</code>的按钮,用于取消购物车中的某个商品。</li> </ul></li> <li> <p><strong>状态显示</strong>:</p> <ul> <li><code>${car.cstate == 1 ? "发货中" : "未发货"}</code>: 使用JSP表达式来显示商品的当前状态。</li> </ul></li> <li> <p><strong>Bootstrap类</strong>:</p> <ul> <li>页面使用了Bootstrap的类(如<code>btn</code>, <code>btn-primary</code>, <code>table-striped</code>, <code>table-bordered</code>, <code>table-condensed</code>, <code>warning</code>, <code>danger</code>)来增强表单的布局和样式。</li> </ul></li> <li> <p><strong>页面底部</strong>:</p> <ul> <li><code><script src="js/ucaidan.js"></script></code>: 引入JavaScript文件,可能用于页面的动态交互或效果。</li> </ul></li> </ol> <p>        这个JSP页面提供了一个用户购物车信息展示的用户界面,允许用户查看商品信息,并提供了取消商品的链接。使用Bootstrap框架增强了用户界面的友好性和响应性。</p> <h2 id="%F0%9F%8E%AF%E5%8F%96%E6%B6%88%E8%B4%AD%E7%89%A9%E8%BD%A6%E9%A4%90%E5%93%81">取消购物车餐品</h2> <h3 id="%F0%9F%98%8E%E5%90%8E%E7%AB%AF%E5%A4%84%E7%90%86DelCarServlet%E9%83%A8%E5%88%86">后端处理DelCarServlet部分</h3> <h4>代码</h4> <pre><code class="language-java">package com.dingcan.controller; import com.dingcan.service.CarService; import com.dingcan.service.Impl.CarServiceImpl; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "DelCarServlet", value = "/delCarServlet") public class DelCarServlet extends HttpServlet { CarService carService=new CarServiceImpl(); @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { int cid=Integer.parseInt(req.getParameter("cid")); boolean b=carService.delCar(cid); if(b){ resp.sendRedirect("ushowCarServlet"); }else{ resp.sendRedirect("fail.jsp"); } } } </code></pre> <h4>解析</h4> <p>        这段Java代码是一个Servlet控制器,用于处理从用户购物车中删除商品的请求:</p> <ol> <li> <p><strong>包声明</strong>:</p> <ul> <li><code>package com.dingcan.controller;</code>: 声明了这个类属于 <code>com.dingcan.controller</code> 包。</li> </ul></li> <li> <p><strong>导入服务类</strong>:</p> <ul> <li>导入了 <code>com.dingcan.service.CarService</code> 接口及其实现类 <code>com.dingcan.service.Impl.CarServiceImpl</code>。</li> </ul></li> <li> <p><strong>@WebServlet 注解</strong>:</p> <ul> <li><code>@WebServlet(name = "DelCarServlet", value = "/delCarServlet")</code>: 注解用于注册Servlet,定义了它的名称和URL映射。当访问 <code>/delCarServlet</code> 路径时,这个Servlet会被调用。</li> </ul></li> <li> <p><strong>类定义</strong>:</p> <ul> <li><code>public class DelCarServlet extends HttpServlet</code>: 定义了一个名为 <code>DelCarServlet</code> 的类,它继承自 <code>HttpServlet</code>。</li> </ul></li> <li> <p><strong>成员变量</strong>:</p> <ul> <li><code>CarService carService = new CarServiceImpl();</code>: 创建了 <code>CarService</code> 接口的实现类 <code>CarServiceImpl</code> 的实例。</li> </ul></li> <li> <p><strong>service 方法</strong>:</p> <ul> <li><code>@Override</code>: 表示重写了父类的方法。</li> <li><code>protected void service(HttpServletRequest req, HttpServletResponse resp)</code>: 这是Servlet的 <code>service</code> 方法,用于处理客户端的请求。</li> </ul></li> <li> <p><strong>获取请求参数</strong>:</p> <ul> <li><code>int cid = Integer.parseInt(req.getParameter("cid"));</code>: 从请求中获取 <code>cid</code> 参数,即要删除的商品的唯一标识符,并转换为整数类型。</li> </ul></li> <li> <p><strong>删除商品</strong>:</p> <ul> <li><code>boolean b = carService.delCar(cid);</code>: 使用 <code>carService</code> 的 <code>delCar</code> 方法尝试从数据库中删除ID为 <code>cid</code> 的商品。</li> </ul></li> <li> <p><strong>重定向</strong>:</p> <ul> <li>如果删除成功 (<code>b</code> 为 <code>true</code>),使用 <code>resp.sendRedirect("ushowCarServlet")</code> 重定向到 <code>ushowCarServlet</code>,这将展示更新后的购物车列表。</li> <li>如果删除失败 (<code>b</code> 为 <code>false</code>),使用 <code>resp.sendRedirect("fail.jsp")</code> 重定向到错误页面。</li> </ul></li> <li> <p><strong>异常处理</strong>:</p> <ul> <li>方法声明中包含了 <code>throws ServletException, IOException</code>,表示这个方法可能会抛出 <code>ServletException</code> 和 <code>IOException</code> 异常。</li> </ul></li> </ol> <p><code>   <strong>DelCarServlet</strong></code><strong> 的主要作用是接收商品ID,调用服务层方法删除购物车中的商品,并根据操作结果重定向到相应页面。这个过程中,它利用了服务层提供的业务逻辑和数据访问对象来实现数据的持久化。如果删除失败,可能需要添加额外的逻辑来提供反馈信息给用户。</strong></p> <p style="text-align:center;"></p> <p style="text-align:center;"></p> <p style="text-align:center;"></p> </div> </div>������������������������������������������������������������������������������������������������������������������������������������������������ </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1830200444727685120"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Javaweb开发,hive,hadoop,数据仓库,java,后端,前端框架,maven)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1946415880443326464.htm" title="java多线程-锁的介绍" target="_blank">java多线程-锁的介绍</a> <span class="text-muted"></span> <div>多线程中常用锁一、锁的概念二、锁的类型2.1互斥锁(也称排它锁)2.1.1Synchronized和Lock2.1.2ReentrantLock(可重入锁)2.1.3公平锁2.1.4非公平锁2.1.5中断锁2.2共享锁2.3读写锁三、悲观锁和乐观锁3.1悲观锁3.2乐观锁3.3CAS算法四、锁竞争一、锁的概念在多线程中,有乐观锁、悲观锁等很多锁的概念,在了解锁的概念之前我们需要先知道线程和进程以及</div> </li> <li><a href="/article/1946414745477246976.htm" title="Spring Ioc Bean 到底是什么" target="_blank">Spring Ioc Bean 到底是什么</a> <span class="text-muted"></span> <div>Bean到底是什么?简单来说,SpringBean就是一个由SpringIoC容器负责创建、管理和装配的Java对象。它不是一种新的技术,它本质上还是一个普普通通的Java对象(POJO-PlainOldJavaObject),但它的“户口”被注册到了Spring容器中,从此它就不再是一个“野生”的对象,而是一个受容器管理的“公民”。最核心的区别:Beanvs.普通的Java对象为了彻底理解Bea</div> </li> <li><a href="/article/1946413989076463616.htm" title="IntelliJ IDEA高效开发指南:技巧、插件与快捷键" target="_blank">IntelliJ IDEA高效开发指南:技巧、插件与快捷键</a> <span class="text-muted">懒羊羊敲代码丫</span> <a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>IntelliJIDEA作为Java开发者首选的集成开发环境,其强大的功能和灵活的扩展性能够显著提升编码效率。本文将从常用技巧、必备插件和快捷键大全三部分展开,助你解锁IDEA的“神器”属性。一、IDEA高效开发技巧138快捷键为王导航类:Ctrl+N:快速查找类;Ctrl+Shift+N:查找文件311。Ctrl+B:跳转到声明;Ctrl+Alt+B:跳转到实现3。编辑类:Ctrl+D:复制当前</div> </li> <li><a href="/article/1946412855091851264.htm" title="【Leetcode】3201. 找出有效子序列的最大长度 I" target="_blank">【Leetcode】3201. 找出有效子序列的最大长度 I</a> <span class="text-muted">想要AC的dly</span> <a class="tag" taget="_blank" href="/search/%E7%BB%83%E4%B9%A0%E9%A2%98%28%E8%AE%B0%E5%BD%95%E5%81%9A%E9%A2%98%E6%83%B3%E6%B3%95%29/1.htm">练习题(记录做题想法)</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>文章目录题目题目描述示例提示思路分析核心观察有效子序列的四种模式算法思路代码实现Java版本C++版本Python版本优化版本复杂度分析时间复杂度空间复杂度示例验证总结题目题目链接题目描述给你一个整数数组nums。nums的子序列sub的长度为x,如果其满足以下条件,则称其为有效子序列:(sub[0]+sub[1])%2==(sub[1]+sub[2])%2==...==(sub[x-2]+sub</div> </li> <li><a href="/article/1946412039140339712.htm" title="Java的CopyOnWriteArrayList" target="_blank">Java的CopyOnWriteArrayList</a> <span class="text-muted">xbmchina</span> <div>简介ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制,会抛出ConcurrentModificationException异常,也就是说ArrayList并不是一个线程安全的容器。那么并发的情况下,这就有了CopyOnWriteArrayList这个东西。下面主要以下几个方面学习CopyOnWriteArrayList</div> </li> <li><a href="/article/1946411466244550656.htm" title="通过 Docker 和 Kubernetes 部署前后端代码到服务器" target="_blank">通过 Docker 和 Kubernetes 部署前后端代码到服务器</a> <span class="text-muted"></span> <div>目录通过Docker和Kubernetes部署前后端代码到服务器一、准备工作二、创建Docker镜像三、部署到Kubernetes四、访问应用程序五、总结在现代软件开发中,Docker和Kubernetes已成为部署应用程序的强大工具。它们提供了一种可靠、可扩展和高效的方式来将前后端代码部署到服务器上。本文将介绍如何使用Docker和Kubernetes来部署前后端代码。一、准备工作安装Docke</div> </li> <li><a href="/article/1946410079154663424.htm" title="IoC容器深度解析:架构、原理与实现" target="_blank">IoC容器深度解析:架构、原理与实现</a> <span class="text-muted">liulilittle</span> <a class="tag" taget="_blank" href="/search/Markdown/1.htm">Markdown</a><a class="tag" taget="_blank" href="/search/Extension/1.htm">Extension</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/IoC/1.htm">IoC</a><a class="tag" taget="_blank" href="/search/DI/1.htm">DI</a><a class="tag" taget="_blank" href="/search/%E4%BE%9D%E8%B5%96%E5%80%92%E7%BD%AE/1.htm">依赖倒置</a><a class="tag" taget="_blank" href="/search/%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5/1.htm">依赖注入</a> <div>IoC容器深度解析:架构、原理与实现引用:.NETIoC容器原理与实现等巫山的雲彩都消散撒下的碧色如何看淡一、引言:从服务定位器到IoC的演进类签名修改集中式管理依赖反转+动态注入强耦合直接依赖全量代码重构服务定位器模式圈复杂度指数级增长IoC容器方案低耦合+高扩展性历史痛点在早期软件开发中(如2000年代JavaEE体系),开发者面临两大核心问题:强耦合依赖链:上层模块直接实例化下层对象(new</div> </li> <li><a href="/article/1946409950632800256.htm" title="斗鱼大数据面试题及参考答案" target="_blank">斗鱼大数据面试题及参考答案</a> <span class="text-muted">大模型大数据攻城狮</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE%E9%9D%A2%E8%AF%95/1.htm">大数据面试</a><a class="tag" taget="_blank" href="/search/hadoop%E9%9D%A2%E8%AF%95/1.htm">hadoop面试</a><a class="tag" taget="_blank" href="/search/spark%E9%9D%A2%E8%AF%95/1.htm">spark面试</a><a class="tag" taget="_blank" href="/search/flink%E9%9D%A2%E8%AF%95/1.htm">flink面试</a><a class="tag" taget="_blank" href="/search/%E6%89%8B%E6%92%95SQL/1.htm">手撕SQL</a><a class="tag" taget="_blank" href="/search/%E6%89%8B%E6%92%95%E4%BB%A3%E7%A0%81/1.htm">手撕代码</a> <div>GC(垃圾回收)相关知识一、常见的GC收集器SerialGCSerialGC是最基本的垃圾收集器,它是单线程的。在进行垃圾收集时,会暂停所有的用户线程,直到垃圾收集完成。它的工作过程比较简单,首先标记出所有的垃圾对象,然后将它们清除。例如,在一个小型的、对响应时间要求不高的Java应用程序中,如简单的命令行工具,SerialGC可以满足垃圾收集的需求。因为这种应用程序通常没有很高的并发要求,暂停用</div> </li> <li><a href="/article/1946409571086036992.htm" title="TimSort:论Java Arrays.sort的稳定性" target="_blank">TimSort:论Java Arrays.sort的稳定性</a> <span class="text-muted">lifallen</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>TimSort是一种混合的、稳定的排序算法,结合了归并排序(MergeSort)和二分插入排序(BinaryInsertionSort)的优点,尤其适用于部分有序的数据。在Java中,Arrays.sort()对对象数组排序时内部使用了TimSort算法。对于集合的排序实际上也是使用Arrays.sort如List.javadefaultvoidsort(Comparatorc){Object[]</div> </li> <li><a href="/article/1946406290725072896.htm" title="探索数据的桥梁:Apache Olingo——您的OData之旅的最佳伙伴" target="_blank">探索数据的桥梁:Apache Olingo——您的OData之旅的最佳伙伴</a> <span class="text-muted"></span> <div>探索数据的桥梁:ApacheOlingo——您的OData之旅的最佳伙伴olingo-odata4MirrorofApacheOlingo项目地址:https://gitcode.com/gh_mirrors/ol/olingo-odata4项目介绍ApacheOlingo,一个为数据而生的Java库,它围绕着强大的OData规范构建,旨在简化数据访问与共享的过程。作为一个由Apache软件基金会</div> </li> <li><a href="/article/1946406291563933696.htm" title="Apache Olingo OData4 教程" target="_blank">Apache Olingo OData4 教程</a> <span class="text-muted">凌崧铖</span> <div>ApacheOlingoOData4教程1.项目介绍ApacheOlingo是一个由Apache软件基金会支持的开源库,用于实现OData(OpenDataProtocol)协议的客户端和服务器端。OData4版本是针对OData规范第4版的实现,提供了一组Java库,帮助开发者轻松创建ODataV4兼容的服务和应用程序。2.项目快速启动Maven配置在你的pom.xml文件中添加ApacheOl</div> </li> <li><a href="/article/1946405030798094336.htm" title="为什么VS编译UTF-8格式源代码, 代码中字符串却是ANSI编码?如何快速获取字符串的UTF-8或UTF-16编码二进制数据?Java .class文件编码和JVM运行期内存编码?字符串默认编码?" target="_blank">为什么VS编译UTF-8格式源代码, 代码中字符串却是ANSI编码?如何快速获取字符串的UTF-8或UTF-16编码二进制数据?Java .class文件编码和JVM运行期内存编码?字符串默认编码?</a> <span class="text-muted"></span> <div>目录为什么VS编译UTF-8格式源代码,代码中字符串却是ANSI编码?如何快速获取字符串的UTF-8或UTF-16编码二进制数据?Java.class文件编码和JVM运行期内存编码字符串默认编码Swift字符串默认编码VS如何编译没有BOM头的UTF-8源代码?为什么中文字符串会报出错误"C2001:常量中有换行符"?为什么VS编译UTF-8格式源代码,代码中字符串却是ANSI编码?说到底,问题的</div> </li> <li><a href="/article/1946403140731465728.htm" title="Java 大视界 -- Java 大数据机器学习模型在金融市场情绪指数构建与投资决策支持中的应用(339)" target="_blank">Java 大视界 -- Java 大数据机器学习模型在金融市场情绪指数构建与投资决策支持中的应用(339)</a> <span class="text-muted">青云交</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%96%B0%E8%A7%86%E7%95%8C/1.htm">大数据新视界</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%A7%86%E7%95%8C/1.htm">大视界</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E9%87%91%E8%9E%8D%E6%83%85%E7%BB%AA%E6%8C%87%E6%95%B0/1.htm">金融情绪指数</a><a class="tag" taget="_blank" href="/search/%E6%8A%95%E8%B5%84%E5%86%B3%E7%AD%96/1.htm">投资决策</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E7%AD%96%E7%95%A5/1.htm">量化策略</a><a class="tag" taget="_blank" href="/search/%E6%83%85%E7%BB%AA%E5%88%86%E6%9E%90/1.htm">情绪分析</a> <div>Java大视界--Java大数据机器学习模型在金融市场情绪指数构建与投资决策支持中的应用(339)引言:正文:一、Java构建的金融市场情绪数据采集与预处理体系1.1多源异构数据接入引擎1.2数据采集延迟测试报告1.3情绪数据预处理管道二、Java驱动的金融市场情绪指数构建模型2.1多维度情绪指数计算框架2.2情绪指数与投资决策的映射模型三、Java在金融投资决策支持中的实战应用3.1量化私募情绪</div> </li> <li><a href="/article/1946400241834061824.htm" title="AI应用服务" target="_blank">AI应用服务</a> <span class="text-muted">SUPER5266</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>AI大模型--AI应用,该如何和前端交互,呈现llm模型答复内容呢?向LLM大模型提问后,系统得先识别问题,再从数据网络找信息,接着推理出正确结果,还得防止模型“胡编乱造”(控制模型幻想)。有时多个智能体(agent)要一起处理,结果还得融合。这些步骤都是异步进行的,没法像传统应用接口那样实时出结果。为减少大模型结果延迟、提升用户体验,我们提供以下方案。方案1、轮询后端pedding结果到db或其</div> </li> <li><a href="/article/1946399360115863552.htm" title="后端如何接收数据?详解8种HTTP请求方式及SpringBoot代码实现" target="_blank">后端如何接收数据?详解8种HTTP请求方式及SpringBoot代码实现</a> <span class="text-muted">Xxtaoaooo</span> <a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>人们眼中的天才之所以卓越非凡,并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。————马尔科姆·格拉德威尔目录一、RequestPayload(JSON/XML等结构化数据)二、QueryStringParameters(URL参数)三、FormData(表单数据)四、PathVariables(路径参数)五、Headers(请求头)六、Cookies七、</div> </li> <li><a href="/article/1946395576169984000.htm" title="Java Stream流详解" target="_blank">Java Stream流详解</a> <span class="text-muted"></span> <div>JavaStream流详解:从基础到原理引言:Java8的革命性变化2014年3月发布的Java8是Java语言发展史上的一个里程碑,它引入了一系列改变编程范式的新特性,其中Stream流(java.util.stream.Stream)与Lambda表达式、函数式接口共同构成了函数式编程在Java中的核心实现。这些特性不仅简化了代码编写,更推动Java从命令式编程向函数式编程转型,同时为多核处理</div> </li> <li><a href="/article/1946394983644852224.htm" title="自学java到什么程度才能就业?" target="_blank">自学java到什么程度才能就业?</a> <span class="text-muted">Python编程社区</span> <div>多年Java开发从业者:首先,这个问题主要问:自学Java编程技术,如果才能找到一份Java编程的工作。按照现在的招聘标准来看,无论你去哪个公司面试,你只需要满足他们公司的需求就可以。找到一份Java编程工作需要掌握的内容如下:首先是Javase作为Java最基本的学习内容,不在多说。然后是掌握JavaScript的基本原理,因为做Java编程开发必须学会JavaScript,用到JavaScri</div> </li> <li><a href="/article/1946394188820049920.htm" title="Java 9 模块化系统(Project Jigsaw)深度解析" target="_blank">Java 9 模块化系统(Project Jigsaw)深度解析</a> <span class="text-muted">探索java</span> <a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/9/1.htm">9</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%9D%97%E5%8C%96/1.htm">模块化</a> <div>1.引言1.1什么是ProjectJigsaw?ProjectJigsaw是Java9引入的一项重要特性,其核心是将Java平台引入模块化系统。这项特性最早由Oracle于JSR376提出,旨在解决Java平台和大型应用程序架构中的一系列结构性问题。模块系统是对Java类加载器机制和访问控制模型的系统性扩展,它不仅影响开发者编写代码的方式,还改变了平台的打包、部署和运行方式。简而言之,Projec</div> </li> <li><a href="/article/1946394062584082432.htm" title="垃圾收集器-Serial" target="_blank">垃圾收集器-Serial</a> <span class="text-muted">探索java</span> <a class="tag" taget="_blank" href="/search/JVM%E4%B8%93%E6%A0%8F/1.htm">JVM专栏</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/Serial/1.htm">Serial</a><a class="tag" taget="_blank" href="/search/GC/1.htm">GC</a> <div>1.引言:JVM垃圾收集概述与Serial收集器的定位Java程序员享受的自动内存管理机制主要得益于JVM的垃圾收集器。JVM会自动检测无用对象并释放其占用的内存,避免了手动管理的复杂性和内存泄漏风险。在Java8中,HotSpot虚拟机提供了多种垃圾收集器,其中Serial收集器是最基础、最早期的实现之一。虽然它在现代系统中逐渐被更先进的收集器(如G1、CMS)所取代,但它在某些特定场景下仍然有</div> </li> <li><a href="/article/1946393556826517504.htm" title="Java 领域 MyBatis 与数据库连接池的搭配使用" target="_blank">Java 领域 MyBatis 与数据库连接池的搭配使用</a> <span class="text-muted">Java技术栈实战</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>Java领域MyBatis与数据库连接池的搭配使用关键词:MyBatis、数据库连接池、Java持久层、性能优化、Druid、HikariCP、Spring集成摘要:本文深入探讨Java领域中MyBatis框架与数据库连接池的搭配使用原理和实践。文章从基础概念入手,详细分析MyBatis的工作原理和数据库连接池的核心机制,重点讲解两者如何协同工作以提升应用性能。通过源码解析、性能对比和实际项目案例</div> </li> <li><a href="/article/1946393557870899200.htm" title="IntelliJ IDEA 与 Java 开发的自动化部署方案" target="_blank">IntelliJ IDEA 与 Java 开发的自动化部署方案</a> <span class="text-muted">Java技术栈实战</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/intellij-idea/1.htm">intellij-idea</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>IntelliJIDEA与Java开发的自动化部署方案关键词:IntelliJIDEA、Java开发、自动化部署、CI/CD、Docker、Jenkins、Maven/Gradle摘要:本文深入探讨了如何利用IntelliJIDEA这一强大的JavaIDE与现代化工具链实现Java应用的自动化部署。我们将从开发环境配置开始,逐步介绍构建工具集成、持续集成/持续部署(CI/CD)流程搭建、容器化部署</div> </li> <li><a href="/article/1946393052302077952.htm" title="深入理解红锁" target="_blank">深入理解红锁</a> <span class="text-muted">未来并未来</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>在构建高并发、高可用的分布式系统时,我们常常会遇到这样一个核心挑战:如何确保多个服务实例能够安全、有序地访问共享资源,避免竞态条件(RaceCondition)和数据不一致?传统单机环境下的锁机制(如Java的synchronized或ReentrantLock)在分布式场景下显得力不从心。于是,分布式锁应运而生,而基于Redis的分布式锁因其高性能和简单性而被广泛应用。然而,单节点Redis锁在</div> </li> <li><a href="/article/1946392926162579456.htm" title="【Java开发日记】我们来说说如何使用 Lambda 表达式实现排序功能" target="_blank">【Java开发日记】我们来说说如何使用 Lambda 表达式实现排序功能</a> <span class="text-muted"></span> <div>目录基于Comparator排序使用Lambda表达式替换Comparator匿名内部类通过静态方法抽取公共的Lambda表达式借助Comparator的comparing方法多条件排序在Stream中进行排序倒序排列调转排序判断在Comparator.comparing中定义排序反转在Stream中定义排序反转null值的判断元素是null的笨拙实现使用Comparator.nullsLast和</div> </li> <li><a href="/article/1946392674378510336.htm" title="Java NLP炼金术:从词袋到深度学习,构建AI时代的语言魔方" target="_blank">Java NLP炼金术:从词袋到深度学习,构建AI时代的语言魔方</a> <span class="text-muted">墨夶</span> <a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/1.htm">Java学习资料</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a> <div>一、JavaNLP的“三剑客”:框架与工具链1.1ApacheOpenNLP:传统NLP的“瑞士军刀”目标:用词袋模型实现文本分类与实体识别代码实战:文档分类器的“炼成术”//OpenNLP文档分类器(基于词袋模型)importopennlp.tools.doccat.*;importopennlp.tools.util.*;publicclassDocumentClassifier{//训练模型</div> </li> <li><a href="/article/1946392547555340288.htm" title="Java代码异味终结者:三大神器实战拆解与深度优化" target="_blank">Java代码异味终结者:三大神器实战拆解与深度优化</a> <span class="text-muted">墨夶</span> <a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/1.htm">Java学习资料</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>2025年某电商平台因代码异味导致的崩溃事件,让业界震惊——重复代码占项目总量的32%,单个类方法行数超1500行,最终导致日活下降40%。本文通过代码异味检测工具,带你:1秒定位重复代码与魔法数字0误报率识别God类与空方法自动化修复代码异味,减少80%人工检查一、代码异味的科学分类与检测工具选择1.1代码异味的5大死亡陷阱类别典型症状危害等级重复代码相同逻辑在3处以上重复★★★★★God类单类</div> </li> <li><a href="/article/1946392546712285184.htm" title="Java实现端到端加密终极指南:密钥管理与分发的深度解析" target="_blank">Java实现端到端加密终极指南:密钥管理与分发的深度解析</a> <span class="text-muted">墨夶</span> <a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%994/1.htm">Java学习资料4</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、为什么选择Java实现端到端加密?企业级可靠性:Java生态提供BouncyCastle等成熟加密库,支持国密SM2/SM4及国际标准算法。全栈可控:从密钥生成到存储、分发、销毁,全程代码可审计,符合GDPR等安全规范。扩展性强:可集成HSM硬件安全模块,支持密钥轮换策略与前向安全性设计。二、核心代码实战:密钥管理与分发全流程2.1密钥生成与存储(国密SM2算法)importorg.bounc</div> </li> <li><a href="/article/1946384409255014400.htm" title="JAVA中分布式环境中如何实现单点登录与session共享" target="_blank">JAVA中分布式环境中如何实现单点登录与session共享</a> <span class="text-muted">在远方的你等我</span> <div>在单服务器web应用中,登录用户信息只需存在该服务的session中,这是我们几年前最长见的办法。而在当今分布式系统的流行中,微服务已成为主流,用户登录由某一个单点服务完成并存储session后,在高并发量的请求(需要验证登录信息)到达服务端的时候通过负载均衡的方式分发到集群中的某个服务器,这样就有可能导致同一个用户的多次请求被分发到集群的不同服务器上,就会出现取不到session数据的情况,于是</div> </li> <li><a href="/article/1943992018892025856.htm" title="JSON 与 AJAX" target="_blank">JSON 与 AJAX</a> <span class="text-muted">Auscy</span> <a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>一、JSON(JavaScriptObjectNotation)1.数据类型与语法细节支持的数据类型:基本类型:字符串(需用双引号)、数字、布尔值(true/false)、null。复杂类型:数组([])、对象({})。严格语法规范:键名必须用双引号包裹(如"name":"张三")。数组元素用逗号分隔,最后一个元素后不能有多余逗号。数字不能以0开头(如012会被解析为12),不支持八进制/十六进制</div> </li> <li><a href="/article/1943990125864218624.htm" title="JavaScript 树形菜单总结" target="_blank">JavaScript 树形菜单总结</a> <span class="text-muted">Auscy</span> <a class="tag" taget="_blank" href="/search/microsoft/1.htm">microsoft</a> <div>树形菜单是前端开发中常见的交互组件,用于展示具有层级关系的数据(如文件目录、分类列表、组织架构等)。以下从核心概念、实现方式、常见功能及优化方向等方面进行总结。一、核心概念层级结构:数据以父子嵌套形式存在,如{id:1,children:[{id:2}]}。节点:树形结构的基本单元,包含自身信息及子节点(若有)。展开/折叠:子节点的显示与隐藏切换,是树形菜单的核心交互。递归渲染:因数据层级不固定,</div> </li> <li><a href="/article/1943987101301272576.htm" title="精通Canvas:15款时钟特效代码实现指南" target="_blank">精通Canvas:15款时钟特效代码实现指南</a> <span class="text-muted">烟幕缭绕</span> <div>本文还有配套的精品资源,点击获取简介:HTML5的Canvas是一个用于绘制矢量图形的API,通过JavaScript实现动态效果。本项目集合了15种不同的时钟特效代码,帮助开发者通过学习绘制圆形、线条、时间更新、旋转、颜色样式设置及动画效果等概念,深化对Canvas的理解和应用。项目中的CSS文件负责时钟的样式设定,而JS文件则包含实现各种特效的逻辑,通过不同的函数或类处理时间更新和动画绘制,提</div> </li> <li><a href="/article/40.htm" title="java线程Thread和Runnable区别和联系" target="_blank">java线程Thread和Runnable区别和联系</a> <span class="text-muted">zx_code</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/Runnable/1.htm">Runnable</a> <div>我们都晓得java实现线程2种方式,一个是继承Thread,另一个是实现Runnable。 模拟窗口买票,第一例子继承thread,代码如下 package thread; public class ThreadTest { public static void main(String[] args) { Thread1 t1 = new Thread1(</div> </li> <li><a href="/article/167.htm" title="【转】JSON与XML的区别比较" target="_blank">【转】JSON与XML的区别比较</a> <span class="text-muted">丁_新</span> <a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。 XML是标</div> </li> <li><a href="/article/294.htm" title="c++ 实现五种基础的排序算法" target="_blank">c++ 实现五种基础的排序算法</a> <span class="text-muted">CrazyMizzz</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>#include<iostream> using namespace std; //辅助函数,交换两数之值 template<class T> void mySwap(T &x, T &y){ T temp = x; x = y; y = temp; } const int size = 10; //一、用直接插入排</div> </li> <li><a href="/article/421.htm" title="我的软件" target="_blank">我的软件</a> <span class="text-muted">麦田的设计者</span> <a class="tag" taget="_blank" href="/search/%E6%88%91%E7%9A%84%E8%BD%AF%E4%BB%B6/1.htm">我的软件</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E4%B9%90%E7%B1%BB/1.htm">音乐类</a><a class="tag" taget="_blank" href="/search/%E5%A8%B1%E4%B9%90/1.htm">娱乐</a><a class="tag" taget="_blank" href="/search/%E6%94%BE%E6%9D%BE/1.htm">放松</a> <div>     这是我写的一款app软件,耗时三个月,是一个根据央视节目开门大吉改变的,提供音调,猜歌曲名。1、手机拥有者在android手机市场下载本APP,同意权限,安装到手机上。2、游客初次进入时会有引导页面提醒用户注册。(同时软件自动播放背景音乐)。3、用户登录到主页后,会有五个模块。a、点击不胫而走,用户得到开门大吉首页部分新闻,点击进入有新闻详情。b、</div> </li> <li><a href="/article/548.htm" title="linux awk命令详解" target="_blank">linux awk命令详解</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/linux+awk/1.htm">linux awk</a> <div>awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file [-F|-f|-v]大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=val</div> </li> <li><a href="/article/675.htm" title="各种语言比较" target="_blank">各种语言比较</a> <span class="text-muted">_wy_</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a> <div>                    Java Ruby PHP 擅长领域                  </div> </li> <li><a href="/article/802.htm" title="oracle 中数据类型为clob的编辑" target="_blank">oracle 中数据类型为clob的编辑</a> <span class="text-muted">知了ing</span> <a class="tag" taget="_blank" href="/search/oracle+clob/1.htm">oracle clob</a> <div>public void updateKpiStatus(String kpiStatus,String taskId){ Connection dbc=null; Statement stmt=null; PreparedStatement ps=null; try { dbc = new DBConn().getNewConnection(); //stmt = db</div> </li> <li><a href="/article/929.htm" title="分布式服务框架 Zookeeper -- 管理分布式环境中的数据" target="_blank">分布式服务框架 Zookeeper -- 管理分布式环境中的数据</a> <span class="text-muted">矮蛋蛋</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>原文地址: http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ 安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两</div> </li> <li><a href="/article/1056.htm" title="tomcat数据源" target="_blank">tomcat数据源</a> <span class="text-muted">alafqq</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>数据库 JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。 没有使用JNDI时我用要这样连接数据库: 03.  Class.forName("com.mysql.jdbc.Driver");  04.  conn</div> </li> <li><a href="/article/1183.htm" title="遍历的方法" target="_blank">遍历的方法</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/%E9%81%8D%E5%8E%86/1.htm">遍历</a> <div>                                                      遍历 在java的泛</div> </li> <li><a href="/article/1310.htm" title="linux查看硬件信息的命令" target="_blank">linux查看硬件信息的命令</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>linux查看硬件信息的命令 一.查看CPU: cat /proc/cpuinfo   二.查看内存: free   三.查看硬盘: df   linux下查看硬件信息 1、lspci 列出所有PCI 设备; lspci - list all PCI devices:列出机器中的PCI设备(声卡、显卡、Modem、网卡、USB、主板集成设备也能</div> </li> <li><a href="/article/1437.htm" title="java常见的ClassNotFoundException" target="_blank">java常见的ClassNotFoundException</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>1.java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory   添加包common-logging.jar2.java.lang.ClassNotFoundException: javax.transaction.Synchronization    </div> </li> <li><a href="/article/1564.htm" title="【Gson五】日期对象的序列化和反序列化" target="_blank">【Gson五】日期对象的序列化和反序列化</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/1.htm">反序列化</a> <div>对日期类型的数据进行序列化和反序列化时,需要考虑如下问题:   1. 序列化时,Date对象序列化的字符串日期格式如何 2. 反序列化时,把日期字符串序列化为Date对象,也需要考虑日期格式问题 3. Date A -> str -> Date B,A和B对象是否equals   默认序列化和反序列化     import com</div> </li> <li><a href="/article/1691.htm" title="【Spark八十六】Spark Streaming之DStream vs. InputDStream" target="_blank">【Spark八十六】Spark Streaming之DStream vs. InputDStream</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Stream/1.htm">Stream</a> <div>  1. DStream的类说明文档:   /** * A Discretized Stream (DStream), the basic abstraction in Spark Streaming, is a continuous * sequence of RDDs (of the same type) representing a continuous st</div> </li> <li><a href="/article/1818.htm" title="通过nginx获取header信息" target="_blank">通过nginx获取header信息</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+header/1.htm">nginx header</a> <div>1. 提取整个的Cookies内容到一个变量,然后可以在需要时引用,比如记录到日志里面, if ( $http_cookie ~* "(.*)$") {         set $all_cookie $1; }     变量$all_cookie就获得了cookie的值,可以用于运算了 </div> </li> <li><a href="/article/1945.htm" title="java-65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999" target="_blank">java-65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>参考了网上的http://blog.csdn.net/peasking_dd/article/details/6342984 写了个java版的: public class Print_1_To_NDigit { /** * Q65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999 * 1.使用字符串</div> </li> <li><a href="/article/2072.htm" title="Netty源码学习-ReplayingDecoder" target="_blank">Netty源码学习-ReplayingDecoder</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a> <div>ReplayingDecoder是FrameDecoder的子类,不熟悉FrameDecoder的,可以先看看 http://bylijinnan.iteye.com/blog/1982618 API说,ReplayingDecoder简化了操作,比如: FrameDecoder在decode时,需要判断数据是否接收完全: public class IntegerH</div> </li> <li><a href="/article/2199.htm" title="js特殊字符过滤" target="_blank">js特殊字符过滤</a> <span class="text-muted">cngolon</span> <a class="tag" taget="_blank" href="/search/js%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6/1.htm">js特殊字符</a><a class="tag" taget="_blank" href="/search/js%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E8%BF%87%E6%BB%A4/1.htm">js特殊字符过滤</a> <div>1.js中用正则表达式 过滤特殊字符, 校验所有输入域是否含有特殊符号function stripscript(s) {    var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()&mdash;—|{}【】‘;:”“'。,、?]"</div> </li> <li><a href="/article/2326.htm" title="hibernate使用sql查询" target="_blank">hibernate使用sql查询</a> <span class="text-muted">ctrain</span> <a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div> import java.util.Iterator; import java.util.List; import java.util.Map; import org.hibernate.Hibernate; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.Transa</div> </li> <li><a href="/article/2453.htm" title="linux shell脚本中切换用户执行命令方法" target="_blank">linux shell脚本中切换用户执行命令方法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E4%BB%A4/1.htm">命令</a><a class="tag" taget="_blank" href="/search/%E5%88%87%E6%8D%A2%E7%94%A8%E6%88%B7/1.htm">切换用户</a> <div>经常在写shell脚本时,会碰到要以另外一个用户来执行相关命令,其方法简单记下:   1、执行单个命令:su - user -c "command" 如:下面命令是以test用户在/data目录下创建test123目录 [root@slave19 /data]# su - test -c "mkdir /data/test123" </div> </li> <li><a href="/article/2580.htm" title="好的代码里只要一个 return 语句" target="_blank">好的代码里只要一个 return 语句</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/return/1.htm">return</a> <div>别再这样写了:public boolean foo() {    if (true) {         return true;     } else {          return false;    </div> </li> <li><a href="/article/2707.htm" title="Android动画效果学习" target="_blank">Android动画效果学习</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>1、透明动画效果 方法一:代码实现 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, fals</div> </li> <li><a href="/article/2834.htm" title="linux复习笔记之bash shell (4)管道命令" target="_blank">linux复习笔记之bash shell (4)管道命令</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux%E7%AE%A1%E9%81%93%E5%91%BD%E4%BB%A4%E6%B1%87%E6%80%BB/1.htm">linux管道命令汇总</a><a class="tag" taget="_blank" href="/search/linux%E7%AE%A1%E9%81%93%E5%91%BD%E4%BB%A4/1.htm">linux管道命令</a><a class="tag" taget="_blank" href="/search/linux%E5%B8%B8%E7%94%A8%E7%AE%A1%E9%81%93%E5%91%BD%E4%BB%A4/1.htm">linux常用管道命令</a> <div>转载请出自出处: http://eksliang.iteye.com/blog/2105461     bash命令执行的完毕以后,通常这个命令都会有返回结果,怎么对这个返回的结果做一些操作呢?那就得用管道命令‘|’。     上面那段话,简单说了下管道命令的作用,那什么事管道命令呢?     答:非常的经典的一句话,记住了,何为管</div> </li> <li><a href="/article/2961.htm" title="Android系统中自定义按键的短按、双击、长按事件" target="_blank">Android系统中自定义按键的短按、双击、长按事件</a> <span class="text-muted">gqdy365</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1、单击事件:就是普通key的单击; 2、双击事件:500ms内同一按键单击两次; 3、长按事件:同一按键长按超过1000ms(系统中长按事件为500ms); 4、组合按键:两个以上按键同时按住; </div> </li> <li><a href="/article/3088.htm" title="asp.net获取站点根目录下子目录的名称" target="_blank">asp.net获取站点根目录下子目录的名称</a> <span class="text-muted">hvt</span> <a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a><a class="tag" taget="_blank" href="/search/Web+Forms/1.htm">Web Forms</a> <div>使用Visual Studio建立一个.aspx文件(Web Forms),例如hovertree.aspx,在页面上加入一个ListBox代码如下: <asp:ListBox runat="server" ID="lbKeleyiFolder" />   那么在页面上显示根目录子文件夹的代码如下: string[] m_sub</div> </li> <li><a href="/article/3215.htm" title="Eclipse程序员要掌握的常用快捷键" target="_blank">Eclipse程序员要掌握的常用快捷键</a> <span class="text-muted">justjavac</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/%E5%BF%AB%E6%8D%B7%E9%94%AE/1.htm">快捷键</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>  判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。   曾有人在豆瓣评 《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个 程序员图书列表,目的也就是通过读书,让程序员变懒。  写道 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可</div> </li> <li><a href="/article/3342.htm" title="c++编程随记" target="_blank">c++编程随记</a> <span class="text-muted">lx.asymmetric</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div> 为了字体更好看,改变了格式……   &&运算符:   #include<iostream> using namespace std; int main(){      int a=-1,b=4,k;      k=(++a<0)&&!(b--</div> </li> <li><a href="/article/3469.htm" title="linux标准IO缓冲机制研究" target="_blank">linux标准IO缓冲机制研究</a> <span class="text-muted">音频数据</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:A.缓存I/O使用了操作系统内核缓冲区,</div> </li> <li><a href="/article/3596.htm" title="随想 生活" target="_blank">随想 生活</a> <span class="text-muted">暗黑小菠萝</span> <a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a> <div>其实账户之前就申请了,但是决定要自己更新一些东西看也是最近。从毕业到现在已经一年了。没有进步是假的,但是有多大的进步可能只有我自己知道。   毕业的时候班里12个女生,真正最后做到软件开发的只要两个包括我,PS:我不是说测试不好。当时因为考研完全放弃找工作,考研失败,我想这只是我的借口。那个时候才想到为什么大学的时候不能好好的学习技术,增强自己的实战能力,以至于后来找工作比较费劲。我</div> </li> <li><a href="/article/3723.htm" title="我认为POJO是一个错误的概念" target="_blank">我认为POJO是一个错误的概念</a> <span class="text-muted">windshome</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/J2EE/1.htm">J2EE</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1/1.htm">设计</a> <div>              这篇内容其实没有经过太多的深思熟虑,只是个人一时的感觉。从个人风格上来讲,我倾向简单质朴的设计开发理念;从方法论上,我更加倾向自顶向下的设计;从做事情的目标上来看,我追求质量优先,更愿意使用较为保守和稳妥的理念和方法。    &</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>