vue柱状图
原型
1 <template>
2 <!-- 上下柱状图 -->
3 <div ref="overallSituation" :style="{ height: height, width: width }" />
4 </template>
5 <script>
6 import echarts from 'echarts'
7 require('echarts/theme/macarons')
8 import resize from '@/views/chart/mixins/resize.js'
9 export default {
10 mixins: [resize],
11 props: {
12 width: {
13 type: String,
14 default: '100%'
15 },
16 height: {
17 type: String,
18 default: '350px'
19 },
20 // 上面数据
21 upDataArr: {
22 type: Array,
23 default: () => []
24 },
25 upName: {
26 type: String,
27 default: () => this.$t('收入')
28 },
29 // 下面数据
30 downDataArr: {
31 type: Array,
32 default: () => []
33 },
34 downName: {
35 type: String,
36 default: () => this.$t('支出')
37 },
38 // 月份
39 rowData: {
40 type: Array,
41 default: () => []
42 }
43 },
44 data() {
45 return {
46 chart: null,
47 loading: false
48 }
49 },
50 beforeDestroy() {
51 if (!this.chart) {
52 return
53 }
54 this.chart.dispose()
55 this.chart = null
56 },
57 mounted() {
58 this.initChart()
59 },
60 methods: {
61 initChart() {
62 this.chart = echarts.init(this.$refs.overallSituation)
63 this.chart.clear()
64 this.chart.setOption({
65 backgroundColor: '#0f375f',
66 tooltip: {
67 trigger: 'axis',
68 axisPointer: {
69 type: 'shadow',
70 textStyle: {
71 color: '#fff'
72 }
73 }
74 },
75 grid: {
76 borderWidth: 0,
77 top: 110,
78 bottom: 95,
79 textStyle: {
80 color: '#fff'
81 }
82 },
83 calculable: true,
84 xAxis: [
85 {
86 type: 'category',
87 axisLine: {
88 lineStyle: {
89 color: 'rgba(255,255,255,.5)'
90 }
91 },
92 splitLine: {
93 show: false
94 },
95 axisTick: {
96 show: false
97 },
98 splitArea: {
99 show: false
100 },
101 axisLabel: {
102 interval: 0,
103 color: 'rgba(255,255,255,1)',
104 fontSize: 14
105 },
106 data: this.rowData
107 }
108 ],
109 yAxis: [
110 {
111 type: 'value',
112 splitLine: {
113 show: false
114 },
115 axisLine: {
116 show: false
117 },
118 axisTick: {
119 show: false
120 },
121 axisLabel: {
122 interval: 0,
123 color: 'rgba(255,255,255,1)',
124 fontSize: 14,
125 formatter: (m) => {
126 return Math.abs(m)
127 }
128 },
129 splitArea: {
130 show: false
131 }
132 }
133 ],
134 series: [
135 {
136 name: this.downName,
137 type: 'bar',
138 barWidth: 20,
139 gridIndex: 0,
140 yAxisIndex: 0,
141 label: {
142 show: true,
143 position: 'top'
144 },
145 itemStyle: {
146 normal: {
147 color: {
148 type: 'linear',
149 x: 0,
150 y: 0,
151 x2: 0,
152 y2: 1,
153 colorStops: [
154 {
155 offset: 0,
156 // 0% 处的颜色
157 color: 'rgb(17,69,238,1)'
158 },
159 {
160 offset: 1,
161 // 100% 处的颜色
162 color: 'rgba(17,69,238,0.2)'
163 }
164 ],
165 // 缺省为 false
166 global: false
167 }
168 }
169 },
170 data: this.upDataArr
171 },
172 {
173 name: this.upName,
174 type: 'bar',
175 barWidth: 20,
176 barGap: '-100%',
177 gridIndex: 0,
178 yAxisIndex: 0,
179 label: {
180 show: true,
181 position: 'bottom',
182 formatter: (m) => {
183 return Math.abs(m.value)
184 }
185 },
186 itemStyle: {
187 normal: {
188 color: {
189 type: 'linear',
190 x: 0,
191 y: 0,
192 x2: 0,
193 y2: 1,
194 colorStops: [
195 {
196 offset: 1,
197 // 0% 处的颜色
198 color: 'rgb(255,153,0, 1)'
199 },
200 {
201 offset: 0,
202 // 100% 处的颜色
203 color: 'rgba(255,153,0,0.2)'
204 }
205 ],
206 global: false
207 },
208 barBorderRadius: 0
209 }
210 },
211 data: this.downDataArr
212 }
213 ]
214 })
215 this.loading = false
216 }
217 }
218 }
219 </script>
220
221 <style scoped>
222 </style>
修改
1 <template>
2 <div>
3 <!-- 总体情况 - 总览echarts -->
4 <div v-loading="loading" :style="{ height: '350px', 'z-index': '2002' }">
5 <!-- 图标-->
6 <div style="z-index: 2000">
7 <!-- 年份选择 -->
8 <div class="choiceYear">
9 <el-select v-model="choiceYear" :placeholder="$t('请选择')" style="width: 80px;" @change="choiceYearMethod">
10 <el-option
11 v-for="item in yearOptions"
12 :key="item.value + new Date().getTime()"
13 :label="item.label"
14 :value="item.value"
15 />
16 </el-select>
17 </div>
18 <UpAndDownColumnar
19 v-if="showColumnar"
20 ref="UpAndDownColumnar"
21 :up-name="$t('收入')"
22 :down-name="$t('支出')"
23 :row-data="rowData"
24 :up-data-arr="upDataArr"
25 :down-data-arr="downDataArr"
26 height="350px"
27 />
28 <!-- 下方信息 -->
29 <div class="overview-information">
30 {{ choiceYear }}{{ $t('年') }}
31 {{ $t('总流入') }}: {{ formData.totalInflow }}{{ $t('元') }},
32 {{ $t('总流出') }}: {{ formData.totalOutflow }}{{ $t('元') }},
33 {{ $t('净流入') }}: {{ formData.netInflow }}{{ $t('元') }},
34 {{ $t('期末余额') }}: {{ formData.endingBalance }}{{ $t('元') }}
35 </div>
36 </div>
37 </div>
38 </div>
39 </template>
40 <script>
41 import { homePageOverview, getRecordYear } from '@/api/company/bankFlowWaterAnalysis/WaterAnalysis.js'
42 import UpAndDownColumnar from '@/views/company/bankFlowWaterAnalysis/columnar/UpAndDownColumnar.vue'
43 export default {
44 components: {
45 UpAndDownColumnar
46 },
47 props: {
48 },
49 data() {
50 return {
51 loading: false,
52 // 上面数据
53 upDataArr: [],
54 // 下面数据
55 downDataArr: [],
56 // 月份
57 rowData: [],
58 showColumnar: false,
59 yearOptions: [],
60 choiceYear: '',
61 // 当前页面的宽度
62 thisPageWidth: (document.documentElement.clientWidth - 270) + 'px',
63 formData: {}
64 }
65 },
66 created() {
67 this.initData()
68 },
69 mounted() {
70 },
71 methods: {
72 initData() {
73 getRecordYear({}).then(response => {
74 this.yearOptions = response.data
75 this.choiceYear = response.data[0].value
76 this.choiceYearMethod()
77 })
78 },
79 choiceYearMethod() {
80 this.loading = true
81 this.showColumnar = false
82 homePageOverview({ companyId: this.$route.query.companyId, years: this.choiceYear }).then(response => {
83 if (response.data.code === 200) {
84 if (response.data.inflow) {
85 this.formData = response.data
86 this.rowData = []
87 this.upDataArr = []
88 this.downDataArr = []
89 response.data.inflow.forEach(item => {
90 this.rowData.push(this.$t(item.years))
91 this.upDataArr.push(item.totalInflow)
92 })
93 }
94 if (response.data.outflow) {
95 response.data.outflow.forEach(item => {
96 this.downDataArr.push(item.totalOutflow)
97 })
98 }
99 this.showColumnar = true
100 this.loading = false
101 } else {
102 this.msgError(this.$t(response.data.msg))
103 this.loading = false
104 }
105 })
106 }
107 }
108 }
109 </script>
110
111 <style scoped>
112 .choiceYear {
113 z-index: 2001;
114 position: absolute;
115 right: 0;
116 border-radius: 6px;
117 padding: 10px;
118 }
119 .overview-information {
120 z-index: 2001;
121 position: absolute;
122 height: 30px;
123 width: 100%;
124 text-align: center;
125 line-height: 1.8;
126 color: white;
127 margin-top: -35px;
128 font-size: 14px;
129 }
130 </style>
引用
1 <template>
2 <div>
3 <div class="area-header" style="margin-top: 20px;">
4 <span class="area-header-title">{{ $t('总览') }}</span>
5 </div>
6 <OverallSituation ref="OverallSituation" />
7
8 </template>
9
10 <script>
11 import OverallSituation from '@/views/company/bankFlowWaterAnalysis/home/OverallSituation.vue'
12
13 export default {
14 components: {
15 OverallSituation
16 }
17 }
18 </script>
19
20 <style scoped>
21
22 </style>
js
1 import request from '@/utils/request'
2
3 // 查询银行流水-记录列表
4 export function allRelatedPartiesView(query) {
5 return request({
6 url: '/company/allRelatedParties/allRelatedPartiesView',
7 method: 'get',
8 params: query
9 })
10 }
11
12 // 查询所有年份
13 export function getRecordYear(query) {
14 return request({
15 url: '/company/allRelatedParties/getRecordYear',
16 method: 'get',
17 params: query
18 })
19 }
controller
1 /**
2 * 首页总览
3 */
4 @ApiOperation(value="首页总览" ,notes="作者:xsx")
5 @PreAuthorize("@ss.hasPermi('company:bankFlowMain:view')")
6 @GetMapping("/homePageOverview")
7 @Log(title = "查询银行流水-记录列表", businessType = BusinessType.LIST)
8 public AjaxResult homePageOverview(BankFlowWaterAnalysis bankFlowWaterAnalysis) {
9 return AjaxResult.success(bankFlowWaterAnalysisService.homePageOverview(bankFlowWaterAnalysis));
10 }
11
12 @ApiOperation(value = "所有年份", notes="xsx")
13 @GetMapping("/getRecordYear")
14 @Log(title = "查询银行流水-所有年份", businessType = BusinessType.LIST)
15 public AjaxResult getRecordYear(BankFlowWaterAnalysis bankFlowWaterAnalysis) {
16 return AjaxResult.success(bankFlowWaterAnalysisService.getRecordYear(bankFlowWaterAnalysis));
17 }
service
1 package com.anxin.company.allRelatedParties.service;
2
3 import com.anxin.common.utils.StringUtils;
4 import com.anxin.company.allRelatedParties.dao.AllRelatedPartiesDao;
5 import com.anxin.company.bankFlowMain.utils.BankFlowUtils;
6 import com.anxin.company.bankFlowMainRecord.entity.BankFlowMainRecord;
7 import com.anxin.company.bankFlowMainRecord.service.BankFlowMainRecordService;
8 import com.anxin.company.bankFlowWaterAnalysis.entity.BankFlowWaterAnalysis;
9 import com.anxin.framework.web.service.BaseService;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Service;
12
13 import java.math.BigDecimal;
14 import java.util.*;
15
16 @Service
17 public class AllRelatedPartiesService extends BaseService<AllRelatedPartiesDao, BankFlowWaterAnalysis> {
18
19 @Autowired
20 private BankFlowUtils bankFlowUtils;
21 @Autowired
22 private AllRelatedPartiesDao allRelatedPartiesDao;
23
24 /**
25 * 查询 所有关联方的银行流水分析
26 * @param bankFlowWaterAnalysis
27 */
28 public Map<String, Object> allRelatedPartiesView(BankFlowWaterAnalysis bankFlowWaterAnalysis) {
29 Map<String, Object> result = new HashMap<>();
30 result.put("code", 200);
31 result.put("msg", "操作成功!");
32
33 if (StringUtils.isBlank(bankFlowWaterAnalysis.getCompanyId())) {
34 result.put("code", 500);
35 result.put("msg", "为获取当前公司");
36 return result;
37 }
38 if(StringUtils.isBlank(bankFlowWaterAnalysis.getYears())){
39 int year = Calendar.getInstance().get(Calendar.YEAR);
40 bankFlowWaterAnalysis.setYears(String.valueOf(year));
41 }
42
43 List<BankFlowWaterAnalysis> inflow = allRelatedPartiesDao.allRelatedPartiesInflow(bankFlowWaterAnalysis);
44 List<BankFlowWaterAnalysis> outflow = allRelatedPartiesDao.allRelatedPartiesOutflow(bankFlowWaterAnalysis);
45
46 List<BankFlowWaterAnalysis> inflowAll = this.setYearsInOrOutflow(inflow, bankFlowWaterAnalysis.getYears());
47 List<BankFlowWaterAnalysis> outflowAll = this.setYearsInOrOutflow(outflow, bankFlowWaterAnalysis.getYears());
48
49 result.put("inflow", inflowAll);
50 result.put("outflow", outflowAll);
51
52 // 总流入
53 BigDecimal totalInflow = new BigDecimal("0");
54 for(BankFlowWaterAnalysis in : inflow) {
55 totalInflow = totalInflow.add(in.getTotalInflow());
56 }
57 result.put("totalInflow", totalInflow);
58
59 // 总流出
60 BigDecimal totalOutflow = new BigDecimal("0");
61 for(BankFlowWaterAnalysis out : outflow) {
62 totalOutflow = totalOutflow.add(out.getTotalOutflow());
63 }
64 result.put("totalOutflow", totalOutflow);
65
66 // 差值
67 result.put("difference", totalInflow.add(totalOutflow));
68 return result;
69 }
70
71 /**
72 * 给结果填充月份和金额
73 * @param inOutFlow 流入或流出查出的结果结合
74 * @param years 查询的年份
75 */
76 private List<BankFlowWaterAnalysis> setYearsInOrOutflow(List<BankFlowWaterAnalysis> inOutFlow, String years) {
77 List<BankFlowWaterAnalysis> result = new ArrayList<>();
78
79 if (StringUtils.isNotEmpty(inOutFlow)) {
80 Set<String> yearSet = new HashSet<>();
81 for(BankFlowWaterAnalysis analysis : inOutFlow) {
82 yearSet.add(analysis.getYears());
83 }
84
85 for(int i = 0; i < 12; i++) {
86 String tempYear = "";
87 if (i < 9) {
88 tempYear = years + "-0" + (i + 1);
89 } else {
90 tempYear = years + "-" + (i + 1);
91 }
92 BankFlowWaterAnalysis setEntity = new BankFlowWaterAnalysis();
93 setEntity.setTotalInflow(new BigDecimal("0"));
94 setEntity.setTotalOutflow(new BigDecimal("0"));
95 if (!yearSet.contains(tempYear)) {
96 setEntity.setYears(tempYear.replaceAll(years + "-", "") + "月");
97 result.add(setEntity);
98 } else {
99 List<BankFlowWaterAnalysis> byList = bankFlowUtils.findObjectByList(inOutFlow, "years", tempYear);
100 if (StringUtils.isNotEmpty(byList)) {
101 BankFlowWaterAnalysis temp = byList.get(0);
102 temp.setYears(tempYear.replaceAll(years + "-", "") + "月");
103 result.add(temp);
104 }
105 }
106 }
107 } else {
108 for(int i = 0; i < 12; i++) {
109 BankFlowWaterAnalysis setEntity = new BankFlowWaterAnalysis();
110 setEntity.setTotalInflow(new BigDecimal("0"));
111 setEntity.setTotalOutflow(new BigDecimal("0"));
112 String tempYear = "";
113 if (i < 10) {
114 tempYear = "0" + (i + 1) + "月";
115 } else {
116 tempYear = (i + 1) + "月";
117 }
118 setEntity.setYears(tempYear);
119 result.add(setEntity);
120 }
121 }
122 return result;
123 }
124
125
126 /**
127 * 获取所有的年份
128 * @param bankFlowWaterAnalysis
129 * @return
130 */
131 public List<Map<String, String>> getRecordYear(BankFlowWaterAnalysis bankFlowWaterAnalysis) {
132 List<BankFlowWaterAnalysis> recordYear = allRelatedPartiesDao.getRecordYear(bankFlowWaterAnalysis);
133 Set<Integer> years = new HashSet<>();
134 List<Map<String, String>> result = new ArrayList<>();
135 if (StringUtils.isNotEmpty(recordYear)) {
136 for(BankFlowWaterAnalysis year : recordYear) {
137 years.add(Integer.valueOf(year.getYears()));
138 }
139
140 Integer max = Collections.max(years);
141 Integer min = Collections.min(years);
142
143 for (var i = 0; i <= max - min; i++) {
144 Map<String, String> mapYear = new HashMap<>();
145 mapYear.put("label", String.valueOf(min + i));
146 mapYear.put("value", String.valueOf(min + i));
147 result.add(mapYear);
148 }
149
150 }
151
152 return result;
153 }
154
155
156 }
entity
1 package com.anxin.company.bankFlowWaterAnalysis.entity;
2
3 import com.anxin.framework.web.entity.BaseEntity;
4
5 import java.math.BigDecimal;
6
7 public class BankFlowWaterAnalysis extends BaseEntity<BankFlowWaterAnalysis> {
8
9 // 公司id
10 private String companyId;
11
12 // 总流入
13 private BigDecimal totalInflow;
14
15 // 总流出
16 private BigDecimal totalOutflow;
17
18 // 净流入
19 private BigDecimal netInflow;
20
21 // 期末余额
22 private BigDecimal endingBalance;
23
24 // 年月
25 private String years;
26
27
28 public String getCompanyId() {
29 return companyId;
30 }
31
32 public void setCompanyId(String companyId) {
33 this.companyId = companyId;
34 }
35
36 public BigDecimal getTotalInflow() {
37 return totalInflow;
38 }
39
40 public void setTotalInflow(BigDecimal totalInflow) {
41 this.totalInflow = totalInflow;
42 }
43
44 public BigDecimal getTotalOutflow() {
45 return totalOutflow;
46 }
47
48 public void setTotalOutflow(BigDecimal totalOutflow) {
49 this.totalOutflow = totalOutflow;
50 }
51
52 public BigDecimal getNetInflow() {
53 return netInflow;
54 }
55
56 public void setNetInflow(BigDecimal netInflow) {
57 this.netInflow = netInflow;
58 }
59
60 public BigDecimal getEndingBalance() {
61 return endingBalance;
62 }
63
64 public void setEndingBalance(BigDecimal endingBalance) {
65 this.endingBalance = endingBalance;
66 }
67
68 public String getYears() {
69 return years;
70 }
71
72 public void setYears(String years) {
73 this.years = years;
74 }
75 }
dao
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="com.anxin.company.bankFlowWaterAnalysis.dao.BankFlowWaterAnalysisDao">
6
7 <select id="homePageOverviewInflow" parameterType="String" resultType="BankFlowWaterAnalysis">
8 SELECT
9 substring(a.transaction_hour, 1, 7) AS 'years',
10 sum(a.transaction_amount) AS 'totalInflow'
11 FROM
12 bank_flow_main_record a
13 WHERE
14 a.transaction_amount <![CDATA[ >= ]]> 0
15 and a.company_id =#{companyId}
16 <if test="years != null and years != ''">
17 and substring(a.transaction_hour, 1, 4) = #{years}
18 </if>
19 GROUP BY
20 substring(a.transaction_hour, 1, 7)
21 </select>
22
23 <select id="homePageOverviewOutflow" parameterType="String" resultType="BankFlowWaterAnalysis">
24 SELECT
25 substring(a.transaction_hour, 1, 7) AS 'years',
26 sum(a.transaction_amount) AS 'totalOutflow'
27 FROM
28 bank_flow_main_record a
29 WHERE
30 a.transaction_amount <![CDATA[ < ]]> 0
31 and a.company_id =#{companyId}
32 <if test="years != null and years != ''">
33 and substring(a.transaction_hour, 1, 4) = #{years}
34 </if>
35 GROUP BY
36 substring(a.transaction_hour, 1, 7)
37 </select>
38
39
40 <select id="getRecordYear" parameterType="BankFlowWaterAnalysis" resultType="BankFlowWaterAnalysis">
41 select
42 substring(a.transaction_hour, 1, 4) AS 'years'
43 from bank_flow_main_record a
44 <where>
45 and a.del_flag = 0
46 <if test="companyId != null and companyId != ''">
47 and company_id =#{companyId}
48 </if>
49 </where>
50 group by
51 substring(a.transaction_hour, 1, 4)
52 </select>
53
54 <select id="topTenInflows" parameterType="String" resultType="java.util.HashMap">
55 SELECT
56 a.account_name as 'accountName',
57 a.counterparty_account_name as 'counterpartyAccountName',
58 sum(a.transaction_amount) as 'transactionAmountSum'
59 FROM
60 bank_flow_main_record a
61 WHERE
62 a.del_flag = '0'
63 AND a.transaction_amount > 0
64 AND a.counterparty_account_name != ''
65 AND a.counterparty_account_name IS NOT NULL
66 and a.company_id = #{companyId}
67 <if test="years != null and years != ''">
68 and substring(a.transaction_hour, 1, 4) = #{years}
69 </if>
70 GROUP BY
71 a.counterparty_account_name
72 ORDER BY
73 sum(a.transaction_amount) desc
74 LIMIT 10
75 </select>
76
77 <select id="topTenOutflows" parameterType="String" resultType="java.util.HashMap">
78 SELECT
79 a.account_name as 'accountName',
80 a.counterparty_account_name as 'counterpartyAccountName',
81 abs(sum(transaction_amount)) AS 'transactionAmountSum'
82 FROM
83 bank_flow_main_record a
84 WHERE
85 a.del_flag = '0'
86 AND a.transaction_amount < 0
87 AND a.counterparty_account_name != ''
88 AND a.counterparty_account_name IS NOT NULL
89 and a.company_id = #{companyId}
90 <if test="years != null and years != ''">
91 and substring(a.transaction_hour, 1, 4) = #{years}
92 </if>
93 GROUP BY
94 a.counterparty_account_name
95 ORDER BY
96 abs(sum(a.transaction_amount)) desc
97 LIMIT 10
98 </select>
99 </mapper>
vue柱状图的更多相关文章
- Vue 柱状图
echarts.js作为国内的IT三巨头之一的百度的推出一款相对较为成功的开源项目,总体上来说有这样的一些优点 1.echarts.js容易使用 echarts.js的官方文档比较详细,而且官网中提供 ...
- vue Echarts 柱状图点击事件
drawBar(){ let that = this; let chart = this.$echarts.init(document.getElementById('bar-graph')); le ...
- 基于vue制作简易的柱状图
一般很常见的柱状图,大家都想到用百度echart,如果整个项目就只绘制仅有的一个柱状图,引入echart就有点大材小用了,哈哈哈. 预览地址:https://zuobaiquan.github.io/ ...
- CSS3 - vue中纯css实现柱状图表效果
背景 以前我们制作柱状图都用echarts或者其他同类型的图表插件 这次是个移动端的需求,而且这个图表需要动画 使用echarts就会显得过重,而且动画达不到我想要的效果(主要是我自己愚蠢想不到好的动 ...
- vue怎么引入echats并使用 (柱状图 字符云)
安装 npm install echarts --save 下面看一下如何简单的使用: 在main.js中引入(全局引入) // 引入echarts import echarts from 'echa ...
- Vue整合d3.v5.js制作--柱状图(rect)
先上效果图: 图中柱状图变成纯蓝色是鼠标滑动过的颜色(颜色可改,本人配色能力十分的强,建议直接用默认设置即可 ( ᖛ ̫ ᖛ )ʃ)) 1.环境说明 Vue版本:"vue": &q ...
- vue+element+echarts柱状图+列表
前端由vue+element搭建框架,引入vue和element的index.js和css就可以写页面: 页面和js可以echarts官网实例看下都是有的,主要看下如何动态赋值: 柱状图和列表: &l ...
- echars vue 封装全局组件 曲线 柱状图 同v-chars绿色系 配置样式
Echars vue封装 ,曲线图 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- vue echart例——柱状图及高度自适应
1.安装 npm install echarts -s 2.例——点击tab切换时柱状图重绘,高度根据返回数据设置. <template> <div> <ul id=&q ...
- vue 折线柱状图
需求:折线柱状图实现,显示不同提示,颜色,标记等等. 图例: 实现: <template> <div class="transaction-barline"> ...
随机推荐
- 基于SLS构建RDS审计合规监控
简介: 数据库是企业业务的数据核心,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源.因此,对数据库的操作行为尤其是全量 SQL 执行记录的审计日志,就显得尤为重要. 背景 数据库是企业业务 ...
- Java Map中那些巧妙的设计
简介: 他山之石可以攻玉,这些巧妙的设计思想非常有借鉴价值,可谓是最佳实践.然而,大多数有关Java Map原理的科普类文章都是专注于"点",并没有连成"线", ...
- Serverless 场景排查问题利器 : 函数实例命令行操作
简介:实例命令行功能的推出希望能消除用户使用 Serverless 的"最后一公里",直接将真实的函数运行环境展现给用户. 背景介绍 全托管的 Serverless 计算平台能给 ...
- dotnet 提升 ToUpper 性能
在应用软件启动过程中,客户端应用软件是对性能敏感的.比如在解析命令行参数的时候,有时候需要进行字符串处理逻辑.一般来说命令行参数都是语言文化无关的,在需要进行全大写或全小写转换过程中,采用 ToUpp ...
- 记因为 NVIDIA 显驱错误而让 WPF 应用启动闪退问题
本文记录一个因为 NVIDIA 显卡驱动错误而让 WPF 应用启动闪退问题 表现是 WPF 应用程序,在启动时,立刻闪退.在事件管理器看到的异常代码是 0xC0000005(Access Violat ...
- JS代码优化小技巧
下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度 [基本优化] 将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完 ...
- 第二讲 Cadence建立工程和元件库
第二讲 Cadence建立工程和元件库 1.创建工程,设置图纸参数.Design Entry CIS / Orcad Capture CIS / Option /Design Template,可以设 ...
- 为什么我反对过度使用TypeScript?
前言 在2024年, TypeScript肯定算不上什么新鲜的技术. 但是经过长时间的使用, 我认为可以使用, 但是要适度. 类型跟不上业务的变化 我们知道TypeScript的类型定义是业务的体现. ...
- 羽夏逆向破解日记簿——关于逆向epub格式转化器与思考
看前必读 本软件是商业软件,本篇文章仅仅介绍 逆向分析过程 和 关于开发软件防止逆向的思考 ,不会提供任何成品破解补丁或成品软件,仅限用于学习和研究目的,否则,一切后果自负.您必须在下载后的24个 ...
- Centos7 忘记密码的解决方法
ilo远程修改 重启服务器,点击cold boot 按钮. 开机后,进入内核上按"e",进入编辑模式 在linux删除linux16这一行的地方,写入如下语句,在*.img行之前. ...