Vue-Router 的安装和使用

前端路由 Vue-Router 介绍

什么是路由?

路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动 — 维基百科

路由器提供了两种机制, 路由和转发

  • 路由是决定数据包从来源到目的地的路径
  • 转发将输入端的数据转移到合适的输出端

网站发展的几个阶段

后端路由阶段

什么是后端路由

早期的网站开发, 整个 HTML 页面都是是由服务器来渲染的, 服务器直接生产渲染好对应的 HTML 页面, 返回给客户端进行展示

但是, 服务器如何处理一个网站的诸多页面呢?

首先, 一个页面会有自己对应的网址, 也就是 URL, 客户端发生请求时, URL 会发送到服务器, 服务器通过正则表达式对该 URL 进行匹配且最后交给 Controller 进行处理, Controller 进行各种处理后, 最终生成 HTML 或者数据, 返回给前端, 这就完成了一个IO操作, 这种操作, 就是 后端路由

后端路由的优点

当页面中需要请求不同的路径内容时, 交给服务器来进行处理, 服务器渲染好整个页面, 并且将页面返回给客户端, 这种情况下渲染好的页面, 不需要单独加载任何的 JavaScript 和 CSS, 可以直接交给浏览器展示, 这样也有利于 SEO 的优化

后端路由的缺点

  • 整个页面的模块都要由后端人员来编写和维护, 工作量太大
  • 前端开发人员如果要开发页面, 需要通过 PHPJava 等语言来编写页面代码, 增加了额外的学习成本
  • HTML 代码和数据以及对应的逻辑混在一起, 不利于编写和维护

前端路由阶段

前端路由的核心: 改变URL, 但是页面不进行整体的刷新

前后端分离阶段

随着 Ajax 的出现, 有了前后端分离的开发模式: 后端只提供 API 来返回数据, 前端通过 Ajax 获取数据, 并且可以通过 JavaScript 将数据渲染到页面中

优点:

  • 前后端责任变得很清晰, 后端专注于数据上, 前端专注于交互和可视化上
  • 当移动端(IOS / Android)出现后, 后端不需要进行任何处理, 依然使用之前的一套API即可

单页面富应用阶段

单页面富应用, 即单页Web应用(single page web application, SPA), 就是只有一张 Web 页面的应用, 是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的 Web 应用程序

简单理解: 就是在前后端分离的基础上加了一层前端路由

SPA 的特点

  • 速度: 更好的用户体验, 让用户在 web app 感受 native app 的速度和流畅
  • MVVM: 经典 MVVM 开发模式, 前后端各负其责
  • ajax: 重前端, 业务逻辑全部在本地操作, 数据都需要通过 Ajax 同步、提交
  • 路由: 在 URL 中采用 # 号来作为当前视图的地址, 改变 # 号后的参数, 页面并不会重载

SPA 的优点

良好的交互体验:

  • 用户不需要重新刷新页面, 获取数据也是通过 Ajax 异步获取, 页面显示流畅

良好的前后端工作分离模式:

  • 单页 Web 应用可以和 RESTful 规约一起使用, 通过 REST API 提供接口数据, 并使用 Ajax 异步获取
  • 这样有助于分离客户端和服务器端工作, 更进一步, 可以在客户端也可以分解为静态页面和页面交互两个部分

减轻服务器压力:

  • 服务器只用出数据就可以, 不用管展示逻辑和页面合成, 吞吐能力会提高几倍

共用一套后端程序代码:

  • 不用修改后端程序代码就可以同时用于 Web 界面、手机、平板等多种客户端

SPA 的缺点

首屏渲染等待时长

  • 必须等待加载完毕, 才能渲染出首屏

seo不友好:

  • 爬虫只能拿到一个 div, 认为页面是空的, 不利于 seo

初次加载耗时多:

  • 为实现单页Web应用功能及显示效果, 需要在加载页面的时候将 JavaScript、CSS 统一加载, 部分页面可以在需要的时候加载
  • 所以必须对 JavaScript 及 CSS 代码进行合并压缩处理, 如果使用第三方库, 建议使用一些大公司的 CDN, 因此带宽的消耗是必然的

改变 URL, 页面不刷新

URL 的 hash

URL 的 hash 也就是锚点(#), 本质上是改变 window.location 的 href 属性, 可以通过直接赋值 location.hash 来改变 href, 但是页面不发生刷新

image

HTML5 的 history 模式

history 接口是 HTML5 新增的, 它有五种模式改变 URL 而不刷新页面 (具体有点像浏览器的前进和后退)

  • history.pushState(Object, "title", "url")

    • 相当于入栈的操作(出入栈相当于往一个杯子里加东西, 只有一个出入口, 后进的会在先进的上面), 遵循后进先出的规则, 会保存历史记录, 可以返回
      image
  • history.replaceState(Objectj, "title", "url")

    • pushState()
    • 区别是: 它不是栈结构, 所以不保存历史记录, 不能返回
  • history.go(Number)

    • 功能等价于 history.back(), 但是可以通过参数来进行具体的跳转
    • Number 负数: 表示出栈几次
    • Number 正数: 表示把之前出栈掉的 Number 个数据重新 push 进去
      image
  • history.forward()

    • 可以前进到下一个记录的地址
    • 等价于history.go(1)
  • history.back()

    • 相当于出栈的操作, 遵循后进先出的规则, 可以返回上一个记录的地址
    • 等价于history.go(-1)

Vue-Router 基本使用

目前前端流行的三大框架, 都有自己的路由实现:

  • Angular: ngRouter
  • React: ReactRouter
  • Vue: Vue-Router

Vue-Router 是 Vue.js 官方的路由插件, 它和 Vue.js 是深度集成的, 适合用于构建单页面富应用程序

Vue-Router 是基于路由和组件的, 路由用于设定访问路径, 将路径和组件映射起来, 在 Vue-Router 的单页面应用中, 页面路径的改变就是组件的切换

安装 Vue-Router

安装

npm install vue-router --save

在模块化工程中使用它(因为是一个插件, 所以可以通过Vue.use()来安装路由功能)

src 目录下创建 router 文件夹, 并在 router 文件夹中创建 index.js, 并在 index.js 中进行如下配置 (第一步、第二步均在此文件中配置)

  1. 导入Vue、Vue-Router对象, 并且调用Vue.use(VueRouter)
    // 导入vue对象
    import Vue from 'vue'
    
    // 导入vue-router对象
    import VueRouter from 'vue-router'
    
    // 注入插件
    Vue.use(VueRouter)
    
  2. 创建路由实例, 并且传入路由映射配置
    //定义路由
    const routes = [
      // 里面是映射配置
    ]
    
    // 创建路由实例
    const router = new VueRouter({
      routes
    })
    
    // 导出 router 实例
    export default router
    
  3. Vue 实例挂载创建的路由实例
    image

使用 Vue-Router

  1. 创建路由组件
    image
  2. 配置路由映射: 组件和路径的映射关系
    image
  3. 使用路由: 通过(该标签为 router 内部已经注册的两个全局组件)

最终效果如下

image

router-link标签

该标签是一个 Vue-Router 中已经内置的组件, 它默认会被渲染成一个 标签

它有如下属性

  • to: (URL)
    • 用于指定跳转的路径
  • tag: (tagName)
    • 最终渲染成tagName标签
  • replace: (无值)
    • 跳转时使用 history.replaceState(), 即页面不能前进和后退
  • active-class: (className)
    • 对应的路由匹配成功时, 会自动给当前元素设置一个 router-link-activeclass , 设置 active-class 可以修改默认的名称
    • 在进行高亮显示的导航栏菜单或者底部 tabbar 时, 会使用到该类
    • 但是通常不会修改类的属性, 会直接使用默认的 router-link-active 即可
    • 简便写法: 该属性可以在VueRouter实例中添加属性为 linkActiveClass

设置默认路径(重定向)

如何让路径默认跳到首页, 并且 渲染首页组件呢?

非常简单, 我们只需要配置多一个映射就可以了

const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/home',
    component: Home
  },
  {
    path: '/about',
    component: About
  }
];

配置解析:

  • 我们在 routes 中又配置了一个映射
  • path 配置的是根路径
  • redirect 是重定向, 也就是我们将根路径重定向到 /home 的路径下, 这样就可以得到我们想要的结果了

将 URL 的模式 hash(默认) 改为 HTML5 的 history

前面说过改变路径的方式有两种:

  • URL 的 hash
  • HTML5 的 history

默认情况下, Vue 路径的改变使用的是 URL 的 hash, 这样显示出的页面的地址中有一个 # 号, 不太美观

可以使用 HTML5 的 history 模式来进行改变, 进行如下配置即可:

VueRouter 实例对象添加属性 mode(模式), 值为 history

const router = new VueRouter({
  routes,
  mode: "history"
});

路由代码跳转(不通过 router-link 实现同样的功能)

$router : VueRouter 实例对象, Vue 在所有组件中都添加了该属性
$router == VueRouter




动态路由

在某些情况下, 一个页面的 path 可能是不确定的, 比如我们进入用户界面时, 希望是如下路径

  • /user/Sunny 或 /user/kobe
  • 除了有前面的/user 之外, 后面还跟上了用户的 id
  • 这种 path 和 Component 的匹配关系, 我们称之为 动态路由 (也就是路由传递数据的一种方式)

步骤一: 路由映射

import User from "../components/User.vue";

const routes = [
  {
    path: "/user/:userId",
    component: User
  }
];

步骤二: 使用子组件路由, 且通过 v-bind 动态设置属性

My


步骤三: 在子组件 User.vue 中, 通过 $route.params.userId 获得当前用户 id


懒加载

当打包构建应用时, Javascript 包会变得非常大, 影响页面加载, 如果我们能把不同路由对应的组件分割成不同的代码块, 然后当路由被访问的时候才加载对应组件, 这样就更加高效了

为了实现这种效果, 我们可以使用路由的懒加载

路由懒加载的主要作用就是将路由对应的组件打包成一个个的 js 代码块, 只有在这个路由被访问到的时候, 才加载对应的组件

js 包为什么大?

  • 首先, 我们知道路由通常会定义很多不同的页面
  • 这个页面最后被打包放在哪里呢? 一般情况下, 是放在一个 js 文件中
  • 但是, 页面这么多放在一个 js 文件中, 必然会造成这个页面非常的大
  • 如果我们一次性从服务器请求下来这个页面, 可能需要花费一定的时间, 甚至用户电脑上还出现了短暂空白的情况
  • 如何避免这种情况呢? 使用路由懒加载就可以了
  • 路由懒加载做了什么?
    • 路由懒加载的主要作用就是将路由对应的组件打包成一个个 js 代码块
    • 只有在这个路由被访问到的时候, 才加载对应的组件

懒加载的三种方式

方式一(早期): 结合 Vue 的异步组件和 webpack 的代码分析

const Home = resolve => {
  require.ensure(["../components/Home.vue"], () => {
    resolve(require("../components/Home.vue"))
  })
}

方式二: AMD 写法

const Aoubt = resolve => require(["../components/About.vue"], resolve);

方式三(推荐): 在 ES6 中, 我们可以有更加简单的写法来组织 Vue 异步组件和 webpack 的代码分割

const Home = () => import("../components/Home.vue");

嵌套路由

嵌套有路是一个很常见的功能

  • 比如在 home 页面中, 我们希望通过/home/news 和 /home/message 访问一些内容
  • 一个路径映射一个组件, 访问这两个路径也会分别渲染两个组件

实现嵌套路由有两个步骤:

  1. 创建对应的子组件, 并且在路由映射中配置对应的子路由
  2. 在组件内部使用标签

创建对应的子组件




在路由映射中配置对应的子路由

// 注意: 子路由的path前面不能带'/'
const routes = [
  {
    path: '/home',
    component: Home,
    children: [
      {
        path: '',
        redirect: 'news'
        // 默认路径为/home/news
      },
      {
        path: 'news',
        component: HomeNews
      },
      {
        path: 'message',
        component: HomeMessage
      }
    ]
  },
]

在组件内部使用标签




嵌套路由默认路径

在子路由中设置重定向

const routes = [
  {
    path: "/",
    redirect: "/home"
  },
  {
    path: "/home",
    component: Home,
    children: [
      {
        path: "",
        redirect: "news"
      },
      {
        path: "news",
        component: HomeNews
      }
    ]
  }
];

keep-alive

keep-alive 是 Vue 内置的一个组件, 可以使被包含的组件保留状态, 或避免重新渲染
router-view 也是一个组件, 如果直接被包在keep-alive里面, 所有路径匹配到的视图组件都会被缓存

通过 create 生命周期函数来验证

可以通过 keep-alive, 监听一个组件 "活跃" 和 "不活跃" 的状态

  • activated() 活跃状态自动调用该函数
  • deactivated() 不活跃状态自动调用该函数

keep-alive属性:

  • include : 字符串或正则, 只有匹配的组件才会被缓存
  • exclude : 字符串或正则, 任何匹配的组件都不会被缓存
    • 可以使用组件导出时的 name 作为匹配
    • 注意: 如果有多个匹配, 用 , (逗号) 分开, 且逗号两边不能存在空格

参数传递

传递参数主要有两种类型: params 和 query

  • params($route.params) 的类型:
    • 配置路由格式: /router/:id
    • 传递的方式: 在 path 后面跟上对应的值
    • 传递后形成的路径: /router/123, /router/abc
  • query ($route.query)的类型:
    • 配置路由格式: /router
    • 传递的方式: 对象中使用 query 的 key 作为传递方式
    • 传递后形成的路径: /router?id=123, /router?id=abc

  Profile

这里获取并打印这些数据:


不使用 router-link 实现 query




导航守卫

在 SPA 应用中, 如何改变页面的标题呢?

  • 网页标题是通过 </code> 来显示的, 但是 SPA 只有一个固定的 HTML, 切换不同的页面时, 标题并不会改变</li> <li>但是我们可以通过 js 来修改 <code><title></code> 的内容, <code>document.title = 'new title'</code> </li> <li>那么在 Vue 项目中, 我们可以通过<strong>生命周期</strong>的 <code>created</code> 函数来实现</li> <li>或调用 <strong>VueRouter</strong> 实例的 <code>.beforeEach()</code> 函数</li> </ul> <pre><code class="js">const routes = [ { path: "/about", component: About, meta: { title: "About" } } ]; /** * to: 即将要进入的目标的路由对象 * from: 当前导航即将要离开的路由对象 * next: 调用该方法后, 才能进入下一个钩子 */ router.beforeEach((to, from, next) => { document.title = to.matched[0].meta.title; next(); }); </code></pre> <h3>beforeEach 前置守卫</h3> <p>通过 VueRouter 实例对象调用<br> <code>beforeEach(function (to, from, next) {});</code></p> <ul> <li> <strong>to</strong>: 即将要进入的目标路由对象</li> <li> <strong>from</strong>: 当前导航即将要离开的路由对象</li> <li> <strong>next</strong>: 调用该方法后, 才能进入下一个路由对象</li> </ul> <h3>afterEach 后置守卫</h3> <p>通过 VueRouter 实例对象调用<br> <code>afterEach(function (to, from) {});</code></p> <ul> <li> <strong>to</strong>: 已经进入的目标路由对象</li> <li> <strong>from</strong>: 已经离开的路由对象</li> </ul> <h3>导航守卫补充</h3> <ul> <li>如果是后置钩子, 也就是 <strong>afterEach</strong>, 不需要主动调用 <strong>next() 函数</strong> </li> <li> <strong>beforEach</strong> 必须要调用 <strong>next() 函数</strong>, 不然就会终止, 不会往下执行</li> <li>上面使用的导航守卫, 被称之为全局守卫, 除此之外, 还有路由独享的守卫、组件内的守卫</li> </ul> <h2>$router 和 $route 的区别</h2> <ul> <li>$router == Vue-Router 实例对象</li> <li>$route == 当前处于活跃状态的路由</li> </ul> <p><strong>所有组件都继承自 Vue 的原型</strong>, 所以, 所有组件都拥有 <strong>$router和$route</strong></p> </article> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1737568070081241088"></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">你可能感兴趣的:(Vue-Router 的安装和使用)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1885016561937346560.htm" title="JAVA面试题目整理" target="_blank">JAVA面试题目整理</a> <span class="text-muted">qq~374327792</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>JAVA基础JAVA中的几种基本数据类型是什么,各自占用多少字节。String类能被继承吗,为什么。String,Stringbuffer,StringBuilder的区别。ArrayList和LinkedList有什么区别。讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,他们的执行顺序。用过哪些Map类,都有什么区别,HashMap是线程安全的</div> </li> <li><a href="/article/1885016562562297856.htm" title="18、智能驾驶芯片外部接口要求" target="_blank">18、智能驾驶芯片外部接口要求</a> <span class="text-muted">OEM的牛马DRE</span> <a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E9%A9%BE%E9%A9%B6%E6%8E%A7%E5%88%B6%E5%99%A8%E7%A1%AC%E4%BB%B6%E4%BB%8B%E7%BB%8D/1.htm">智能驾驶控制器硬件介绍</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>针对提出的关于产品关键芯片及硬件安全模块的技术保障要求:(1)产品的关键芯片应采取安全访问控制技术保障芯片的对外接口安全,保障系统不被非授权的进入为保障芯片的对外接口安全,防止系统被非授权进入,可以采取以下安全访问控制技术:访问控制保护:通过限制对芯片的访问权限来保护芯片的安全性。一种常见的访问控制方法是使用存储在芯片内部的安全密钥或密码来限制对芯片的访问。只有具有正确密钥或密码的用户才能访问芯片</div> </li> <li><a href="/article/1885015929629241344.htm" title="多线程与高并发(6)——CAS详解(包含ABA问题)" target="_blank">多线程与高并发(6)——CAS详解(包含ABA问题)</a> <span class="text-muted">李王家的翠花</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</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/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>一、乐观锁和悲观锁乐观锁和悲观锁都是用于解决并发场景下的数据竞争问题,不局限于某种编程语言或数据库。1、乐观锁:就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁的实现方式:主要有两种,一种是CAS机制,一种是版本号机制。(1)版本号机制:在数据中增加一个version字段用来表示该数据的版本号,每当数据被修改版本号就</div> </li> <li><a href="/article/1885015803233890304.htm" title="Java并发CAS中的ABA问题" target="_blank">Java并发CAS中的ABA问题</a> <span class="text-muted">fragrans</span> <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/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/1.htm">并发编程</a><a class="tag" taget="_blank" href="/search/CAS/1.htm">CAS</a><a class="tag" taget="_blank" href="/search/ABA/1.htm">ABA</a> <div>1.ABA产生的原因CAS会导致“ABA问题”。CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化。比如说一个线程1从内存位置V中取出A,这时候另一个线程2也从内存中取出A,并且线程2进行了一些操作将值变成了B,然后线程2又将V位置的数据变成了A,这时候线程1进行CAS操作发现内存中仍然是A,然后线程1操作成功。只关注开始和结尾,不关心中</div> </li> <li><a href="/article/1885015172528009216.htm" title="第05章 12 可视化热量流线图一例" target="_blank">第05章 12 可视化热量流线图一例</a> <span class="text-muted">捕鲸叉</span> <a class="tag" taget="_blank" href="/search/VTK%E7%BC%96%E7%A8%8B%E5%AD%A6%E4%B9%A0/1.htm">VTK编程学习</a><a class="tag" taget="_blank" href="/search/VTK/1.htm">VTK</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</a> <div>下面是一个使用VTK(VisualizationToolkit)和C++编写的示例代码,展示如何在一个厨房模型中可视化热量流线图,并按照热量传递速度着色显示。这个示例假设你已经安装了VTK库,并且你的开发环境已经配置好来编译和运行VTK程序。示例代码#include#include#include#include#include#include#include#include#include#in</div> </li> <li><a href="/article/1885015173471727616.htm" title="掌握Python Selenium:网页元素自动化定位实战指南" target="_blank">掌握Python Selenium:网页元素自动化定位实战指南</a> <span class="text-muted">jardonwang1</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>一、Selenium框架介绍Selenium是一个用于自动化web应用程序测试的工具,它直接运行在浏览器中,就像真实用户在操作一样。这个框架支持多种浏览器(包括Chrome、Firefox、Safari等),并且可以在多种操作系统(Windows、Linux、macOS等)上运行。Selenium的主要目标是使自动化测试变得简单,以支持开发人员和测试人员快速编写测试用例。以下是Selenium框架</div> </li> <li><a href="/article/1885014037486432256.htm" title="大sql如果不能加索引,还能怎么优化 —— hint学习" target="_blank">大sql如果不能加索引,还能怎么优化 —— hint学习</a> <span class="text-muted">ckh_user</span> <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/sql/1.htm">sql</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/oracle/1.htm">oracle</a> <div>大sql如果不能加索引,还能怎么优化当前问题:要执行简单查询sql【select字段1,字段2,……,字段40from表where条件groupby字段1,字段2,……,字段40】,但对应表里数据量大,且查询字段和groupby字段是由动态配置的,于是这里不方便加索引,普通查询耗时2个小时以上。解决方案:这里便用hint的并行解决,新的sql【select/*+parallel(8)*/字段1,字</div> </li> <li><a href="/article/1885014038371430400.htm" title="深入理解Java中的泛型编程" target="_blank">深入理解Java中的泛型编程</a> <span class="text-muted">egzosn</span> <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>深入理解Java中的泛型编程大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.泛型的基础概念在Java中,泛型编程是一种强大的编程范式,它允许我们编写可以操作各种类型的代码,而不必在每次使用时重复编写代码。泛型提供了类型安全性和代码重用的机制。1.1定义泛型类和方法登录后复制packagecn.juwatech.generics;publicclassBox{pri</div> </li> <li><a href="/article/1885013281496690688.htm" title="TensorBoard可视化工具支持哪些类型的图表?" target="_blank">TensorBoard可视化工具支持哪些类型的图表?</a> <span class="text-muted">alankuo</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>TensorBoard支持多种类型的图表,以下是详细介绍:标量图(Scalars)定义与用途:用于展示单个数值随时间(通常是训练步骤或迭代次数)的变化情况。在深度学习模型训练中,最常见的是损失函数值和评估指标(如准确率、精确率、召回率等)的变化曲线。示例:例如,在训练一个图像分类模型时,记录训练集和测试集上的损失函数值。通过标量图,可以直观地看到随着训练轮次(epochs)的增加,损失函数值是如何</div> </li> <li><a href="/article/1885012903489236992.htm" title="《企业网络安全架构与实战指南:从蓝队防御到零信任网络部署》" target="_blank">《企业网络安全架构与实战指南:从蓝队防御到零信任网络部署》</a> <span class="text-muted">Yimuzhizi</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</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/%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/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a> <div>项目:《企业网络安全架构与实战指南:从蓝队防御到零信任网络部署》姓名:飞花似梦Flydream日期:2024年11月21日目录蓝队基础企业网络架构高层管理IT管理中央技术团队安全部门企业管理技术信息安全管理成熟度模型(ISM3)安全职能安全团队成员典型企业网络分区模糊的边界外部攻击面身份管理识别Windows典型应用识别Linux典型应用识别WEB服务识别客户端设备身份和访问管理目录服务企业数据存</div> </li> <li><a href="/article/1885011894541021184.htm" title="Django ORM查询示例:获取主键为1的记录标题" target="_blank">Django ORM查询示例:获取主键为1的记录标题</a> <span class="text-muted">Leon_Jinhai_Sun</span> <a class="tag" taget="_blank" href="/search/django/1.htm">django</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/oracle/1.htm">oracle</a> <div>>>>Entry.objects.values_list('headline',flat=True).get(pk=1)'Firstentry'这段代码是使用Django框架的ORM(Object-RelationalMapping,对象关系映射)系统来查询数据库中的一条记录。下面是代码的详细解释:Entry.objects.values_list('headline',flat=True).ge</div> </li> <li><a href="/article/1885011895245664256.htm" title="Python 的打包神器 — Nuitka" target="_blank">Python 的打包神器 — Nuitka</a> <span class="text-muted">LinkSLA</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</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>一.pyinstaller和Nuitka使用感受1.1使用需求这次也是由于项目需要,要将python的代码转成exe的程序,在找了许久后,发现了2个都能对python项目打包的工具——pyintaller和nuitka。这2个工具同时都能满足项目的需要:隐藏源码。这里的pyinstaller是通过设置key来对源码进行加密的;而nuitka则是将python源码转成C++(这里得到的是二进制的py</div> </li> <li><a href="/article/1885011264770469888.htm" title="solidity基础 -- 可视范围" target="_blank">solidity基础 -- 可视范围</a> <span class="text-muted">第十六年盛夏.</span> <a class="tag" taget="_blank" href="/search/Solidity/1.htm">Solidity</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE%E6%90%AD%E5%BB%BA%E5%92%8C%E7%BB%B4%E6%8A%A4/1.htm">区块链搭建和维护</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/1.htm">智能合约</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/1.htm">智能合约</a> <div>在Solidity编程语言中,可视范围(Visibility)用于控制合约中变量和函数的访问权限。这对于确保合约的安全性、模块化以及代码的可维护性至关重要。Solidity提供了四种可视范围修饰符:public、private、external和internal。以下将结合给定代码进行详细介绍。注意:使用继承时请确保代码的正确性,以防丢失个人财产,在这里友情提示您,不要复制来源不明的solidit</div> </li> <li><a href="/article/1885011138589028352.htm" title="Python中selenium的玩法,小朋友看了都说学会了" target="_blank">Python中selenium的玩法,小朋友看了都说学会了</a> <span class="text-muted">2401_87361571</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>2.selenium的作用和工作原理利用浏览器原生的API,封装成一套更加面向对象的SeleniumWebDriverAPI,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)webdriver本质是一个web-server,对外提供webapi,其中封装了浏览器的各种功能不同的浏览器使用各自不同的webdriver3.selenium的安装以及</div> </li> <li><a href="/article/1885010760313139200.htm" title="数据库用户管理" target="_blank">数据库用户管理</a> <span class="text-muted">比特知识工坊</span> <a class="tag" taget="_blank" href="/search/MySQL%E4%B8%93%E6%A0%8F/1.htm">MySQL专栏</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/adb/1.htm">adb</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>数据库用户管理1.创建用户MySQL在安装是,会默认创建一个名位root的用户,该用户拥有超级权限,可以控制整个MySQL服务器。在对MySQL的日常管理和操作中,通常创建一些具有适当权限的用户,尽可能的不用或少用root登录系统,以此来确保数据的安全访问。可以使用createuse语句创建用户,并设置相应密码:createuser用户[indentifiedby[password]'passwo</div> </li> <li><a href="/article/1885010634026840064.htm" title="实验四 XML" target="_blank">实验四 XML</a> <span class="text-muted">无尽罚坐的人生</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>实验四XML目的:1、安装和使用XML的开发环境2、认识XML的不同类型3、掌握XML文档的基本语法4、了解DTD的作用5、掌握DTD的语法6、掌握Schema的语法实验过程:1、安装XML的编辑器,可以选择以下之一a)XMLSpyb)VScode,Vscode中安装XML插件2、给定一个XML文档test.xmltom24Python1861111111118622222222sammy25C+</div> </li> <li><a href="/article/1885010507551797248.htm" title="实验九 视图的使用" target="_blank">实验九 视图的使用</a> <span class="text-muted">无尽罚坐的人生</span> <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/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>实验九视图的使用一、实验目的1.熟悉视图的操作。二、实验内容及要求用SQL语句完成下列功能。使用数据库为SCHOOL数据库。1.建立一视图View_CSTeacher,列出计算机系各个老师的资料(姓名、性别、职称)。createviewView_CSTeacher(姓名,性别,职称)asselectteac_id,teac_sex,techpostfromteachert,deparmentdwh</div> </li> <li><a href="/article/1885010503479128064.htm" title="C#如何通过使用XpsToPdf库来转换xps为pdf文件" target="_blank">C#如何通过使用XpsToPdf库来转换xps为pdf文件</a> <span class="text-muted">SunkingYang</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/C%23%E5%85%A5%E9%97%A8%E7%BA%A7%E7%9F%A5%E8%AF%86/1.htm">C#入门级知识</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/xps/1.htm">xps</a><a class="tag" taget="_blank" href="/search/XpsToPdf/1.htm">XpsToPdf</a><a class="tag" taget="_blank" href="/search/%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/1.htm">使用方法</a><a class="tag" taget="_blank" href="/search/%E8%BD%AC%E6%8D%A2/1.htm">转换</a> <div>文章目录英文描述中文描述XpsToPdf库地址调用方法:英文描述OutputtoPDFinWPF(forfree!)TherearetwogeneralstrategiestooutputtingtoaPDFinWPF.OneistooutputdirectlytoaPDFwhichrequiresyoutraverseavisualorflowdocumentandtranslatetoaPDF</div> </li> <li><a href="/article/1885010377096359936.htm" title="Java重要面试名词整理(二十三):DDD架构" target="_blank">Java重要面试名词整理(二十三):DDD架构</a> <span class="text-muted">正在绘制中</span> <a class="tag" taget="_blank" href="/search/Java%E9%9D%A2%E8%AF%95/1.htm">Java面试</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>文章目录DDD如何应对软件核心复杂性?技术主动理解业务“刚刚好”解决问题。概念通用语言-定义上下文的含义领域和子域-确定逻辑边界领域子域限界上下文(BoundedContext)-定义领域边界的利器上下文映射图(ContextMapping)-集成三种集成方式上下文映射的种类DDD的战术设计实体和值对象实体(Entity)值对象(ValueObject)聚合和聚合根聚合聚合根领域事件(Domain</div> </li> <li><a href="/article/1885007607324798976.htm" title="SQLite 附加数据库" target="_blank">SQLite 附加数据库</a> <span class="text-muted">zhang.fang</span> <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/sqlite/1.htm">sqlite</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite的ATTACHDATABASE语句是用来选择一个特定的数据库,使用该命令后,所有的SQLite语句将在附加的数据库下执行。语法SQLite的ATTACHDATABASE语句的基本语法如下:ATTACHDATABASEfile_nameASdatabase_name;如果数据库尚未被创建,上面的命令将创建一个数据库,</div> </li> <li><a href="/article/1885007480598097920.htm" title="Air监听代码神器" target="_blank">Air监听代码神器</a> <span class="text-muted">Cas狗</span> <a class="tag" taget="_blank" href="/search/Go%E8%AF%AD%E8%A8%80%E5%B8%B8%E7%94%A8%E5%BC%80%E5%8F%91%E7%BB%84%E4%BB%B6/1.htm">Go语言常用开发组件</a><a class="tag" taget="_blank" href="/search/Go%E8%AF%AD%E8%A8%80/1.htm">Go语言</a><a class="tag" taget="_blank" href="/search/Gin%E6%A1%86%E6%9E%B6/1.htm">Gin框架</a><a class="tag" taget="_blank" href="/search/Air/1.htm">Air</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%97%B6%E7%9B%91%E5%90%AC/1.htm">实时监听</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E6%95%88%E7%8E%87/1.htm">开发效率</a> <div>Air监听代码神器一、作用在使用Go语言的gin框架在本地做开发调试的时候,经常需要在变更代码之后频繁的按下Ctrl+C停止程序并重新编译再执行,这样就不是很方便。二、安装AirGogoget-ugithub.com/cosmtrek/airMaccurl-fLoairhttps://git.io/darwin_airLinuxcurl-fLoairhttps://git.io/linux_air</div> </li> <li><a href="/article/1885007354202746880.htm" title="python期末复习——python知识要点" target="_blank">python期末复习——python知识要点</a> <span class="text-muted">敲代码痛苦吗?</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>1、Python语言的特点及书写规范。特点:Python语言是一种面向对象的解释型语言1、解释型,开源,简单,易学,免费2.可扩展性,丰富的库,可移植性,面向对象3.规范的代码,可读性较强书写规范:缩进;注释;每个import只导入一个模块,尽量避免一次导入多个模块;语句太长可以在行尾使用续行符’’’’,来表示下面紧接的一行仍然属于当前的语句,也可以使用括号来包含多行内容;使用必要的空格和空行增强</div> </li> <li><a href="/article/1885007227979362304.htm" title="《攻克语言密码:教AI理解隐喻与象征》" target="_blank">《攻克语言密码:教AI理解隐喻与象征》</a> <span class="text-muted">程序猿阿伟</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>在自然语言处理(NLP)领域,让计算机理解人类语言中的隐喻和象征,是迈向更高语言理解水平的关键一步。从“时间就是金钱”这样的概念隐喻,到文学作品里象征着坚韧的“寒梅”,这些非字面意义的表达方式承载着丰富的情感与文化内涵。然而,对于基于规则和数据驱动的NLP模型来说,理解隐喻和象征一直是块难啃的硬骨头。理解隐喻与象征:人类语言的独特魅力隐喻和象征作为常见的修辞手法,为语言表达增添了生动性与深度。隐喻</div> </li> <li><a href="/article/1885006975763279872.htm" title="golang 性能分析(pprof)" target="_blank">golang 性能分析(pprof)</a> <span class="text-muted">_萤火</span> <a class="tag" taget="_blank" href="/search/Golang/1.htm">Golang</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a> <div>采样方式net/http/pprof适用于程序长期运行的线上服务底层也是调用的runtime/pprof提供的函数,封装成接口对外提供网络访问如果是使用了HTTP包的路由,则只需要import_"net/http/pprof"即可此时会自动把相关路由路径注册到了默认的http.DefaultServeMux上packagepproffuncinit(){http.HandleFunc("/debu</div> </li> <li><a href="/article/1885006345225170944.htm" title="力扣刷题——第一题 一维数组的动态和" target="_blank">力扣刷题——第一题 一维数组的动态和</a> <span class="text-muted">姬公子521</span> <a class="tag" taget="_blank" href="/search/%E5%8A%9B%E6%89%A3%E5%88%B7%E9%A2%98%E4%B8%93%E6%A0%8F/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/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/1.htm">动态规划</a> <div>力扣刷题第一题一维数组的动态和第一题一维数组的动态和给你一个数组nums。数组「动态和」的计算公式为:runningSum[i]=sum(nums[0]…nums[i])。请返回nums的动态和。示例1:输入:nums=[1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为[1,1+2,1+2+3,1+2+3+4]。来源:力扣(LeetCode)链接:https://leetcode.</div> </li> <li><a href="/article/1885006345988534272.htm" title="python系列:如何在FastAPI中使用Pydantic的BaseModel上传文件和字典列表?" target="_blank">python系列:如何在FastAPI中使用Pydantic的BaseModel上传文件和字典列表?</a> <span class="text-muted">坦笑&&life</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/fastapi/1.htm">fastapi</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>如何在FastAPI中使用Pydantic的BaseModel上传文件和字典列表?如何在FastAPI中使用Pydantic的BaseModel上传文件和字典列表?问题:回答:虽然`Pydantic模型`过去不允许使用`Query字段`,并且必须在单独的依赖类中实现查询`parameter-parsing`,如本答案和本答案所示,但这一点最近发生了变化,因此,可以使用`BaseModel类`将`Q</div> </li> <li><a href="/article/1885005337522663424.htm" title="Formality:黑盒(black box)" target="_blank">Formality:黑盒(black box)</a> <span class="text-muted">日晨难再</span> <a class="tag" taget="_blank" href="/search/Synopsys/1.htm">Synopsys</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Formality/1.htm">Formality</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%97IC/1.htm">数字IC</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">硬件工程</a> <div>相关阅读Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482简介在使用Formality时,黑盒(blackbox)的概念很重要,指的是一个其功能未知的设计。黑盒通常用于设计中不可综合的组件,包括RAM、ROM、模拟电路和硬核IP等。它也是需要匹配的对象之一,必须确</div> </li> <li><a href="/article/1885005210749825024.htm" title="Python使用FastApi开发接口" target="_blank">Python使用FastApi开发接口</a> <span class="text-muted">冉成未来</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/fastapi/1.htm">fastapi</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>文章目录python开发web框架简介FastApi安装安装依赖包代码编写创建数据库连接模块database.py创建数据库实体模块model.py创建实体类模型模块schemas.py创建操作数据库模块curd.py创建接收请求模块main.py创建运行模块run.py项目运行编写完以上代码,通过以下命令进行项目启动查看项目接口pyinstalle打包FastApi项目项目通过uvicorn运行</div> </li> <li><a href="/article/1885004580996050944.htm" title="6.3、OTN 保护" target="_blank">6.3、OTN 保护</a> <span class="text-muted">费</span> <a class="tag" taget="_blank" href="/search/%E5%85%89%E5%90%8C%E6%AD%A5%E6%95%B0%E5%AD%97%E4%BC%A0%E9%80%81/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/%E4%BF%A1%E6%81%AF%E4%B8%8E%E9%80%9A%E4%BF%A1/1.htm">信息与通信</a><a class="tag" taget="_blank" href="/search/%E4%BC%A0%E9%80%81%E7%BD%91/1.htm">传送网</a> <div>一、光线路保护图示:图中上方部分展示了光线路保护的结构。可以看到有工作通道和保护通道,两端都有OLP(光线路保护)模块。原理:业务信号在工作通道传输,同时有一个独立的保护通道作为备份。当工作通道出现光纤失效等故障时,OLP模块会自动将业务切换到保护通道,实现业务的不间断传输。特点:适用组网:适用于链型组网,这种组网方式结构相对简单,成本较低。保护范围:主要针对线路光纤失效进行保护,能够有效应对因光</div> </li> <li><a href="/article/1885003718957527040.htm" title="Nginx---已安装了nginx,如何启用http2.0协议" target="_blank">Nginx---已安装了nginx,如何启用http2.0协议</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a> <div>需求生产环境的nginx当初没有编译启用ngx_http_v2_module模块,因此网站不能启用http2.0协议,需要重新启用一下。现在有两个目录,分别是nginx的源码目录和nginx的安装目录,如图所示:操作流程获取安装目录中的nginx都已经启用了哪些模块;在源码目录中重新编译nginx,编译时要添加已启用的模块和ngx_http_v2_module模块;将编译生成的nginx文件,拷贝</div> </li> <li><a href="/article/66.htm" title="项目中 枚举与注解的结合使用" target="_blank">项目中 枚举与注解的结合使用</a> <span class="text-muted">飞翔的马甲</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a> <div>前言:版本兼容,一直是迭代开发头疼的事,最近新版本加上了支持新题型,如果新创建一份问卷包含了新题型,那旧版本客户端就不支持,如果新创建的问卷不包含新题型,那么新旧客户端都支持。这里面我们通过给问卷类型枚举增加自定义注解的方式完成。顺便巩固下枚举与注解。 一、枚举 1.在创建枚举类的时候,该类已继承java.lang.Enum类,所以自定义枚举类无法继承别的类,但可以实现接口。 </div> </li> <li><a href="/article/193.htm" title="【Scala十七】Scala核心十一:下划线_的用法" target="_blank">【Scala十七】Scala核心十一:下划线_的用法</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>下划线_在Scala中广泛应用,_的基本含义是作为占位符使用。_在使用时是出问题非常多的地方,本文将不断完善_的使用场景以及所表达的含义   1. 在高阶函数中使用 scala> val list = List(-3,8,7,9) list: List[Int] = List(-3, 8, 7, 9) scala> list.filter(_ > 7) r</div> </li> <li><a href="/article/320.htm" title="web缓存基础:术语、http报头和缓存策略" target="_blank">web缓存基础:术语、http报头和缓存策略</a> <span class="text-muted">dalan_123</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a> <div>对于很多人来说,去访问某一个站点,若是该站点能够提供智能化的内容缓存来提高用户体验,那么最终该站点的访问者将络绎不绝。缓存或者对之前的请求临时存储,是http协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这是受控于对该内容所声明的缓存策略。接下来将讨web内容缓存策略的基本概念,具体包括如如何选择缓存策略以保证互联网范围内的缓存能够正确处理的您的内容,并谈论下</div> </li> <li><a href="/article/447.htm" title="crontab 问题" target="_blank">crontab 问题</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/crontab/1.htm">crontab</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a> <div>  一: 0481-079   Reached   a   symbol   that   is   not   expected.   背景: */5   *   *   *   *  /usr/IBMIHS/rsync.sh  </div> </li> <li><a href="/article/574.htm" title="让tomcat支持2级域名共享session" target="_blank">让tomcat支持2级域名共享session</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/session/1.htm">session</a> <div>tomcat默认情况下是不支持2级域名共享session的,所有有些情况下登陆后从主域名跳转到子域名会发生链接session不相同的情况,但是只需修改几处配置就可以了。 打开tomcat下conf下context.xml文件 找到Context标签,修改为如下内容 如果你的域名是www.test.com <Context sessionCookiePath="/path&q</div> </li> <li><a href="/article/701.htm" title="web报表工具FineReport常用函数的用法总结(数学和三角函数)" target="_blank">web报表工具FineReport常用函数的用法总结(数学和三角函数)</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>  ABS ABS(number):返回指定数字的绝对值。绝对值是指没有正负符号的数值。 Number:需要求出绝对值的任意实数。 示例: ABS(-1.5)等于1.5。 ABS(0)等于0。 ABS(2.5)等于2.5。   ACOS ACOS(number):返回指定数值的反余弦值。反余弦值为一个角度,返回角度以弧度形式表示。 Number:需要返回角</div> </li> <li><a href="/article/828.htm" title="linux 启动java进程 sh文件" target="_blank">linux 启动java进程 sh文件</a> <span class="text-muted">墙头上一根草</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/jar/1.htm">jar</a> <div>#!/bin/bash #初始化服务器的进程PId变量 user_pid=0; robot_pid=0; loadlort_pid=0; gateway_pid=0; ######### #检查相关服务器是否启动成功 #说明: #使用JDK自带的JPS命令及grep命令组合,准确查找pid #jps 加 l 参数,表示显示java的完整包路径 #使用awk,分割出pid </div> </li> <li><a href="/article/955.htm" title="我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory" target="_blank">我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Spring+3+%E7%B3%BB%E5%88%97/1.htm">Spring 3 系列</a> <div>如何使用ApplicationContext替换BeanFactory? package onlyfun.caterpillar.device; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import</div> </li> <li><a href="/article/1082.htm" title="Linux 内存使用方法详细解析" target="_blank">Linux 内存使用方法详细解析</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a><a class="tag" taget="_blank" href="/search/Linux%E5%86%85%E5%AD%98%E8%A7%A3%E6%9E%90/1.htm">Linux内存解析</a> <div>来源 http://blog.jobbole.com/45748/ 我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。 Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用</div> </li> <li><a href="/article/1209.htm" title="数据库的单表查询常用命令及使用方法(-)" target="_blank">数据库的单表查询常用命令及使用方法(-)</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2/1.htm">单表查询</a> <div>    创建数据库;       --建表 create table bloguser(username varchar2(20),userage number(10),usersex char(2));       创建bloguser表,里面有三个字段     &nbs</div> </li> <li><a href="/article/1336.htm" title="多线程基础知识" target="_blank">多线程基础知识</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</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/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a> <div>一.进程和线程 进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序就是一个进程。 “多任务”:指操作系统能同时运行多个进程(程序)。如WINDOWS系统可以同时运行写字板程序、画图程序、WORD、Eclipse等。 线程:是进程内部单一的一个顺序控制流。 线程和进程 a.       每个进程都有独立的</div> </li> <li><a href="/article/1463.htm" title="fastjson简单使用实例" target="_blank">fastjson简单使用实例</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a> <div>一.简介         阿里巴巴fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库;包括“序列化”和“反序列化”两部分,它具备如下特征:     </div> </li> <li><a href="/article/1590.htm" title="【RPC框架Burlap】Spring集成Burlap" target="_blank">【RPC框架Burlap】Spring集成Burlap</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。 这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成  </div> </li> <li><a href="/article/1717.htm" title="【Mahout一】基于Mahout 命令参数含义" target="_blank">【Mahout一】基于Mahout 命令参数含义</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Mahout/1.htm">Mahout</a> <div>1. mahout seqdirectory   $ mahout seqdirectory --input (-i) input Path to job input directory(原始文本文件). --output (-o) output The directory pathna</div> </li> <li><a href="/article/1844.htm" title="linux使用flock文件锁解决脚本重复执行问题" target="_blank">linux使用flock文件锁解决脚本重复执行问题</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/linux+lock%E3%80%80%E9%87%8D%E5%A4%8D%E6%89%A7%E8%A1%8C/1.htm">linux lock 重复执行</a> <div>linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。 例如: <? //  test .php </div> </li> <li><a href="/article/1971.htm" title="java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字" target="_blank">java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class OcuppyMoreThanHalf { /** * Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字 * two solutions: * 1.O(n) * see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性 * 2.O(nlogn) * 排序。中间</div> </li> <li><a href="/article/2098.htm" title="linux 系统相关命令" target="_blank">linux 系统相关命令</a> <span class="text-muted">candiio</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>系统参数 cat /proc/cpuinfo  cpu相关参数 cat /proc/meminfo 内存相关参数 cat /proc/loadavg 负载情况 性能参数 1)top M:按内存使用排序 P:按CPU占用排序 1:显示各CPU的使用情况 k:kill进程 o:更多排序规则 回车:刷新数据 2)ulimit ulimit -a:显示本用户的系统限制参</div> </li> <li><a href="/article/2225.htm" title="[经营与资产]保持独立性和稳定性对于软件开发的重要意义" target="_blank">[经营与资产]保持独立性和稳定性对于软件开发的重要意义</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/1.htm">软件开发</a> <div>      一个软件的架构从诞生到成熟,中间要经过很多次的修正和改造       如果在这个过程中,外界的其它行业的资本不断的介入这种软件架构的升级过程中           那么软件开发者原有的设计思想和开发路线</div> </li> <li><a href="/article/2352.htm" title="在CentOS5.5上编译OpenJDK6" target="_blank">在CentOS5.5上编译OpenJDK6</a> <span class="text-muted">Cwind</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/OpenJDK/1.htm">OpenJDK</a> <div>几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。 0. OpenJDK介绍 OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点: 1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是</div> </li> <li><a href="/article/2479.htm" title="java乱码问题" target="_blank">java乱码问题</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/java%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98/1.htm">java乱码问题</a><a class="tag" taget="_blank" href="/search/js%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">js中文乱码</a> <div>swfupload上传文件参数值为中文传递到后台接收中文乱码     在js中用setPostParams({"tag" : encodeURI( document.getElementByIdx_x("filetag").value,"utf-8")}); 然后在servlet中String t</div> </li> <li><a href="/article/2606.htm" title="cygwin很多命令显示command not found的解决办法" target="_blank">cygwin很多命令显示command not found的解决办法</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/cygwin/1.htm">cygwin</a> <div>cygwin很多命令显示command not found的解决办法   修改cygwin.BAT文件如下 @echo off D: set CYGWIN=tty notitle glob set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\us</div> </li> <li><a href="/article/2733.htm" title="[介绍]从 Yii 1.1 升级" target="_blank">[介绍]从 Yii 1.1 升级</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a> <div>2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。 如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"入门篇"开始读起。 请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发</div> </li> <li><a href="/article/2860.htm" title="Linux SSH免登录配置总结" target="_blank">Linux SSH免登录配置总结</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/ssh-keygen/1.htm">ssh-keygen</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E5%85%8D%E7%99%BB%E5%BD%95%E8%AE%A4%E8%AF%81/1.htm">Linux SSH免登录认证</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E4%BA%92%E4%BF%A1/1.htm">Linux SSH互信</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2187265 一、原理      我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。      生成公钥与私钥有两种加密方式,第一种是</div> </li> <li><a href="/article/2987.htm" title="手势滑动销毁Activity" target="_blank">手势滑动销毁Activity</a> <span class="text-muted">gundumw100</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>老是效仿ios,做android的真悲催! 有需求:需要手势滑动销毁一个Activity 怎么办尼?自己写? 不用~,网上先问一下百度。 结果: http://blog.csdn.net/xiaanming/article/details/20934541 首先将你需要的Activity继承SwipeBackActivity,它会在你的布局根目录新增一层SwipeBackLay</div> </li> <li><a href="/article/3114.htm" title="JavaScript变换表格边框颜色" target="_blank">JavaScript变换表格边框颜色</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>效果查看:http://hovertree.com/texiao/js/2.htm代码如下,保存到HTML文件也可以查看效果: <html> <head> <meta charset="utf-8"> <title>表格边框变换颜色代码-何问起</title> </head> <body&</div> </li> <li><a href="/article/3241.htm" title="Kafka Rest : Confluent" target="_blank">Kafka Rest : Confluent</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/confluent/1.htm">confluent</a> <div>最近拿到一个kafka rest的需求,但kafka暂时还没有提供rest api(应该是有在开发中,毕竟rest这么火),上网搜了一下,找到一个Confluent Platform,本文简单介绍一下安装。 这里插一句,给大家推荐一个九尾搜索,原名叫谷粉SOSO,不想fanqiang谷歌的可以用这个。以前在外企用谷歌用习惯了,出来之后用度娘搜技术问题,那匹配度简直感人。 环境声明:Ubu</div> </li> <li><a href="/article/3368.htm" title="Calender不是单例" target="_blank">Calender不是单例</a> <span class="text-muted">men4661273</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/Calender/1.htm">Calender</a> <div>         在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。 测试: Calendar c1 = </div> </li> <li><a href="/article/3495.htm" title="线程内存和主内存之间联系" target="_blank">线程内存和主内存之间联系</a> <span class="text-muted">qifeifei</span> <a class="tag" taget="_blank" href="/search/java+thread/1.htm">java thread</a> <div>1, java多线程共享主内存中变量的时候,一共会经过几个阶段,    lock:将主内存中的变量锁定,为一个线程所独占。   unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。   read:将主内存中的变量值读到工作内存当中。   load:将read读取的值保存到工作内存中的变量副本中。   </div> </li> <li><a href="/article/3622.htm" title="schedule和scheduleAtFixedRate" target="_blank">schedule和scheduleAtFixedRate</a> <span class="text-muted">tangqi609567707</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/schedule/1.htm">schedule</a> <div>原文地址:http://blog.csdn.net/weidan1121/article/details/527307 import java.util.Timer;import java.util.TimerTask;import java.util.Date; /** * @author vincent */public class TimerTest {  </div> </li> <li><a href="/article/3749.htm" title="erlang 部署" target="_blank">erlang 部署</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a> <div>1.如果在启动节点的时候报这个错 : {"init terminating in do_boot",{'cannot load',elf_format,get_files}} 则需要在reltool.config中加入 {app, hipe, [{incl_cond, exclude}]},     2.当generate时,遇到: ERROR</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>