软考总结目录
- 宏观
- 学习感受
- 阶段划分
- 微观
- 1.自己看书和看视频:
- 2.学习的知识点和课后题进行结合
- 3.做往年的软考真题
- 4.提炼出相对来说难以攻克的问题组织分享和讨论
- 5.小组讨论做错的题并进行结构化
- 总结
- 学习时间上
- 学习方法上
- 学习形式上
宏观
学习感受
第一次参加软考,感觉一切还是非常顺利的。软考相较于自考来说准备的还是比较充分的。对于学习软考的整个周期当中进行了模块形式的划分,把软考整体的内容进行了逐步学习和总结。和软考小组的伙计们一起讨论。公共性的问题和其他组进行讨论,这个过程是十分重要也是让我们深入学习和很好的理解一个知识点的重要组成部分。
阶段划分
学习软考的过程分为以下几个阶段:自己看书和看视频的学习、学习的知识点和课后题进行结合、做往年的软考真题、提炼出相对来说难以攻克的问题组织分享和讨论、小组讨论做错的题并进行结构化。
微观
1.自己看书和看视频:
这个阶段是我们丰富我们的知识面,对于一些基本概念的熟悉和掌握。由于软考中的大部分内容在学习自考的时候都有接触过。所以这个阶段进行的速度非常的快。结合三遍读书法和思维导图的学习方法很快的就进行完了软考书和软考视频的学习。
软考的每个部分都进行了思维导图的绘制。对于每个思维导图中还会有每个章节的思维导图。因为三遍读书法每一遍的侧重点都是不一样的。
2.学习的知识点和课后题进行结合
对于在视频中接触到的知识点或者是在书中学习到的知识点和课后题进行结合,在晚上找一些相关的资料进行更加容易的去理解。
3.做往年的软考真题
把书中的知识点和课后题目对应完毕之后,明确了每一道题想要考的知识点以及想要我们具体掌握哪些知识了。但是我们最后还是需要考试的。我们需要知道具体考试的时候,题型是什么样子的。有没有一些固定性的格式或者套路在里面。这些是需要我们通过做往年的真题获取到的。
对于一些经常出错的问题进行了记录,并且以软考小组为单位进行了讨论。大家都不清楚的问题,把问题进行划分。划分到每个人的身上进行深入的学习。
4.提炼出相对来说难以攻克的问题组织分享和讨论
大家的问题基本上集中在下午题的设计模式和算法当中,对于每个设计模式之间的区分使用场景等内容都不是很清楚。对于每种算法的时间复杂度和空间复杂度也不是很清楚。针对这些内容进行了针对性的学习和分享。知识最怕的就是你研究和讨论,你会发现通过不断的学习和反复的研究你会非常的明白。
写了每个算法对应的代码,根据代码分析了时间复杂度和空间复杂度
这是堆排序的代码实现
package com.wzl.Algorithm.HeapSort;
import java.util.Arrays;
/**
* @BelongsProject: demo
* @BelongsPackage: com.wzl.Algorithm.HeapSort
* @Author: Wuzilong
* @Description: 堆排序
* @CreateTime: 2023-04-29 11:45
* @Version: 1.0
*/
public class HeapSort {
public static void heapSort(int[] arr) {
int n = arr.length;
// 构造大根堆
for (int i = n / 2 - 1; i >= 0; i--) {
heapify(arr, n, i);
}
// 交换堆顶元素和最后一个元素,并重新构造堆
for (int i = n - 1; i >= 0; i--) {
swap(arr, 0, i);
heapify(arr, i, 0);
System.out.println( Arrays.toString(arr));
}
}
private static void heapify(int[] arr, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest]) {
largest = left;
}
if (right < n && arr[right] > arr[largest]) {
largest = right;
}
if (largest != i) {
swap(arr, i, largest);
heapify(arr, n, largest);
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] numArray={4,6,3,5,9};
heapSort(numArray);
}
}
我分享的内容是分治法:法治算法详解
欢迎大家的来访!!!
针对设计模式进行了二维表的对比和总结:
每类模式都画了对应的二维表进行比较
每个模式都画了对应的类图
对于学习设计模式中有疑惑的点,也进行了分享。讨论和研究就是我们攻克难题的最好方式
5.小组讨论做错的题并进行结构化
进入到这个阶段大家对于软考的内容都已经有一个大致的了解了。剩余的就是对于一些概念性的内容进行结构化了。比如软件设计的各个模式、软件质量、UML图的对比等内容。这些内容都是需要我们进行结构化的,赋予一些自己理解起来比较容易的意义。结构化的方式有很多种。适合自己能够让自己印象深刻即可。举个例子来说,对于专利和商标权的申请。如果两个人都同时申请了专利不能够确定最终的专利权给谁,不采取抽签的形式。但是如果两个人同时申请了商标权不能够确定最终的商标权给谁,那么就采取抽签的形式来决定。通过结构化的方式印象深刻就是申请专利需要给你钱所以不抽签,申请商标权你需要交钱,所以采取抽签的形式来决定(结构化可能与实际不太符合,方便理解和印象深刻是我们的目的)
总结
学习时间上
- 按时间安排一定要合理,不要快考试了才学习。要把时间划分到每一天的计划当中
- 每天学习的内容要和番茄进行结合,以番茄为单位进行。
学习方法上
- 和软考小组进行讨论是一个必不可少的部分。讨论的过程中会纠正我们的认识
- 将学习的内容进行结构化,结构化让我们的知识彼此之间有了联系。而且印象深刻。达到牵一发而动全身的效果。
学习形式上
- 确保每个阶段有输出的产物,比如思维导图、知识之间比对的二维表、博客总结等内容
- 学习是需要套路和模板的,每次学习新的内容按照我们一贯的套路学习,把知识点从多个维度去理解和划分就会变的很容易
今天软考完事了,做题的过程中感觉还是非常简单的。有很多的内容是和软考小组的伙计们讨论的时候遇到的。考试整体下来还是非常顺利的。相较于自考来说也更加的放松。机会都是留给有准备的人的。付出是有回报的。期待软考成绩!!!
package com.wzl.Algorithm.HeapSort;
import java.util.Arrays;
/**
* @BelongsProject: demo
* @BelongsPackage: com.wzl.Algorithm.HeapSort
* @Author: Wuzilong
* @Description: 堆排序
* @CreateTime: 2023-04-29 11:45
* @Version: 1.0
*/
public class HeapSort {
public static void heapSort(int[] arr) {
int n = arr.length;
// 构造大根堆
for (int i = n / 2 - 1; i >= 0; i--) {
heapify(arr, n, i);
}
// 交换堆顶元素和最后一个元素,并重新构造堆
for (int i = n - 1; i >= 0; i--) {
swap(arr, 0, i);
heapify(arr, i, 0);
System.out.println( Arrays.toString(arr));
}
}
private static void heapify(int[] arr, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest]) {
largest = left;
}
if (right < n && arr[right] > arr[largest]) {
largest = right;
}
if (largest != i) {
swap(arr, i, largest);
heapify(arr, n, largest);
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] numArray={4,6,3,5,9};
heapSort(numArray);
}
}
package com.wzl.Algorithm.InsertionSort;
import java.util.Arrays;
/**
* @BelongsProject: demo
* @BelongsPackage: com.wzl.InsertionSort
* @Author: Wuzilong
* @Description: 直接插入排序
* @CreateTime: 2023-04-24 11:29
* @Version: 1.0
*/
public class Insert {
public static void insertionSort(int[] num){
for (int i =1; i<num.length;i++){
if (num[i]<num[i-1]){
int temp=num[i];
for (int j=i; j>=0;j--){
if (j>0&&num[j-1]>temp){
num[j]=num[j-1];
}else{
num[j]=temp;
break;
}
}
}
System.out.println(Arrays.toString(num));
}
}
public static void main(String[] args) {
int[] num={2,8,1,4,9,5,7};
insertionSort(num);
}
// public static void main(String[] args) {
// int arr[] = {2,6,5,3,1,4,9,8,7};
// int temp;
// for (int i=1;i<arr.length;i++){
// //待排元素小于有序序列的最后一个元素时,向前插入
// if (arr[i]<arr[i-1]){
// temp = arr[i];
// for (int j=i;j>=0;j--){
// if (j>0 && arr[j-1]>temp) {
// arr[j]=arr[j-1];
// }else {
// arr[j]=temp;
// break;
// }
// }
// }
// }
// System.out.println(Arrays.toString(arr));
// }
}
package com.wzl.Algorithm.Partition;
/**
* @BelongsProject: demo
* @BelongsPackage: com.wzl.Algorithm.Partition
* @Author: Wuzilong
* @Description: 分治算法
* @CreateTime: 2023-04-26 09:27
* @Version: 1.0
*/
public class Client {
/**
* @Author:Wuzilong
* @Description:写基本的逻辑,如何实现的方法
* @CreateTime: 2023/5/8 9:36
* @param1: value查找的元素
* @param2: 数组
* @param3: 查询的起始位置
* @param4: 查询的结束位置
* @return:
**/
public static int seek(int value,int[] numberArr,int start,int end,int key){
if(start >end){
return -1;
}
//用来接收折中元素的下标
key=(start+end)/2;
//判断查找的元素是否小于折中元素
System.out.println("折中元素为:"+numberArr[key]);
if(value<numberArr[key]){
//递归调用,查找折中元素前面的内容
return seek(value,numberArr,start,key-1,key);
//判断查找的元素是否大于折中元素
}else if(value>numberArr[key]){
//递归调用,查找折中元素后面的内容
return seek(value,numberArr,key+1,end,key);
//查找的元素和折中元素相等
}else{
return key;
}
}
public static void main(String[] args) {
int numberArr[]={11,18,27,28,33,72,89,111,192};
System.out.println("元素所在的位置是"+seek(192,numberArr,0,numberArr.length-1,0));
}
}