精选列表

搜索[初体验],共233篇文章
优秀的个人博客,低调大师

SpringBoot2初体验,简单认识spring boot2并且搭建基础工程

前言 发展史 Spring boot 1.1(2014 年 6 月) - 改进的模板支持,gemfire 支持,elasticsearch 和 apache solr 的自动配置。 Spring Boot 1.2(2015 年 3 月) - 升级到 servlet 3.1 / tomcat 8 / jetty 9,spring 4.1 升级,支持 banner / jms / SpringBootApplication 注解。 Spring Boot 1.3(2016 年 12 月) - Spring 4.2 升级,新的 spring-boot-devtools,用于缓存技术(ehcache,hazelcast,redis 和 infinispan)的自动配置以及完全可执行的 jar 支持。 Spring boot 1.4(2017年1月) - spring 4.3 升级,支持 couchbase / neo4j,分析启动失败和RestTemplateBuilder。 Spring boot 1.5(2017年2月) - 支持 kafka / ldap,第三方库升级,弃用 CRaSH 支持和执行器记录器端点以动态修改应用程序日志级别。 Spring boot 2.0(2018 年 03 月)-基于 Java 8,支持 Java 9,支持 Quartz ,调度程序大大简化了安全自动配置,支持嵌入式 Netty。 SpringBoot 1.x再见,拥抱SpringBoot 2.x 2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 如今 Spring Boot 1.X 版本最后将永久的定格在 v1.5.22.RELEASE,其实回想起来自从 Spring Boot 1.0 发布已经过去了 5 年多,相当于 Spring Boot 一年发布一个大的子版本,然后到了现在的 1.5.x。 正在使用 Spring Boot 1.x 需要立刻升级吗? spring Boot 1.x 只是停止维护,并不是不能用了,如果你不是特别着急想用 Spring Boot 2.x 的新特性,再用个几年也是没有任何问题的。 Spring Boot 1.x 到 2.x 中间更新了很多 API 以及依赖组件。升级时需要先将 Spring Boot 1.X 系列升级到 1.5.x,再从 1.5.x 升级到 2.x 最新稳定版本。 Spring Boot 2.x 对 Java 环境的要求最低为 JDK 8,可能还有很多的公司服务器还在 1.6 或者 1.7 的环境中跑着,升级的时候也需要先升级服务器的基础环境。 如果项目中使用了微服务架构,建议可以一个一个子服务进行升级,不要一次全部升级完成,保障整个服务在升级过程的稳定性。 建立Springboot工程有两种方式 1.通过官网快速构建 2.手动构建Springboot工程 注:这两种方式在本文都会提到,本文仅构建简单的Springboot工程,如果需要构建Maven聚合的Springboot工程请期待后续文章 一.官网快速构建 1.Springboot官网提供了一个快速构建工程的方案 网址:https://start.spring.io/ 填写一些基本信息 2.下载并解压工程(工程目录如下,是一个标准的Maven工程) 3.Eclipse导入Maven工程 注:请升级至Eclipse_v2019.09,否则导入代码会报错。并且该代码依赖于Maven,所以需要提前准备Maven环境,并且导入的时候需要下载Jar请耐心等待。导入完成如图所示 4.Springboot工程目录结构介绍 5.运行项目 打开SpringbootApplication.java类运行其main方法即可 注:此时项目运行在8080默认端口,用浏览器访问即可。由于我们没写任何代码仅仅测试项目所以访问会报404错误,如下图所示 二.手动构建Springboot工程 1.创建一个Maven工程 创建出来的工程如下 注:第一次创建Maven工程,需要提前准备Maven环境、并且初次创建Maven项目需要去中央仓库下载Jar包,请耐心等待。 2.修改Maven的配置文件pom.xml 添加spring-boot-starter-parent xml 复制代码 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> 添加web依赖 xml 复制代码 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> 添加springboot打包插件 xml 复制代码 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 注:由于修改了maven配置文件,工程会报错。所以需要刷新工程。 3.创建启动类 java 复制代码 package org.xujun; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringbootMyApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMyApplication.class, args); } } 4.运行项目 参考[通过官网快速构建]的启动方式即可 总结:如果你看到了以上的404报错恭喜你,项目已经构建成功了。

优秀的个人博客,低调大师

豆包MarsCode 初体验,用React创建一个最经典的贪吃蛇游戏

以下是「 豆包MarsCode 体验官」优秀文章,作者Find。 背景 在人工智能快速发展的时代,大模型(LLM)只要有足够的算力和数据就可以做到任何的事情,甚至可以模拟出另一个地球。LLM作为一个革命化的科技,可以取代很多岗位,甚至可以让人类达到"躺着领钱的时代"。Marscode作为一个新推出的IDE,紧跟时代的潮流,拥抱AI,顺应时代的潮流。 各种各样的语言,都会有一个贪吃蛇的游戏去作为一个里程碑,我也完完全全用这个IDE去编写贪吃蛇游戏这个小demo。 创建项目 在这个IDE创建一个贪吃蛇的项目 生成了一个这样的项目目录 因为我还没学ts,就再用npm init vite去初始化了一个JavaScript的React项目 输完项目名称,cd project-name和npm i切换到你的项目目录和下载依赖就完成了vite脚手架的安装 npm run dev把项目跑起来 很方便直接能网页预览 设计项目 提出自己的需求给AI assistant 设计这个游戏的组件 但是它好像不是很能理解上下文,我这两句话是放在一起写的。只能再给出一份更详细的设计要求 给出了四份组件,那就去项目中创建文件。 创建好对应的目录和文件。询问AI代码 以下过程一样,找AI去生成一份相关组件的代码 当然因为我是分开要的组件代码,所以就产生了一些错误。看到还有AI fix的功能 我果断尝试了 这里AI fix 左右两边分别表示之前的代码和修改后的代码,你可以去看它修改后的代码是否正确去选择是否接受 对于这个问题,AI fix似乎跟个人机一样,根本解决不了 最大的感受就是这个AI fix感觉就是给你改错,然后用错去改你的错,有一点拆东墙补西墙的感觉,毕竟还是AI,可能并不能很好去理解bug本质所在,只会通过bug存在的原因去机械的给你改bug。 解决完所有的bug 代码也是成功跑不出来 有些涉及AI生成的代码中有些属性并未被初始化等等问题,改来改去最后还是把页面跑出来了 代码 GameBoard.jsx import React, { useState, useEffect, useRef } from 'react'; import Snake from './Snake'; import Food from './Food'; import Score from './Score'; const GameBoard = () => { const [snakeBody, setSnakeBody] = useState([]); const [food, setFood] = useState({}); const [direction, setDirection] = useState('right'); const [isGameOver, setIsGameOver] = useState(false); const [score, setScore] = useState(0); const gameBoardRef = useRef(null); useEffect(() => { gameBoardRef.current.focus(); initializeGame(); }, []); useEffect(() => { if (snakeBody.length) { const timer = setInterval(moveSnake, 300); return () => clearInterval(timer); } }, [snakeBody, direction]); const initializeGame = () => { const initialSnake = [{ x: 200, y: 200 }]; setSnakeBody(initialSnake); setFood(getRandomPosition()); setDirection('right'); setIsGameOver(false); setScore(0); }; const getRandomPosition = () => { const x = Math.floor(Math.random() * 20) * 20; const y = Math.floor(Math.random() * 20) * 20; return { x, y }; }; const moveSnake = () => { let newHead; switch (direction) { case 'right': newHead = { x: snakeBody[0].x + 20, y: snakeBody[0].y }; break; case 'left': newHead = { x: snakeBody[0].x - 20, y: snakeBody[0].y }; break; case 'up': newHead = { x: snakeBody[0].x, y: snakeBody[0].y - 20 }; break; case 'down': newHead = { x: snakeBody[0].x, y: snakeBody[0].y + 20 }; break; default: return; } if (isCollisionWithWall(newHead) || isCollisionWithSelf(newHead)) { setIsGameOver(true); return; } const newSnakeBody = [newHead, ...snakeBody.slice(0, -1)]; if (isCollisionWithFood(newHead)) { setFood(getRandomPosition()); setScore(score + 1); newSnakeBody.push({}); } setSnakeBody(newSnakeBody); }; const isCollisionWithWall = (head) => { return head.x < 0 || head.x >= 400 || head.y < 0 || head.y >= 400; }; const isCollisionWithSelf = (head) => { return snakeBody.some((segment) => segment.x === head.x && segment.y === head.y); }; const isCollisionWithFood = (head) => { return head.x === food.x && head.y === food.y; }; const handleKeyDown = (event) => { if (event.keyCode === 37 && direction !== 'right') { setDirection('left'); } else if (event.keyCode === 38 && direction !== 'down') { setDirection('up'); } else if (event.keyCode === 39 && direction !== 'left') { setDirection('right'); } else if (event.keyCode === 40 && direction !== 'up') { setDirection('down'); } }; return ( <div> <div ref={gameBoardRef} tabIndex="0" onKeyDown={handleKeyDown} className="game-board" > {!isGameOver && <Snake snakeBody={snakeBody} />} {!isGameOver && <Food position={food} />} </div> <Score score={score} /> {isGameOver && <div>Game Over!</div>} </div> ); }; export default GameBoard; App.jsx和App.css import React from 'react'; import GameBoard from './components/GameBoard'; import './App.css'; function App() { return ( <div className="app"> <h1>贪吃蛇游戏</h1> <GameBoard /> </div> ); } export default App; .app { text-align: center; } ------------------css------------------ .game-container { display: flex; justify-content: center; align-items: flex-start; } .game-board { position: relative; width: 400px; height: 400px; border: 1px solid black; overflow: hidden; margin-right: 20px; } .score-board { margin-top: 20px; } Snake.jsx import React from 'react'; const Snake = ({ snakeBody }) => { return ( <> {snakeBody.map((segment, index) => ( <div key={index} style={{ width: '20px', height: '20px<p align=center>',</p> backgroundColor: index === 0 ? 'green' : 'black', position: 'absolute', left: `${segment.x}px`, top: `${segment.y}px`, }} /> ))} </> ); }; export default Snake; Food.jsx import React from 'react'; const Food = ({ position }) => { return ( <div style={{ width: '20px', height: '20px', backgroundColor: 'red', position: 'absolute', left: `${position.x}px`, top: `${position.y}px`, }} /> ); }; export default Food; Score.jsx import React from 'react'; const Score = ({ score }) => { return <div className="score-board">Score: {score}</div>; }; export default Score; 个人感受 做个这个小项目后,最大的感受就是如果你掌握了代码底层逻辑、编程思想等,通过这类有智能化AI的IDE一键生成会让你代码速度提升一个层次。可能有些人觉得AI只能搭建起一个简单的框架,事实上,在你搭建好了框架后,你还可以去按照你的需求去逐步完善你的项目,就拿这个贪吃蛇举例而言,如果我后续需要提升难度,根据我吃球后速度提升、设置障碍物等等,我都可以单独拎出这些需求告诉AI助手,就算它并不能完全帮你写完代码,但也能八九不离。CSS样式、页面切片这种,通过tailwindcss框架和语义化标签,AI已经有理解图像的能力,可以很好完成此类工作。当然随着大模型数据不断的喂养,慢慢等到资本的介入,算力不断提高,AI理解能力的提高,也会使这种AI IDE越来越厉害,也许真有一天普通人掌握编程思想不会编程语言也能编程。豆包Marscode正是有这种强大的功能的IDE,我相信豆包Marscode 会越来越好!!! 本文由博客一文多发平台 OpenWrite 发布!

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。