项 目 最终的效果如图所示 ,最终效果涉及 到 6 个图表 , 5 种图表类型 , 它们分别是折线图 , 柱状图 , 地图 , 散点图 , 饼图.。每个图表的数据都是从后端推送到前端来的 , 不过在项目的初期 , 我们会先使用 ajax 由前端主动获取数 据 , 后续会使用 WebSocket 进行改造。整个项目的架构 是 基于 Vue 的 , 所以我们需要创建 Vue 项目 , 然后在 Vue 项目中开发各个图表组件 。
1. 前端项目的准备
1.1. vue - c 1 i 脚手架创建项 目
1.1. 1 脚手架环境的安装
在全局环境中安装 vue - cli 脚手 架
npm install -g @vue/cli
1 . 1.2. 工程的创建
使用命令行执 行
vue create vision
具 体的配置项如下 :
手动选择特性
集成 Router , Vuex , CSS Pre - processors
是否选用历史模式的路由
选择 Less 作 为 CSS 的预处理器
选择 ESLint 的配置
什 么时候进行 Lint 提示
如何存放 Babel , ESLint 等配置文 件
是 否保存以上配置以便下次创建项目时使用
配 置选择完之后 , 就开始创建项目了 , 这个过程需要一些时间 :
当项目就创建完成了 , 会看到这个提示
运行默认的项 目
cd vision
npm run serve
1.1.3. 删除无关代 码
将目录使用 vscode 打开
修 改 App . vue 中的代码 , 将布局和样式删除 , 变成如下代码 :
< template >
< div id = " app " >
< router - view / >
div >
< / template >
< style lang = " less " >
< / style >
删除 components / HelloWorld . vue 这个文件
删除 views / About . vue 和 views / Home . vue 这两个文 件
修改 router / index . js 中的代码 , 去除路由配置和 Home 组件导入的代码
import Vue from ' vue '
import VueRouter from ' vue - router '
Vue . use ( VueRouter )
const routes = []
const router = new VueRouter ({
r outes
} )
export default router
1 .2. 项目的基本配置
在项目根目录下创建 vue . config . js 文件
在文件中增加代码
// 使 用 vue - cli 创建出来的 vue 工程 , Webpack 的配置是被隐藏起来了的
// 如果想覆盖 Webpack 中的默认配置 , 需要在项目的根路径下增加 vue . config . js 文件
module . exports = {
devServer : {
port : 8999 , // 端口号的配置
open : true // 自动打开浏览 器
}
}
1.3. 全局 echarts 对象
1.3.1. 引入 echarts 包
将资料文件夹中的 static 目录复制到 public 目录之 下
在 public / index . html 文件中引入 echarts . min . js 文件
1 .3.2. 挂载到 Vue 原型上
在 src / main . js 文件中挂 载
由 于在 index . html 中已经通过 script 标签引入了 echarts . js 文件夹 , 故在 window 全局对象中是 存在 echarts 全局对象 , 将其挂载到 Vue 的原型对象
..... .
// 将全局 echarts 对象挂载到 Vue 的原型对象上
Vue . prototype . $ echarts = window . echarts
..... .
1 .3.3. 使用全局 echarts 对象
在其他组件中使用
1 .4. axios 的处理
1.4.1. 安装 axios 包
1 .4.2. 封装 axios 对象
在 src / main . js 文件中配置 axios 并且挂载到 Vue 的原型对象上
..... .
import axios from ' axios '
axios . defaults . baseURL = ' http ://127.0.0.1:8888/ api /'
/ / 将 axios 挂载到 Vue 的原型对象上
Vue . prototype . $ http = axios
..... .
1 .4.3. 使用 axios 对象
在其他组件中使用
this.$http
2. 单独图表组件 的开发
在 项目的初期 , 我们会每个图表单独的进行开发 , 最后再将所有的图表合并到一个界面中 . 在 单独开发每个图表的时候 , 一个图表会用一个单独的路径进行全屏展示 , 他们分别是 :
商家销售统 计 http ://127.0.0.1:8999/# / sellerpage
销量趋势分析http ://127.0.0.1:8999/# / trendpage
商家地图分 布http :/ / 127.0.0.1:8999/#/ mappage
地区销量排行http :// 127.0.0.1:8999/#/ rankpage
热销商品占 比http :/ / 127.0.0.1:8999/#/ hotpage
库存销量分析http ://127.0.0.1:8999/# / stockpage
2 .1. 商家销量排行
最 终的效果如下图所示 :
2 .1.1. 组件结构设计
在 src / components / 目录下建立 Seller . vue , 这个组件是真实展示图表的组件
给外层 div 增加类样式 com - container
建立一个显示图表的 div 元素
给新增的这个 div 增加类样式 com - chart
在 src / views / 目录下建立 SellerPage . vue , 这个组件是对应于路由 / seller 而展示的
给外层 div 元素增加样式 com - page
在 SellerPage 中引入 Seller 组件 , 并且注册和使用
< !-- 这个组件是对应于路由规则中 / seller 这条路径的
在这个组件中 , 需要展示 Seller . vue 这个组件
Seller . vue 才 是真正显示图表的组件
- - >
< template >
< div class = " com - page " >
< seller > seller >
div >
< / template >
< script >
import Seller from '@/ components / Seller '
export default {
data () {
return {}
} ,
methods : {} ,
components : {
seller : Seller
}
}
< / script >
< style lang = ' less ' scoped >
< / style >
在 src / views / 目录下建立 SellerPage . vue , 这个组件是对应于路由 / seller 而展示的
给外层 div 元素增加样式 com - page
在 SellerPage 中引入 Seller 组件 , 并且注册和使用
< !-- 这个组件是对应于路由规则中 / seller 这条路径的
在这个组件中 , 需要展示 Seller . vue 这个组件
Seller . vue 才 是真正显示图表的组件
- - >
< template >
< div class = " com - page " >
< seller > seller >
div >
< / template >
< script >
import Seller from '@/ components / Seller '
export default {
data () {
return {}
} ,
methods : {} ,
components : {
seller : Seller
}
}
< / script >
< style lang = ' less ' scoped >
< / style >
增 加路由规则 , 在 src / router / index . js 文件中修改
..... .
import SellerPage from '@/ views / SellerPage '
..... .
const routes = [
{
path : '/ sellerpage ' ,
component : SellerPage
}
]
新建 src / assets / css / global . less 增加宽高样式
原则就是将所有的容器的宽度和高度设置为占满父容器
html,
body,
#app {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.com-page {
width: 100%;
height: 100%;
overflow: hidden;
}
.com-container {
width: 100%;
height: 100%;
overflow: hidden;
}
.com-chart {
width: 100%;
height: 100%;
overflow: hidden;
}
在 main.js 中引入样式
import './ assets / css / global . less '
打开浏 览 器 , 输入 http ://127.0.0.1:8999/#/ sellerpage 看 Seller 组件是否能够显示
2.1.2. 图表 Se ller . vue 基本功能的实 现
1. 在 mounted 生命周期中初始化 echartsInstance 对象
2. 在 mounted 中获取服务器的数据
3. 将获取到的数据设置到图表上
4. 拆分配置项 option
初始化配置项
拥有数据之后的配置项
2 . 1.3. 分页动画的实现
数据的处理 , 每 5 个元素显示一 页
数据的处理
动画的启动和停止
鼠标事件的处理
public/index.html 中引入
主 题的指定 , 在初始化 echarts 实例对象 的时候指定
src / components / Seller . vue
边框圆角的设 置
src / assets / css / global . less
canvas {
border - radius : 20 px ;
}
其 他 图表样式的配置
标题的位置和颜色
const initOption = {
title : {
text : ' ▎ 商家销量排行 ' ,
left : 20 ,
top : 20 ,
textStyle : {
textStyle : {
" color " : "# fff "
}
}
} ,
坐 标轴的大小
const initOption = {
..... .
grid : {
top : '20%' ,
left : '3%' ,
right : '6%' ,
bottom : '3%' ,
containLabel : true
} ,
工 具提示和背景
const initOption = {
..... .
tooltip : {
trigger : ' axis ' ,
axisPointer : {
type : ' line ' ,
z : 0 ,
lineStyle : {
width : 66 ,
color : '#2 D 3443'
}
}
} ,
const initOption = {
..... .
series : [
{
..... .
label : {
show : true ,
position : ' right ' ,
textStyle : {
color : '# fff '
}
} ,
柱宽度和柱圆角的实现
const initOption = {
..... .
series : [
{
..... .
barWidth : 66 ,
itemStyle : {
barBorderRadius : [ 0 , 33 , 33 , 0 ]
}
}
]
}
柱颜色渐变的实现
线 性渐变可以通过 LinearGradient 进行实现
LinearGradient 需要 传 递 5 个参数 , 前四个代表两个点的相对位置 , 第五个参数代表颜色变化 的 范围
0, 0, 1, 0 代表的是从左往右的方向
const initOption = {
series: [
{
......
itemStyle: {
barBorderRadius: [0, 33, 33, 0],
color: new this.$echarts.graphic.LinearGradient(0, 0, 1,
0, [
{
offset: 0,
color: '#5052EE'
},
{
offset: 1,
color: '#AB6EE5'
}
])
}
}
]
2 .1.5. 分辨率适配
对窗口大小变化的事件进行监听
mount ed 时候监听
mounted () {
this . initChart ()
this . getData ( )
window . addEventListener ( ' resize ' , this . screenAdapter )
}
组 件 销毁时取消监听
destroyed () {
clearInterval ( this . timerId )
// 在组件销毁的时候 , 需要将监听器 取消掉
window . removeEventListener ( ' resize ' , this . screenAdapter )
} ,
获取图表容器的宽度计算字体大小
// 当浏览器的大小发生变化的时候 , 会调用的方法 , 来完成屏幕的适配
screenAdapter () {
/ / console . log ( this .$ refs . seller _ ref . offsetWidth )
const titleFontSize = this . $ refs . seller _ ref . offsetWidth / 100 * 3.6
2.1.6完整代码Seller.vue
2 .2. 销量趋势分析
最终的效果如下 :
2 . 2.1. 代码环境的准备
TrendPage . vue
Trend . vue
router / index . js
......
import TrendPage from '@/views/TrendPage'
......
const routes = [
......
{
path: '/trendpage',
component: TrendPage
}
]
......
async getData () {
// 获取服务器的数据 , 对 this . allData 进行赋 值之后 , 调用 updateChart 方法更新图表
const { data : ret } = await this . $ http . get ( ' trend ' )
this . allData = ret
this . updateChart ()
}
数据的处理
updateChart () {
// x轴的数据
const timeArrs = this.allData.common.month
// y轴的数据 , 暂时先取出map这个节点的数据
// map代表地区销量趋势
// seller代表商家销量趋势
// commodity代表商品销量趋势
const valueArrs = this.allData.map.data
// 图表数据 , 一个图表中显示5条折线图
const seriesArr = valueArrs.map((item, index) => {
return {
type: 'line', // 折线图
name: item.name,
data: item.data,
}
})
const dataOption = {
xAxis: {
data: timeArrs
},
legend: {
data: legendArr
},
series: seriesArr
}
this.chartInstance.setOption(dataOption)
}
初始化配置
const initOption = {
xAxis : {
type : ' category ' ,
boundaryGap : false
} ,
yAxis : {
type : ' value '
}
}
堆 叠图效果
要 实现堆叠图的效果 , series 下的每个对象都需要配置上相同的 stack 属性
updateChart () {
const timeArrs = this . allData . common . month
const valueArrs = this . allData . map . data
const seriesArr = valueArrs . map (( item , index ) => {
return {
type : ' line ' ,
name : item . name ,
data : item . data ,
stack : ' map ' // stack 值相同 , 可以形成堆叠图 效果
}
} )
..... .
}
图例效果
updateChart () {
......
const valueArrs = this.allData.map.data
const seriesArr = valueArrs.map((item, index) => {
return {
type: 'line',
name: item.name,
data: item.data,
stack: 'map'
}
})
// 准备图例数据 , 它需要和series下的每个对象的name属性保持一致
const legendArr = valueArrs.map(item => {
return item.name
})
const dataOption = {
......
legend: {
data: legendArr
}
......
}
this.chartInstance.setOption(dataOption) }
initChart () {
this . chartInstance = this . $ echarts . init ( this . $ refs . trend _ ref , ' chalk ' ) }
主题使用完之后 , 发现折线图都变成了平滑折线图了 , 这是因为在 chalk . js 主题文件中 , 设置 了
smooth : true
.
2 .2.4. 切换图表
布局的实现
增加类样式为 title 的 容器
< template >
< div class = ' com - container ' >
< div class = " title " >
< span > 我是标题 span >
< span class = " iconfont title - icon " > xe 6 eb ; span >
< div class = " select - con " >
< div class = " select - item " >
标 题选择 1
div >
< div class = " select - item " >
标 题选择 2
div >
< div class = " select - item " >
标 题选择 3
div >
div >
div >
< div class = ' com - chart ' ref = ' trend _ ref ' > div >
div >
< / template >
字 体文件的引入
将资料文件夹下的字体文件 夹中的 font 复制到 asset 目录下 , 然后在 main . js 中引入字体样式文
件
在 Trend . vue 中的 style 标签中增加一些样式
< style lang = ' less ' scoped >
. title {
position : absolute ;
left : 20 px ;
top : 20 px ;
z - index : 10 ;
color : white ;
. title - icon {
margin - left : 10 px ;
cursor : pointer ;
}
. select - item {
cursor : pointer ;
}
}
< / style >
数据动态渲染
使用计算属性 title 控制标题的内容和标题的可选择项
< script >
export default {
data () {
return {
chartInstance : null ,
allData : null ,
dataType : ' map ' / / 这项数据代表目前选择的数据类型 , 可选值有 map seller commodi ty
}
} ,
computed : {
selectTypes () {
if ( ! this . allData | | ! this . allData . type ) {
return []
} else {
return this . allData . type . filter ( item => {
return item . key !== this . dataType
} )
}
} ,
title () {
if ( ! this . allData ) {
return ''
} else {
return this . allData [ this . dataType ] . title
}
}
} ,
..... .
点 击 三角控制显示隐藏
增加一项变量控制可选容器的显示与隐 藏
export default {
data () {
return {
showChoice : false // 控制可选面板的显示或者隐藏
}
} ,
使 用指令 v - if 和点击事件的监听
< template >
< div class = ' com - container ' >
< div class = " title " >
< span > {{ title }} span >
< span class = " iconfont title - icon " @ click = " showChoice =
! showChoice " > xe 6 eb ; span >
< div class = " select - con " v - if = " showChoice " >
< div class = " select - item " v - for = " item in selectTypes "
: key = " item . key " >
{ { item . text }}
div >
div >
div >
< div class = ' com - chart ' ref = ' trend _ ref ' > div >
div >
< / template >
点击可选条目的控 制
将 updateChart 中 , 之前写死的 map 变成 dataType
const valueArrs = this . allData [ this . dataType ] . data
const seriesArr = valueArrs . map (( item , index ) => {
return {
..... .
stack : this . dataType
}
} )
2 .2.5. 分辨率适配
分辨率适配主要就是在 screenAdapter 方法中进行 , 需要获取图表容器的宽度 , 计算出标题字体大小 ,
将 字体的大小赋值给 titleFontSize
< script >
export default {
data () {
return {
titleFontSize : 0
}
} ,
..... .
screenAdapter () {
this . titleFontSize = this . $ refs . trend _ ref . offsetWidth / 100 * 3.6 }
通 过 titleFontSize 从而设置给标题文字的大小和图例的大小
标题文字的大 小
增加计 算 属性 comStyle 并设置给对应的 div , 如下 :
router / index . js
..... .
import MapPage from '@/ views / MapPage '
..... .
const routes = [
..... .
{
path : '/ mappage ' ,
component : MapPage
}
]
..... .
2 .3.2. 显示地图
获取中国地图矢量数据
注册地图数据到 全局 echarts 对象 中
配置 geo
< script >
// 获取的是 Vue 环境之下的数据 , 而不是我们后台的数 据
import axios from ' axios '
export default {
..... .
methods : {
async initChart () {
this . chartInstance = this . $ echarts . init ( this . $ refs . map _ ref ) const { data : mapData } = await
axios . get ( ' http : //127.0.0.1:8999/ static / map / china . json ' )
this . $ echarts . registerMap ( ' china ' , mapData )
const initOption = {
geo : {
type : ' map ' ,
map : ' china '
}
}
this . chartInstance . setOption ( initOption )
} ,
async getScatterData () {
// 获取服务器的数据 , 对 this . allData 进行赋 值之后 , 调用 updateChart 方法更新图表
const { data : ret } = await this . $ http . get ( ' map ' )
this . allData = ret
this . updateChart ()
}
处理数据并且更新图表
updateChart () {
// 处理图表需要的数据
// 图例数据
const legendData = this.allData.map(item => {
return item.name
})
// 散点数据
const seriesArr = this.allData.map(item => {
return {
type: 'effectScatter',
coordinateSystem: 'geo',
name: item.name,
data: item.children
}
})
const dataOption = {
legend: {
data: legendData
},
series: seriesArr
}
this.chartInstance.setOption(dataOption)
},
methods : {
async initChart () {
this . chartInstance = this . $ echarts . init ( this . $ refs . map _ ref , ' chalk ' )
标 题显示
const initOption = {
title : {
text : ' ▎ 商家分布 ' ,
left : 20 ,
top : 20
} ,
地图位置和颜 色
const initOption = {
..... .
geo : {
type : ' map ' ,
map : ' china ' ,
top : '5%' ,
bottom : '5%' ,
itemStyle : {
areaColor : '#2 E 72 BF ' ,
borderColor : '#333'
}
}
}
图例控制
const initOption = {
..... .
legend : {
left : '5%' ,
bottom : '5%' ,
orient : ' vertical '
}
}
涟漪效果
updateChart () {
..... .
const seriesArr = this . allData . map ( item => {
return {
type : ' effectScatter ' ,
rippleEffect : {
scale : 5 ,
brushType : ' stroke '
} ,
..... .
}
} )
2 .3.5. 分辨率适配
计算 titleFontSize
screenAdapter () {
const titleFontSize = this . $ refs . map _ ref . offsetWidth / 100 * 3.6 const adapterOption = {
}
this . chartInstance . setOption ( adapterOption )
this . chartInstance . resize ( )
}
将 titleFontSize 设置给图表的某些区域
标题的大小
图例大小
screenAdapter () {
const titleFontSize = this.$refs.map_ref.offsetWidth / 100 * 3.6 const adapterOption = {
title: {
textStyle: {
fontSize: titleFontSize
}
},
legend: {
itemWidth: titleFontSize / 2,
itemHeight: titleFontSize / 2,
itemGap: titleFontSize / 2,
textStyle: {
fontSize: titleFontSize / 2 }
}
}
this.chartInstance.setOption(adapterOption) this.chartInstance.resize()
2 .3.6. 地图点击事件
响应 图 表的点击事件 , 并获取点击项相关的数据
async initChart () {
..... .
this . chartInstance . on ( ' click ' , arg => {
// arg . name 就是 所点击的省份名称 , 是中文
} )
将 资料中的 map _ utils . js 复制到 src / utils / 目录之下
得到地图所点击项的拼音和地图矢量数据的路 径
< script >
// 获取的是 Vue 环境之下的数据 , 而不是我们后台的数 据
import axios from ' axios '
import { getProvinceMapInfo } from '@/ utils / map _ utils '
export default {
..... .
methods : {
async initChart () {
..... .
this . chartInstance . setOption ( initOption )
this . chartInstance . on ( ' click ' , async arg => {
// arg . name 就是 所点击的省份名称 , 是中文
const provinceInfo = getProvinceMapInfo ( arg . name )
const { data : ret } = await axios . get ( ' http ://127.0.0.1:8999' + provinceInfo . path )
this . $ echarts . registerMap ( provinceInfo . key , ret )
this . chartInstance . setOption ({
geo : {
map : provinceInfo . key
}
} )
} )
this . getScatterData ()
}
}
}
< / script >
回到 中国地图
2 .4. 地区销量排行
最终的效果如下 :
2 . 4.1. 代码环境的准备
RankPage . vue
Rank . vue
router / index . js
..... .
import RankPage from '@/ views / RankPage '
..... .
const routes = [
..... .
{
path : '/ rankpage ' ,
component : RankPage
}
]
..... .
async getData () {
// 获取服务器的数据 , 对 this . allData 进行赋 值之后 , 调用 updateChart 方法更新图表
const { data : ret } = await this . $ http . get ( ' rank ' )
this . allData = ret
// 对数据进行排序 , 从大到小排序
this . allData . sort (( a , b ) => {
return b . value - a . value
} )
this . updateChart ()
} ,
数据的处理
updateChart () {
// 处理图表需要的数据
const provinceArr = this.allData.map(item => {
return item.name
})
const valueArr = this.allData.map(item => {
return item.value
})
const dataOption = {
xAxis: {
data: provinceArr
},
series: [
{
data: valueArr
}
]
}
this.chartInstance.setOption(dataOption)
},
初始化配置
initChart () {
this . chartInstance = this . $ echarts . init ( this . $ refs . rank _ ref ) const initOption = {
xAxis : {
type : ' category '
} ,
yAxis : {
type : ' value '
} ,
series : [
{
type : ' bar '
}
]
}
this . chartInstance . setOption ( initOption )
}
initChart () {
this . chartInstance = this . $ echarts . init ( this . $ refs . rank _ ref , ' chalk ' )
标 题的设置
initChart () {
this . chartInstance = this . $ echarts . init ( this . $ refs . rank _ ref , ' chalk ' ) const initOption = {
title : {
text : ' ▎ 地区销售排行 ' ,
left : 20 ,
top : 20
}
颜色的设置
不同柱显示不同颜色
渐变的控制
updateChart () {
// 处理图表需要的数据
const colorArr = [
['#0BA82C', '#4FF778'],
['#2E72BF', '#23E5E5'],
['#5052EE', '#AB6EE5']
]
......
const dataOption = {
xAxis: {
data: provinceArr
},
series: [
{
data: valueArr,
itemStyle: {
color: arg => {
let targetColorArr = colorArr[0]
if (arg.vaule >= 300) {
targetColorArr = colorArr[0]
} else if (arg.value >= 200) {
targetColorArr = colorArr[1]
} else {
targetColorArr = colorArr[2]
}
return new this.$echarts.graphic.LinearGradient(0,
1, 0, 0, [
{
offset: 0,
color: targetColorArr[0]
},
{
offset: 1,
color: targetColorArr[1] }
])
}
}
}
]
}
this.chartInstance.setOption(dataOption)
},
2 . 4.4. 平移动画的实现
平 移动画可以使用 dataZoom 中的 startValue 和 endValue 来实现
定义数据
< script >
export default {
data () {
return {
chartInstance : null ,
allData : null ,
startValue : 0 ,
endValue : 9
}
} ,
将 startValue 和 endValue 应用在 dataZoom 上 , 并隐藏 dataZoom 的显示
updateChart () {
..... .
const dataOption = {
xAxis : {
data : provinceArr
} ,
dataZoom : {
show : false ,
startValue : this . startValue ,
endValue : this . endValue
} ,
启动和停止定时 器
增加 timerId 的变量 , 并且增加一个方法 startInterval , 来控制 startValue 和 endValue 的值
Hot . vue
router / index . js
..... .
import HotPage from '@/ views / HotPage '
..... .
const routes = [
..... .
{
path : '/ hotpage ' ,
component : HotPage
}
]
..... .
数 据的处理
增加 currentIndex 索引代表当前显示的数据索引 , 后期通过左右箭头改变 currentIndex 的值
Stock . vue
你可能感兴趣的:(echarts,前端,javascript)
玩转Gin框架:Golang使用Gin完成登录流程
至尊丨楷君
gin golang 开发语言
文章目录背景基于Token认证机制简介常见的Token类型Token的生成和验证在项目工程里创建jwt.go文件根目录新建.env文件创建登录接口/loginToken认证机制的优点背景登录流程,相信大家都很熟悉的。传统网站采用session后端验证登录状态,大致流程如下:用户输入用户名和密码/手机号和验证码点击登录按钮提交表单。后端校验前端传递过来的信息,验证通过在缓存中存储用户信息。后续每次请
JavaScript 构造函数及内置构造函数的详解
小白菜学前端
JavaScript javascript 开发语言 前端
在JavaScript中,构造函数是一种特殊的函数,用于初始化对象。当使用new关键字调用构造函数时,它会创建一个新的对象实例,并将构造函数内部的this关键字绑定到这个新对象上。构造函数通常用于定义对象的属性和方法,以及创建对象的实例。1.构造函数的定义和调用构造函数通常以大写字母开头,以便与普通函数区分。它们可以包含属性和方法,这些属性和方法通过this关键字添加到新创建的对象上。调用构造函数
JavaScript 对象object this 构造函数
澄清石灰水t
JavaScript #JS基础 javascript
一、基本数据类型的不足:基本数据类型都是单一的值"hello"123true,值与值之间没有任何联系。exp:用基本数据类型创建一个人的信息(namegenderage)varname="邹邹";vargender="女";varage=18;虽然用基本数据类型创建出了人的相关信息,但是所创建的所有变量都是独立的,不能成为一个整体。二、什么是对象对象是一种复合数据类型,在对象中可以保存多个不同数据
Nginx 运维开发高频面试题详解
千夜啊
nginx 运维开发 运维
一、基础核心问题原文链接:https://blog.csdn.net/weixin_51146329/article/details/1429638531、什么是Nginx?Nginx是一个高性能的HTTP和反向代理服务器,它以轻量级和高并发处理能力而闻名。Nginx的反向代理功能允许它作为前端服务器,接收客户端的请求并将它们转发到后端服务器,这样可以隐藏后端服务器的细节,提高安全性Nginx也能
JavaScript数组操作:多种方法移除特定元素
友人.227
前端 javascript 开发语言
在JavaScript开发中,数组操作是常见的任务之一,尤其是移除数组中特定的元素。不同的场景可能需要不同的方法来实现这一目标。本文将详细介绍几种常见的方法,帮助你在实际开发中根据需求选择最合适的方式。1.使用filter方法filter方法是JavaScript中最常用的数组操作方法之一。它会创建一个新数组,包含所有满足条件的元素。如果你希望移除特定的元素,可以通过filter方法返回一个不包含
鸿蒙开发在onPageShow中数据加载不完整的问题分析与解决
taopi2024
Harmony harmonyos
APIVersion121、onPageShow()作什么的首先说明下几个前端接口的区别:ArkUI-X的aboutToAppear()接口是一个生命周期接口,用于在页面即将显示之前调用。在ArkUI-X中,aboutToAppear()接口是一个重要的生命周期接口,它会在页面即将显示之前被调用。这个接口通常用于在页面显示之前进行一些准备工作,比如加载数据、初始化状态等。通过在aboutToApp
Web3 黑客松组队报名 — 30000 美金奖池,需要前后端,设计,产品,合约工程师
web3
MantleAPACHackathon基本信息ℹ️项目提交截至12月15日30,000美金奖池三大赛道:DeFi、Infra&AI、Gaming&Meme需要前端,后端,设计,产品,合约工程师黑客松要求✍️本次黑客松由MantleFoundation联合Hackguest和OpenBuild共同打造,面向亚太地区开发者和区块链爱好者的线上黑客马拉松不限制主题部署在Mantle测试网上谁适合参加UI
NPDP第三章 新产品流程
钱包不紧张女士
产品运营
什么是流程?流程描述多个人或团体经过一段时间的协作执行工作,流程所涉及的一些活动是由一连串的序列所连接,它具有可重复和可多个路径来完成。成功的新产品决策(决策的基本框架)(决策来源:知识、信息、数据具体来源:内部、外部)1.识别问题和机会2.收集信息3.分析情况4.提出备选解决方案5.评估备选解决方案6.优选解决方案7.基于决策而行动新产品开发成功的关键1.重视前端2.正确决策信息来源:内部、外部
Vue和Vue-Element-Admin(十):HTML和CSS快速学习笔记
A叶子叶
# Vue与Web开发 vue.js html css
目录html标签分类网页布局盒子模型浮动定位css标签选择flex布局transform转换Vue开发tipsless和scssVScode常用插件后端语言框架很多,Java适合企业级应用(规范且稳定),Go适合高并发场景(比如云上产品),Python框架(bottle,tornado,django)简单且快速,也天然适合数据分析场景,PHP适合快速建站,前端变化小,所见即所得,因此抽空记录下学习
JavaScript系列(54)--性能优化技术详解
ᅟᅠ 一进制
JavaScript javascript 性能优化 开发语言
JavaScript性能优化技术详解⚡今天,让我们继续深入研究JavaScript的性能优化技术。掌握这些技术对于构建高性能的JavaScript应用至关重要。性能优化基础概念小知识:JavaScript性能优化涉及多个方面,包括代码执行效率、内存使用、DOM操作、网络请求等。通过合理的优化策略,可以显著提升应用的响应速度和用户体验。性能分析工具实现//1.性能计时器classPerformanc
Javascript基础
2301_79306982
javascript 开发语言 ecmascript
1.ID的限制:ID必须唯一:在同一个HTML文档中,每个id属性的值必须是唯一的。id的设计初衷就是为页面上的每个元素提供一个独特的标识符,便于JavaScript精确操作。如果ID重复会发生什么?当有多个元素使用相同的id时,document.getElementById()只会返回第一个匹配的元素,后面的会被忽略。示例:DuplicateIDJavaScript:varduplicateEl
Vue.js组件开发-实现图片浮动效果
LCG元
前端 vue.js 前端 javascript
使用Vue实现图片浮动效果实现思路将使用Vue的单文件组件(.vue)来实现图片浮动效果。主要思路是通过CSS的transform属性结合JavaScript的定时器来改变图片的位置,从而实现浮动效果。代码实现exportdefault{data(){return{//初始化图片在x轴上的偏移量xOffset:0,//初始化图片在y轴上的偏移量yOffset:0,//定时器ID,用于后续清除定时器
go语言与node.js的点滴思考
棕生
go语言 node.js
node.js基于V8引擎和JavaScript语言通过非阻塞I/O和事件驱动实现了一个非常纯正的异步平台,在处理I/O密集型任务时表现出了优秀的性能。但node.js具有两个非常明显的缺陷:一是单线程运行,不能很好的利用多核;二是异步编程,对业务逻辑的表现非常不自然。go语言通过封装的协程的概念很好的解决了node.js的上述两个问题:首先go语言中的协程通过系统线程的方式并行运行在多个核上;每
nodejs:js-mdict 的下载、安装、测试、build
belldeep
nodejs nodejs nvm yarn Jest
js-mdict项目的目录结构:js-mdict项目教程js-mdict下载地址:js-mdict-master.zip先解压到D:\Source\js-mdict6.0.2用了ts(TypeScript)和Jest,增加了应用开发的难度,因为先要了解ts和Jest。参阅:测试与开发:Jest测试框架介绍Jest是最流行的JavaScript测试框架之一。测试人员广泛使用Jest对JavaScri
敲黑板!如果使用lighthouse 遇到NO_FCP错误可能是前端安全策略导致的!
测试开发Kevin
性能测试 接口测试 测试工具 性能优化 前端
lighthouseNO_FCP使用lighthouse进行前端性能测试时发现一个问题:Thepagedidnotpaintanycontent.Pleaseensureyoukeepthebrowserwindowintheforegroundduringtheloadandtryagain.(NO_FCP)页面截图如下:刚开始以为是自己的lighthouse出了问题,然后找一个其他网页进行性能
Vue3 表单:全面解析与最佳实践
lly202406
开发语言
Vue3表单:全面解析与最佳实践引言随着前端技术的发展,Vue.js已经成为最受欢迎的前端框架之一。Vue3作为Vue.js的最新版本,带来了许多改进和新的特性。其中,表单处理是Vue应用中不可或缺的一部分。本文将全面解析Vue3中的表单处理,包括基础用法、表单验证、双向绑定等,并提供一些最佳实践。Vue3表单基础1.1创建表单在Vue3中,创建表单非常简单。首先,我们需要定义一个元素,并为其绑定
深入理解 ES 模块与 CommonJS 模块
阿贾克斯的黎明
游戏开发 elasticsearch 大数据 搜索引擎
目录《深入理解ES模块与CommonJS模块》引言一、CommonJS模块1.起源与背景2.基本语法导出模块导入模块3.特点二、ES模块1.起源与背景2.基本语法导出模块导入模块3.特点三、ES模块与CommonJS模块的区别1.语法差异2.加载方式3.静态vs动态4.适用场景四、实际开发中的应用1.在Node.js中使用ES模块2.在浏览器中使用ES模块五、总结引言在JavaScript的发展历
第28节课:前端项目实战—从需求分析到开发流程的全方位指南
学问小小谢
HTML学习笔记 前端 需求分析 安全 web安全 网络 性能优化 html5
目录项目需求分析与设计项目背景与目标项目背景项目目标需求收集与分析用户需求业务需求项目设计技术栈选择系统架构设计数据库设计项目开发流程环境搭建安装Node.js和npm初始化项目编码实践组件化开发状态管理测试与调试单元测试集成测试部署与维护部署维护结语在前端开发领域,将理论知识应用于实际项目是提升技能的关键。本节课将通过一个完整的前端项目实战案例,详细介绍项目需求分析与设计,以及项目开发流程,帮助
前端——JS
逆风局?
前端 javascript 开发语言
目录什么是JS?JS引入方式JS基础语法输出语句变量常量数据类型函数自定义对象什么是JS?JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言,是用来控制网页行为的,实现人机交互效果。JavaScript和Java是完全不同的语言,不论是概念还是设计。但是基础语法类似。组成:ECMAScript:规定了JS基础语法核心知识,包括变量、数据类型、流程控制、函数、对象等。BOM:浏览器对
基于Python的图书馆借阅记录管理系统设计与实现
IT实战课堂@白老师
Python项目 python 开发语言 毕设指导推荐 毕设选题推荐 智能家居 爬虫
基于Python的图书馆借阅记录管理系统设计与实现|计算机毕业设计|毕设选题|选题推荐|答辩指导|课程设计|毕设答疑l论文降重该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!技术路线:软件开发环境及开发工具:开发语言:python使用框架:Django前端技术:JavaScript、VUE.js(2.
HarmonyOS 开发实践——常见预置应用的跳转方式
六号嘉宾
HarmonyOS 移动开发 鸿蒙开发 harmonyos 鸿蒙开发 ArkUI 前端 移动开发 界面布局 组件化
往期学习笔录:鸿蒙(HarmonyOS)北向开发知识点记录~鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~鸿蒙应用开发与鸿蒙系统开发哪个更有前景?嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~对于大前端开发来说,转鸿蒙开发究竟是福还是祸?鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?记录一场鸿蒙开发岗位面试经历~持续更新中……场景描述三方应用实际使用过程中,可能需要跳转到
【项目实战】Electron最佳实践
本本本添哥
007 - 大前端技术 electron javascript 前端
一、Electron的入门介绍1.1Electron是什么?Electron由GitHub开发团队创建,最初是为了构建GitHub客户端而设计的。Electron是一个开源的框架,用于构建跨平台桌面应用程序。Electron是一个强大的框架,它可以帮助您使用Web技术构建跨平台桌面应用程序。Electron是一个流行的跨平台框架,可以使用HTML、CSS和JavaScript构建桌面应用程序。1.
第一章 什么是JavaScript
Sheldon一蓑烟雨任平生
开发语言 JavaScript JavaScript基础 ECMAScript 什么是JavaScript
第一章什么是JavaScript1.历史梗概2.JavaScript的实现(ECMAScript、DOM、BOM)2.1ECMAScript2.2DOM(文档对象模型)2.3BOM(浏览器对象模型,在第12章会有详细介绍)3.支持(所有浏览器基本都支持ES5)1.历史梗概(1)初始目的:代替服务器语言,作为脚本语言,在客户端处理输入验证,判断输入值是否填写及其有效性;(2)开发时间:1995年;(
AI智慧社区--百度地图
Y在努力学编程
项目 vue spring boot java 百度地图
数据库:前端实现页面代码import{getCommunityMap}from'@/api/sys/community'exportdefault{name:'Map',data(){return{listQuery:{gradeId:''},center:{lng:116.3755,lat:39.80896},zoom:12,mapData:[]}},mounted(){},methods:{i
javascrip基础语法
大道戏
前端 前端 javascript 开发语言
为什么学习JavaScript?JavaScript是web开发人员必须学习的3门语言中的一门:HTML定义了网页的内容CSS描述了网页的布局JavaScript控制了网页的行为1.JavaScript输出1.1console.log():用于将信息输出到浏览器控制台,例如console.log("Hello,World!");,可以输出字符串、变量、表达式等。1.2console.error()
JavaScript常见事件和修饰符
山禾女鬼001
javascript 开发语言 ecmascript
JavaScript作为Web开发的重要语言,处理事件的机制是其中最常见且最重要的部分之一。通过事件,我们可以让用户与页面进行交互,创造出更丰富、更动态的用户体验。在JavaScript中,事件不仅有种类繁多,还可以通过修饰符来进一步控制它们的行为。1.常见的JavaScript事件JavaScript中的事件主要是指浏览器对用户行为的响应。常见的事件包括但不限于以下几类:1.1鼠标事件click
大学生HTML期末大作业——HTML+CSS+JavaScript美食网站(西餐)
无·糖
Web前端期末大作业 html 课程设计 css 大学生 javascript 美食 大作业
HTML+CSS+JS【美食网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计文章目录一、网站题目二、网站描述三、网站介绍四、网站效果五、️网站代码六、️如何学习进步七、☠️更多干货文章目录一、网站题目美食网站(西餐)精美响应式含JQuery7页二、网站描述总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单
大学生期末大作业|HTML+CSS+JavaScript 登录页面实例:超实用、新手友好、完整源码分享 从零开始:用原生 HTML、CSS 和 JS 打造简洁美观的登录页面(附完整代码) 新手必看:一
南北极之间
前端进阶练手实战 html css 大学生期末大作业 前端 html5 javascript
效果图:目录一、新建一个HTML项目二、创建基本结构三、使用CSS美化页面四、添加交互功能五、完整代码六、结语步骤在Web开发中,登录页面是常见且重要的组件。一个设计良好的登录页面可以提升用户体验,并为网站留下良好的第一印象。今天,我们将一起学习如何使用HTML、CSS和JavaScript(不使用任何框架)来构建一个响应式的登录页面,实现基本的前端验证功能。一、新建一个HTML项目首先,创建一个
HTML5 技术深度解读:本地存储与地理定位的最佳实践
吴师兄大模型
html5 前端 html 本地存储 地理定位 localStorage Geolocation API
系列文章目录01-从零开始学HTML:构建网页的基本框架与技巧02-HTML常见文本标签解析:从基础到进阶的全面指南03-HTML从入门到精通:链接与图像标签全解析04-HTML列表标签全解析:无序与有序列表的深度应用05-HTML表格标签全面解析:从基础到高级优化技巧06-HTML表单深度解析:GET和POST提交方法07-HTML表单控件类型大全:文本框、密码框、文件上传全掌握08-前端表单验
HTML5 Canvas 与 SVG:让网页图形与动画活跃起来
吴师兄大模型
html5 前端 html Canvas SVG 网页图形与动画 HTML5
系列文章目录01-从零开始学HTML:构建网页的基本框架与技巧02-HTML常见文本标签解析:从基础到进阶的全面指南03-HTML从入门到精通:链接与图像标签全解析04-HTML列表标签全解析:无序与有序列表的深度应用05-HTML表格标签全面解析:从基础到高级优化技巧06-HTML表单深度解析:GET和POST提交方法07-HTML表单控件类型大全:文本框、密码框、文件上传全掌握08-前端表单验
tomcat基础与部署发布
暗黑小菠萝
Tomcat java web
从51cto搬家了,以后会更新在这里方便自己查看。
做项目一直用tomcat,都是配置到eclipse中使用,这几天有时间整理一下使用心得,有一些自己配置遇到的细节问题。
Tomcat:一个Servlets和JSP页面的容器,以提供网站服务。
一、Tomcat安装
安装方式:①运行.exe安装包
&n
网站架构发展的过程
ayaoxinchao
数据库 应用服务器 网站架构
1.初始阶段网站架构:应用程序、数据库、文件等资源在同一个服务器上
2.应用服务和数据服务分离:应用服务器、数据库服务器、文件服务器
3.使用缓存改善网站性能:为应用服务器提供本地缓存,但受限于应用服务器的内存容量,可以使用专门的缓存服务器,提供分布式缓存服务器架构
4.使用应用服务器集群改善网站的并发处理能力:使用负载均衡调度服务器,将来自客户端浏览器的访问请求分发到应用服务器集群中的任何
[信息与安全]数据库的备份问题
comsci
数据库
如果你们建设的信息系统是采用中心-分支的模式,那么这里有一个问题
如果你的数据来自中心数据库,那么中心数据库如果出现故障,你的分支机构的数据如何保证安全呢?
是否应该在这种信息系统结构的基础上进行改造,容许分支机构的信息系统也备份一个中心数据库的文件呢?
&n
使用maven tomcat plugin插件debug关联源代码
商人shang
maven debug 查看源码 tomcat-plugin
*首先需要配置好'''maven-tomcat7-plugin''',参见[[Maven开发Web项目]]的'''Tomcat'''部分。
*配置好后,在[[Eclipse]]中打开'''Debug Configurations'''界面,在'''Maven Build'''项下新建当前工程的调试。在'''Main'''选项卡中点击'''Browse Workspace...'''选择需要开发的
大访问量高并发
oloz
大访问量高并发
大访问量高并发的网站主要压力还是在于数据库的操作上,尽量避免频繁的请求数据库。下面简
要列出几点解决方案:
01、优化你的代码和查询语句,合理使用索引
02、使用缓存技术例如memcache、ecache将不经常变化的数据放入缓存之中
03、采用服务器集群、负载均衡分担大访问量高并发压力
04、数据读写分离
05、合理选用框架,合理架构(推荐分布式架构)。
cache 服务器
小猪猪08
cache
Cache 即高速缓存.那么cache是怎么样提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?我在近期开发的项目中有所体会,写下来当作总结也希望能跟大家一起探讨探讨,有错误的地方希望大家批评指正。
1.Cache 是怎么样工作的?
Cache 是分配在服务器上
mysql存储过程
香水浓
mysql
Description:插入大量测试数据
use xmpl;
drop procedure if exists mockup_test_data_sp;
create procedure mockup_test_data_sp(
in number_of_records int
)
begin
declare cnt int;
declare name varch
CSS的class、id、css文件名的常用命名规则
agevs
JavaScript UI 框架 Ajax css
CSS的class、id、css文件名的常用命名规则
(一)常用的CSS命名规则
头:header
内容:content/container
尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制整体布局宽度:wrapper
左右中:left right
全局数据源
AILIKES
java tomcat mysql jdbc JNDI
实验目的:为了研究两个项目同时访问一个全局数据源的时候是创建了一个数据源对象,还是创建了两个数据源对象。
1:将diuid和mysql驱动包(druid-1.0.2.jar和mysql-connector-java-5.1.15.jar)copy至%TOMCAT_HOME%/lib下;2:配置数据源,将JNDI在%TOMCAT_HOME%/conf/context.xml中配置好,格式如下:&l
MYSQL的随机查询的实现方法
baalwolf
mysql
MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,
JAVA的getBytes()方法
bijian1013
java eclipse unix OS
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同OS下,返回的东西不一样!
String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如:
byte[] b_gbk = "
AngularJS中操作Cookies
bijian1013
JavaScript AngularJS Cookies
如果你的应用足够大、足够复杂,那么你很快就会遇到这样一咱种情况:你需要在客户端存储一些状态信息,这些状态信息是跨session(会话)的。你可能还记得利用document.cookie接口直接操作纯文本cookie的痛苦经历。
幸运的是,这种方式已经一去不复返了,在所有现代浏览器中几乎
[Maven学习笔记五]Maven聚合和继承特性
bit1129
maven
Maven聚合
在实际的项目中,一个项目通常会划分为多个模块,为了说明问题,以用户登陆这个小web应用为例。通常一个web应用分为三个模块:
1. 模型和数据持久化层user-core,
2. 业务逻辑层user-service以
3. web展现层user-web,
user-service依赖于user-core
user-web依赖于user-core和use
【JVM七】JVM知识点总结
bit1129
jvm
1. JVM运行模式
1.1 JVM运行时分为-server和-client两种模式,在32位机器上只有client模式的JVM。通常,64位的JVM默认都是使用server模式,因为server模式的JVM虽然启动慢点,但是,在运行过程,JVM会尽可能的进行优化
1.2 JVM分为三种字节码解释执行方式:mixed mode, interpret mode以及compiler
linux下查看nginx、apache、mysql、php的编译参数
ronin47
在linux平台下的应用,最流行的莫过于nginx、apache、mysql、php几个。而这几个常用的应用,在手工编译完以后,在其他一些情况下(如:新增模块),往往想要查看当初都使用了那些参数进行的编译。这时候就可以利用以下方法查看。
1、nginx
[root@361way ~]# /App/nginx/sbin/nginx -V
nginx: nginx version: nginx/
unity中运用Resources.Load的方法?
brotherlamp
unity视频 unity资料 unity自学 unity unity教程
问:unity中运用Resources.Load的方法?
答:Resources.Load是unity本地动态加载资本所用的方法,也即是你想动态加载的时分才用到它,比方枪弹,特效,某些实时替换的图像什么的,主张此文件夹不要放太多东西,在打包的时分,它会独自把里边的一切东西都会集打包到一同,不论里边有没有你用的东西,所以大多数资本应该是自个建文件放置
1、unity实时替换的物体即是依据环境条件
线段树-入门
bylijinnan
java 算法 线段树
/**
* 线段树入门
* 问题:已知线段[2,5] [4,6] [0,7];求点2,4,7分别出现了多少次
* 以下代码建立的线段树用链表来保存,且树的叶子结点类似[i,i]
*
* 参考链接:http://hi.baidu.com/semluhiigubbqvq/item/be736a33a8864789f4e4ad18
* @author lijinna
全选与反选
chicony
全选
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>全选与反选</title>
vim一些简单记录
chenchao051
vim
mac在/usr/share/vim/vimrc linux在/etc/vimrc
1、问:后退键不能删除数据,不能往后退怎么办?
答:在vimrc中加入set backspace=2
2、问:如何控制tab键的缩进?
答:在vimrc中加入set tabstop=4 (任何
Sublime Text 快捷键
daizj
快捷键 sublime
[size=large][/size]Sublime Text快捷键:Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+Shift+L:
php 引用(&)详解
dcj3sjt126com
PHP
在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 复制代码代码如下:
<?
$a="ABC";
$b =&$a;
echo
SVN中trunk,branches,tags用法详解
dcj3sjt126com
SVN
Subversion有一个很标准的目录结构,是这样的。比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。
对软件设计的思考
e200702084
设计模式 数据结构 算法 ssh 活动
软件设计的宏观与微观
软件开发是一种高智商的开发活动。一个优秀的软件设计人员不仅要从宏观上把握软件之间的开发,也要从微观上把握软件之间的开发。宏观上,可以应用面向对象设计,采用流行的SSH架构,采用web层,业务逻辑层,持久层分层架构。采用设计模式提供系统的健壮性和可维护性。微观上,对于一个类,甚至方法的调用,从计算机的角度模拟程序的运行情况。了解内存分配,参数传
同步、异步、阻塞、非阻塞
geeksun
非阻塞
同步、异步、阻塞、非阻塞这几个概念有时有点混淆,在此文试图解释一下。
同步:发出方法调用后,当没有返回结果,当前线程会一直在等待(阻塞)状态。
场景:打电话,营业厅窗口办业务、B/S架构的http请求-响应模式。
异步:方法调用后不立即返回结果,调用结果通过状态、通知或回调通知方法调用者或接收者。异步方法调用后,当前线程不会阻塞,会继续执行其他任务。
实现:
Reverse SSH Tunnel 反向打洞實錄
hongtoushizi
ssh
實際的操作步驟:
# 首先,在客戶那理的機器下指令連回我們自己的 Server,並設定自己 Server 上的 12345 port 會對應到幾器上的 SSH port
ssh -NfR 12345:localhost:22
[email protected]
# 然後在 myhost 的機器上連自己的 12345 port,就可以連回在客戶那的機器
ssh localhost -p 1
Hibernate中的缓存
Josh_Persistence
一级缓存 Hiberante缓存 查询缓存 二级缓存
Hibernate中的缓存
一、Hiberante中常见的三大缓存:一级缓存,二级缓存和查询缓存。
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存是由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存
对象关系行为模式之延迟加载
home198979
PHP 架构 延迟加载
形象化设计模式实战 HELLO!架构
一、概念
Lazy Load:一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。
延迟加载貌似很简单,就是在数据需要时再从数据库获取,减少数据库的消耗。但这其中还是有不少技巧的。
二、实现延迟加载
实现Lazy Load主要有四种方法:延迟初始化、虚
xml 验证
pengfeicao521
xml xml解析
有些字符,xml不能识别,用jdom或者dom4j解析的时候就报错
public static void testPattern() {
// 含有非法字符的串
String str = "Jamey친ÑԂ
div设置半透明效果
spjich
css 半透明
为div设置如下样式:
div{filter:alpha(Opacity=80);-moz-opacity:0.5;opacity: 0.5;}
说明:
1、filter:对win IE设置半透明滤镜效果,filter:alpha(Opacity=80)代表该对象80%半透明,火狐浏览器不认2、-moz-opaci
你真的了解单例模式么?
w574240966
java 单例 设计模式 jvm
单例模式,很多初学者认为单例模式很简单,并且认为自己已经掌握了这种设计模式。但事实上,你真的了解单例模式了么。
一,单例模式的5中写法。(回字的四种写法,哈哈。)
1,懒汉式
(1)线程不安全的懒汉式
public cla