---
# System prepended metadata

title: 關於網頁的50個問題

---

---
title: 2024程設筆記
tags: 2024
author: xCk27x、yunnnnchieh
---

# 關於網頁的50個問題

###### tags: `2024`

:::info
請在裡面挑選30題完成
:::

## 前端
1. 請舉出三個例子，將child對於parent水平且垂直置中
```html=
<div id="parent">
    <p id="child">我想置中</p>
</div>
```
2. 今天有一張png圖片，我希望他非透明部分能呈現陰影，應該怎麼設定css屬性?
(提示: 不是box-shadow)
3.  我有一個元素他被設定了```position: relative```，但我同時希望他能夠根據另一個```position: relative```的父元素進行定位，請問應該怎麼做?
```html=
<div id="grandParent" class="relative">
    <div id="parent" class="relative">
        <p id="child" class="absolute">
            請勿更動這家人的position設定
        </p>
    </div>
</div>
```
4. 請問以下css selector分別代表什麼?
    - .intro
    - #Lastname
    - h1, p
    - div .container
5. 請舉出三個可以在vue元件之間傳遞資料的方法(只要a.vue可以改變b.vue中存取的值即可)
6. 有一個image倍div包住了，但我希望這個image能根據這個div的最大高度或最大寬度去縮放(img的長或寬其中之一等於div的長或寬)，應該怎麼做?
```html=
<div class="w-60 h-40"> //這裡是tailwind語法，請先花時間熟悉
    <img src="fit-parent.png" />
</div>
```
7. 請將以下scss改寫為css
```sass
.section {
    width: 100vw;
    height: 100vh;
    position: relative; 
    
    & p {
        color: white;
        
        &:hover {     
            color: red;     
            cursor: pointer;   
        } 
    }
    
    &_container {
        min-width: 10rem;
        position: absolute;
        left: 3rem;
        right: 3rem;
        outline: 1px solid black;
    
        &-1 {
            background-image: linear-gradient(to right bottom, black, white);
        }

        &-2 {
            background-image: linear-gradient(to bottom, gray, blue);
        }

        &-3 {
            background-image: linear-gradient(to left top, red, yello);
        }
    }
}

// 我知道用GPT翻很快，但花時間理解才會進步
```
8. 請用白話文解釋這個div倒底會怎麼被解剖
```css=
.stake {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
    grid-gap: 1rem;
}
```
- 對grid有興趣可以玩這個: [Grid Garden - A game for learning CSS grid](https://cssgridgarden.com/)
9. 一般設定父元素為flex後，元素會由左而右依序排列，如果太擠也不會往下換行。但我現在想要讓flex元素由下而上排列，並且太擠時會往左邊換行，請問該如何設定父元素?
```=
結果會長這樣
---------   
|   6 3 |
|   ^ ^ |
| 8 5 2 |
| ^ ^ ^ |
| 7 4 1 |
---------
```

10. 今天有一個css動畫，我希望他永遠不會停止，請問應該怎麼設定
11. display:none、跟 visibility:hidden差別是什麼
12. 有一個超好用的 css function 叫做 clamp()，請詳細的解釋他怎麼使用。
13. 常常會搞混 ```@media(max-width: 540px) {...}``` 跟 ```media(min-width: 540px) {...}```，請問哪一個的意思才是「先設計小於540px的版面，當畫面大於540px時套用@media的內容」

## JavaScript

1. 你知道的，javascript是一個非常詭異的語言，而有一個非常經典的例子
```javascript=
('b' + 'a' + +'a' + 'a').toLowerCase()
```
請回答這個字串的字面值是多少，並解釋原因。
2. 請對```[1,2,3,4,5,6,7]```使用map方法，得出新陣列```[1,3,5,7,9,11,13]```(各元素的值加上自己的index)
3. 請對```[1,2,3,4,5,6,7]```使用filter方法，得出```[3,6]```(留下為3倍數的元素)
4. 請對```[1,2,3,4,5,6,7]```使用reduce，得出5040(各元素乘積)
5. push、unshift跟concat都是Array.prototype中用來將陣列擴展的方法，那他們的差別是是甚麼?
6. javascript單執行緒的語言，所以以下程式碼的輸出可能會跟你想的不一樣。請回答以下程式碼的輸出是什麼
```javascript=
for (let i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i);
  }, 100)
}
```
7. 如果你做完了剛剛那題，那你應該知道event loop是什麼了，請順便解釋一下他是做什麼的吧!
8. 請用一句話解釋callback function是甚麼。
9. 當我對一個Promise物件使用.then()時，這個.then()裡面的程式甚麼時後會被執行 ?

## TypeScript
:::warning
為啥要寫typescript？根本原因不是什麼「型別檢查好棒」
、「你遲早會用到」、「js是個奇怪的語言」這種冠冕堂皇的話。要說原因，你去問企劃組是誰想要做RPG的，這種物件傳來傳去的東西用弱型別寫根本地獄，我完全想像得到報錯時出現"read undefined"的畫面。
:::

1. 請舉出三個宣告型別的方法(let a: number算一種)
2. 要怎麼定義一個 type ? 
3. 那怎麼定義一個 interface 呢 ?
4. 我想要宣告一個變數是字串的陣列型態，請問應該怎麼做?
5. 難的來了，請解釋以下定義的type是什麼意思
```typescript=
type obj = {
    [key: string]: number;
}
```
6. 請問基本型別中，哪些型別直接進行 if() 判斷後會是true，哪些會是false
7. 如果一個函數沒有回傳值，那我應該怎麼宣告?
8. 我們知道應該要避免變數被隱性的設為any型態，但是當我建立一個callback function如下，為什麼acc跟cur這兩個變數不用宣告型態也沒關係 ?
```typescript=
let nums = [1,2,3,4,5,6,7];

nums.reduce((acc, cur) => acc + cur)
```


## vue/nuxt
:::warning
為什麼我要兩個綁在一起問？原因是我上次寫純vue是半年以前了，實在不能說很熟。
而且nuxt好寫多了，你碰過大概也會回不去。
:::

1. 請舉出一段範例程式碼，用來向 https://ncufresh/backend 發送get請求
2. 請問nuxt中，pages資料夾下的_slug.vue有甚麼特殊作用 ?
3. 解釋 Nuxt.js 中的布局模板（Layouts）和組件（Components）之間的區別
4. 請問在nuxt專案中，常常會用以下兩種方法去尋找檔案: ```@/filePath``` 跟 ```~/filePath```，他們的差別是甚麼?


## Git
:::info
如果你想不到答案，可以上 https://learngitbranching.js.org/?locale=zh_TW&demo=
試著操作一下。
:::

1. 發送一個新 commit 通常需要哪些步驟
2. 請問 ```git merge``` 跟 ```git rebase``` 差別是甚麼，你比較喜歡哪種作法?
3. 以下的 git 紀錄顯示，我用 ```git fetch``` 後發現 o/main 因為同事的 work 而被更新了，那我現在要怎麼將main更新到o/main的位置上呢 ?
   ![image](https://hackmd.io/_uploads/SyKq2ouz0.png)
4. 請解釋 git reset 的三種模式差別是甚麼?
5. 有一個跟 ```git reset``` 相近的指令叫 ```git revert```，請解釋他跟git reset的差別。
6. ```git checkout``` 可以將head移動到不同分支上，他有一個常用的選項 ```git checkout -b <branchName>```，請問他是做什麼的
7. 請解釋 ```git checkout HEAD~3``` 是甚麼意思 ? 
8. 請在console中輸入
```bash
$ git checkout -b test1
$ git push
// 報錯: fatal: The current branch test1 has no upstream branch.
```
請查看完整錯誤訊息，解釋報錯的原因，並給出解決方案。
## express
1. Middleware 在 Express 中的作用是什麼？
2. 請解釋Express中Body Parser的作用 
3. 用javascript建立一個 Express 伺服器，當收到 GET 請求時，回傳 "Hello, World!"
4. 根據上面的程式碼，當用戶發送 GET 請求到 /api/posts/:postId/comments/:commentId 路由時，會發生甚麼情況？請解釋在不同情況下伺服器端的回應。
```javascript=
const express = require('express');
const app = express();
const posts = [
    { id: 1, title: 'Post 1', comments: ['Comment 1', 'Comment 2'] },
    { id: 2, title: 'Post 2', comments: ['Comment 3', 'Comment 4'] }
];
app.get('/api/posts/:postId/comments/:commentId', (req, res) => {
    const postId = parseInt(req.params.postId);
    const commentId = parseInt(req.params.commentId);
    const post = posts.find(post => post.id === postId);
    if (post) {
        const comment = post.comments[commentId - 1];
        if (comment) {
            res.send(`文章 ${postId} 的評論 ${commentId}：${comment}`);
        } else {
            res.status(404).send('評論不存在');
        }
    } else {
        res.status(404).send('文章不存在');
    }
});
app.listen(3000, () => {
    console.log('伺服器已啟動在端口 3000');
});
```
5. 承上題，在上面的程式碼中，為什麼在獲取評論時使用 ```commentId - 1```，而不是直接使用 ```commentId```？
6. 承上題，在上面的程式碼中，假設用戶發送了一個 GET 請求到 ```/api/posts/2/comments/3``` 路由，那麼伺服器端會回應甚麼訊息？
7. 在上面的程式碼中，當用戶發送一個 GET 請求到 ```/users/:userId``` 路由時，程式碼會依序進行什麼步驟?
```javascript=
const express = require('express');
const app = express();

const users = [
    { id: 1, name: 'John' },
    { id: 2, name: 'Jane' },
    { id: 3, name: 'Doe' }
];

app.get('/users/:userId', (req, res) => {
    const userId = parseInt(req.params.userId);
    const user = users.find(user => user.id === userId);
    if (user) {
        res.send(`用戶名：${user.name}`);
    } else {
        res.status(404).send('用戶不存在');
    }
});

app.listen(3000, () => {
    console.log('伺服器已啟動在端口 3000');
});
```
8. 在上面的程式碼中，為什麼要使用 ```parseInt()``` 函式將 ```userId``` 轉換為整數型？
9. 如果在 myMiddleware 中間件中忘記調用 next()，會發生什麼情況？
```javascript=
// 自定義 middleware 函式
const myMiddleware = (req, res, next) => {
    console.log('這是自定義的 middleware');
    next(); 
};
```
10. 請解釋 CSRF（Cross-Site Request Forgery） 保護是什麼，以及在 Express 應用程式中是如何被實現的
