
Contexto relevante significa que as palavras ao redor do termo mostram que o texto é sobre essa habilidade. Uma letra isolada não é contexto relevante. Um Actor é um programa hospedado de coleta de dados. Uma Task é uma predefinição de entrada salva. O Actor coleta linhas de origem. Você marca os termos de habilidade.
1. Defina o painel primeiro
Escreva as regras do painel antes de marcar qualquer habilidade. Um painel é o grupo de anúncios de um cargo, de um mercado e de uma regra de data. Escreva a regra de data na nota do painel. Uma regra de data é a janela de tempo que você aceita.
Nomeie o número que você vai relatar antes de codificar. Você pode relatar quantos anúncios têm um uso da habilidade. Você pode relatar quantos empregadores têm esse uso. Você pode relatar quantas vezes as palavras aparecem. São três números diferentes. Não os misture.
Uma proporção é uma contagem dividida por um número de baixo. O denominador é esse número de baixo. Você vai defini-lo depois de saber quais anúncios têm texto completo. Não codifique termos antes de nomear a proporção.
Para um mês antigo, use instantâneos de descrição que você já salvou. O Actor não pode coletar descrições de 2020 ou 2021. Uma execução nova só pode iniciar um painel novo. Ela não pode reconstruir um painel antigo.
2. Colete e salve as linhas de origem
Use o Actor Indeed Jobs Scraper. A build pública 1.2.14 aceita estes campos: searchTerm, country, location, maxItems, maxPagesPerSearch, postedWithinDays, sortBy e saveOnlyUniqueItems. A Task salva foi conferida em 13 de outubro de 2026. Uma Task é só uma entrada inicial. Ela não faz esta contagem por você.
A entrada da Task salva é:
{
"country": "us",
"searchTerm": "software engineer",
"maxItems": 100,
"postedWithinDays": "7",
"sortBy": "date",
"maxPagesPerSearch": 2,
"saveOnlyUniqueItems": true
}Esta Task define o country como us e o termo de busca como software engineer. Ela não define uma cidade. Adicione location só quando o seu mercado for menor que o país. Troque o cargo e o mercado quando estudar outra coisa. Mantenha um cargo e um mercado na execução.
O teto é o limite maxItems. Esta Task define o teto em 100 linhas e lê até 2 páginas de busca. Esse teto amplo não é a primeira verificação de texto. Para a primeira verificação, mantenha um cargo e um mercado. Defina maxItems como 2. Defina maxPagesPerSearch como 1. Uma entrada da primeira verificação é:
{
"country": "us",
"searchTerm": "software engineer",
"maxItems": 2,
"postedWithinDays": "7",
"sortBy": "date",
"maxPagesPerSearch": 1,
"saveOnlyUniqueItems": true
}Uma execução com teto nesta build devolveu duas linhas. Cada linha tinha um ID de vaga de origem e um URL de origem. Cada linha tinha o texto completo da descrição. A execução atingiu maxItems. Copie os IDs e os URLs da sua própria saída. Não digite IDs novos. Esta execução mostra que a coleta de texto funciona. Ela não é um resultado de habilidade. Ela não é o painel fictício abaixo.
A Task salva define saveOnlyUniqueItems como true. Essa configuração pode reduzir repetições quando o Actor coleta linhas. Ela não conclui uma revisão de duplicatas. Uma republicação é a mesma vaga publicada de novo. Antes de codificar, remova as linhas duplicadas já revisadas e as linhas de republicação já revisadas. Use o guia de duplicatas e republicações para essa revisão. Guarde nas suas notas a contagem das linhas removidas.
Cada linha de origem é um registro coletado. Um anúncio é uma linha que você mantém para a contagem. Guarde jobId como texto. Não deixe uma planilha transformar jobId em número.
Use estes campos de saída. Um contador da execução é um número para a execução inteira. Ele não é uma linha de anúncio.
| Nome da saída | Tipo | Como usar |
|---|---|---|
| jobId | Campo da linha | Guarde como texto. |
| title | Campo da linha | Guarde. Não trate o título como o requisito completo. |
| companyName | Campo da linha | Guarde para a contagem de empregadores. |
| locationRaw | Campo da linha | Guarde o texto de local da origem. |
| descriptionText | Campo da linha | Codifique as habilidades a partir deste texto. |
| descriptionStatus | Campo da linha | Use somente full ou missing. |
| jobUrl | Campo da linha | Guarde o URL de origem. |
| query | Campo da linha | Guarde o texto de busca da linha. |
| searchLocation | Campo da linha | Guarde o local de busca da linha. |
| scrapedAt | Campo da linha | Este é o horário da coleta. |
| seniority | Campo opcional da linha | Pode estar ausente. Não é o requisito completo. |
| employmentType | Campo opcional da linha | Pode estar ausente. |
| salaryRaw | Campo opcional da linha | Pode estar ausente. Ausente não é um salário de zero. |
| postedAt | Campo opcional da linha | Pode estar ausente. Não invente um mês de publicação. |
| postedAtRaw | Campo opcional da linha | Pode estar ausente. |
| rowsExcludedByCompany | Contador da execução | Guarde esta contagem separada. |
| rowsExcludedByDate | Contador da execução | Guarde esta contagem separada. |
| rowsExcludedBySalary | Contador da execução | Guarde esta contagem separada. |
descriptionStatus é full quando descriptionText está presente. É missing quando o texto não está presente. Não acrescente um status de trecho. Texto completo aqui é o texto que a origem forneceu. Não é uma promessa do documento inteiro do empregador.
scrapedAt é o momento em que o Actor coletou a linha. Não é o mês em que o empregador publicou a vaga. Se postedAt estiver ausente, deixe o mês de publicação desconhecido.
rowsExcludedByCompany é a contagem da execução de linhas deixadas de fora por um motivo de empresa. rowsExcludedByDate é a contagem da execução de linhas deixadas de fora por um motivo de data. rowsExcludedBySalary é a contagem da execução de linhas deixadas de fora por um motivo de salário. Não some estas três contagens em um total. Não transforme os contadores em linhas de anúncio. Este controle fornece cada contagem. Nenhum dos três foi omitido. rowsExcludedByCompany é 0. rowsExcludedByDate é 0. rowsExcludedBySalary é 0. Não escreva zero para um contador omitido. Estes três contadores estão presentes, então cada zero é a contagem. O mapa da execução lista cada campo e o seu valor. Um campo que este controle não fornece é desconhecido. Um campo futuro que está ausente é desconhecido. O controle atual do Indeed, com teto e duas linhas, tem estes valores de saída: requestedMaxItems: 2, candidateItemsSeen: 100, jobsSaved: 2, pagesParsed: 1, blockedPages: 0, failedRequests: 0, stopReason: "max_items_reached", rowsExcludedByCompany: 0, rowsExcludedByDate: 0, rowsExcludedBySalary: 0. Esta execução não é desconhecida. Campos futuros ausentes continuam desconhecidos.
Salve a entrada que executou, as linhas brutas e a saída. Escreva o maxItems que você definiu e o número de linhas devolvidas. Se os dois números forem iguais, a execução atingiu o teto. Uma execução no teto não é toda vaga correspondente. Se a execução não devolver linhas, escreva que a execução ficou vazia. Uma execução vazia não prova que não existem vagas. Se a execução falhar, salve a nota da falha. Não preencha uma execução com falha com zeros de habilidade.
Mantenha uma linha com descriptionText ausente fora do conjunto codificado. Some 1 à contagem de lacunas para cada linha assim. Uma lacuna não é um anúncio em que a habilidade está ausente.
O Actor fornece linhas públicas atuais. Ele não fornece texto antigo de descrição. Ele não fornece horários de edição do empregador. Ele não fornece status do candidato. Ele não fornece um plano de aprendizagem. Ele não rotula termos de habilidade. Você os rotula com as regras abaixo.
3. Escreva a lista de habilidades antes de procurar correspondências
Escreva uma lista de habilidades antes de buscar no texto. A chave de habilidade é o único nome que você guarda para uma habilidade. Um alias é outra forma de escrever a mesma habilidade. Um token é uma palavra inteira ou um símbolo isolado. Não é um pedaço de uma palavra mais longa. Uma exclusão é uma correspondência que você recusa.
Ignore a diferença entre maiúsculas e minúsculas ao procurar SQL, Structured Query Language e as outras chaves abaixo. Deixe SQL e Structured Query Language compartilharem uma chave quando as palavras significarem essa linguagem. Mantenha Java separado de JavaScript. Procure R só como um token inteiro de habilidade em texto relevante. Não marque a letra R dentro de outra palavra.
Um rótulo de versão, como uma versão de linguagem, precisa de uma regra escrita. Um nome de produto precisa de uma regra escrita. Decida a regra antes de codificar. Não adivinhe enquanto lê.
Esta lista de habilidades é para o painel fictício deste artigo. Não é uma lista fornecida pelo Actor. O seu próprio painel precisa das suas próprias chaves.
| Chave de habilidade | Aliases permitidos | Regra de token | Exclusões |
|---|---|---|---|
| SQL | SQL; Structured Query Language | Os dois aliases compartilham esta chave quando o texto significa a linguagem. | Não use esta chave para uma frase diferente. |
| Python | Python | Procure a palavra inteira. | Não codifique uma frase não obrigatória como obrigatória. |
| R | R | Procure um token inteiro em texto relevante de habilidade. | Não marque a letra dentro de uma palavra. |
| Java | Java | Procure a palavra inteira. | Não marque JavaScript. |
| JavaScript | JavaScript | Procure a palavra inteira. | Não conte Java como JavaScript. |
Esta lista não tem regra de versão nem regra de nome de produto. Os textos fictícios não têm versão nem nome de produto. Se o seu texto tiver um dos dois, acrescente a regra à lista primeiro.
4. Codifique cada trecho
Encontre o trecho que contém o nome da habilidade. Depois leia as palavras ao redor. Uma classe é o tipo de menção. Use estas classes:
- Obrigatório significa que o texto diz que o candidato precisa ter a habilidade.
- Preferencial significa que o texto pede a habilidade, mas não diz que o candidato precisa tê-la.
- Contexto significa que o texto diz que o trabalho usa a habilidade, mas não a exige do candidato.
- Explicitamente não obrigatório significa que o texto diz que o candidato não precisa da habilidade.
- Indeterminado significa que você não consegue identificar a classe pelas palavras.
Uma menção lexical significa que o nome da habilidade aparece no texto. Mantenha a menção lexical mesmo quando a classe não for a classe chamada obrigatório. Não descarte a frase.
O painel fictício mais adiante contém as palavras "no Python experience required." Essas palavras são uma menção lexical de Python. A classe é a classe chamada explicitamente não obrigatório. A classe não é a classe chamada obrigatório.
O mesmo painel contém as palavras "we use R for reports." Essas palavras são uma menção lexical de R. A classe é contexto. Não marque R como obrigatório, a menos que o texto também diga que o candidato precisa ter R.
A letra r dentro de "reports" não é a habilidade R. A letra r dentro de "required" não é a habilidade R.
Se um anúncio tiver duas classes para uma habilidade, marque cada classe. Se a mesma classe se repetir em um anúncio, marque essa classe uma vez.
5. Monte a matriz de anúncios
Uma matriz de termo por anúncio é uma tabela com uma linha para cada anúncio codificado. Cada classe de habilidade tem a sua própria coluna. Coloque 1 quando o texto completo tiver essa classe. Coloque 0 quando você ler o texto completo e essa classe estiver ausente. Um 0 significa que você leu o texto. Não significa que o texto estava ausente.
Menções repetidas de uma chave em um anúncio ainda fazem uma marca de anúncio nessa classe. Presença no anúncio significa esse 1. Mantenha uma contagem de ocorrências brutas em uma tabela separada quando precisar dela. Uma ocorrência bruta é uma aparição da chave. Não some ocorrências brutas na coluna do anúncio.
Um anúncio pode ter 1 para preferencial e 0 para obrigatório. Um anúncio pode ter 1 para explicitamente não obrigatório e 0 para obrigatório. Um anúncio pode ter 1 para contexto e 0 para obrigatório. Não una essas colunas.
Não coloque uma descrição ausente na matriz como uma linha de zeros. Mantenha-a na contagem de lacunas.
6. Defina o denominador
O denominador é o número de anúncios distintos com texto completo no mesmo painel. Distinto significa que você conta o mesmo anúncio uma vez. Conte só os anúncios que restam depois da revisão de duplicatas. Conte só os anúncios com descriptionStatus full.
A proporção de anúncios é igual à contagem da classe dividida pelo denominador. Escreva a proporção como uma contagem sobre o denominador. Relate a contagem de lacunas ao lado. Relate a contagem de IDs incertos ao lado. Um ID incerto está em branco, foi alterado ou está em conflito com outra linha. Mantenha um ID incerto fora do denominador.
Relate também a incerteza da codificação. Incerteza da codificação significa que os revisores não concordam sobre a classe. Mantenha um anúncio em disputa fora da contagem de obrigatório até o registro declarar a classe acordada. Não transforme uma disputa em um zero silencioso.
A amplitude de empregadores é o número de empregadores diferentes com essa classe. Divida essa contagem de empregadores pelo número de empregadores diferentes no denominador. Um empregador pode escrever muitos anúncios. Uma proporção alta de anúncios ainda pode vir de uma parcela pequena dos empregadores distintos. Relate as duas proporções.
Estas proporções descrevem só o seu painel. Elas não são a demanda nacional de habilidade. Elas não são uma medida do que os candidatos sabem fazer.
7. Compare painéis com as mesmas regras
Compare dois meses só quando as regras do painel coincidirem. Mantenha o mesmo cargo, o mesmo mercado, a mesma query, a mesma janela de data, o mesmo teto e a mesma versão da lista de habilidades. Uma versão da lista de habilidades é o nome que você dá a uma lista de habilidades salva.
Se você mudar um alias ou uma regra de classe, a proporção pode mudar enquanto o texto da vaga permanece o mesmo. Essa mudança é uma mudança de codificação. Relate-a antes de ler a proporção nova.
Se o teto, a query, o mercado ou a janela de data mudar, a amostra mudou. Texto de origem ausente também é uma mudança de cobertura. Relate a mudança da amostra antes de ler a mudança da proporção. Não trate uma mudança de codificação como uma mudança de amostra.
Uma amostra de busca não mostra a causa de uma mudança. Ela não mostra que o mercado inteiro cresceu. Uma mudança na proporção de uma habilidade não é uma mudança no número de anúncios. Para contagens de anúncios ao longo do tempo, use o guia de tendências de contratação.
8. Salve o registro
Salve a lista de habilidades e o nome da versão. Salve cada trecho que você codificou, com o ID do anúncio, a chave de habilidade e a classe. Salve a matriz. Salve o registro do denominador.
O registro do denominador deve incluir:
- O cargo, o mercado, a query, a janela de data e o teto.
- A entrada que executou e a build do Actor.
- A contagem de linhas devolvidas e se a execução atingiu maxItems.
- Qualquer nota de falha.
- rowsExcludedByCompany, rowsExcludedByDate e rowsExcludedBySalary, ou desconhecido para cada contador omitido.
- As linhas duplicadas que você removeu.
- A contagem de lacunas.
- A contagem de IDs incertos.
- A contagem de incerteza da codificação.
- O denominador.
- A contagem de empregadores nesse denominador.
Uma segunda pessoa deve conseguir partir do trecho salvo e chegar à mesma célula da matriz. Se não conseguir, o registro não está completo.
Pare na contagem de termos. Uma atribuição repetida pode orientar uma escolha de aprendizagem posterior. Essa escolha não é esta contagem. Esta contagem também não é uma pontuação pessoal de preparo.
Conte um painel fictício
As cinco descrições desta seção são ficção. Elas não são resultados do Actor. Elas não são um achado real de habilidade. J1 a J5 são rótulos. Eles não são IDs reais de origem. A lista de habilidades acima é a regra deste painel.
| Rótulo | Empregador | descriptionText | descriptionStatus |
|---|---|---|---|
| J1 | A | SQL required. SQL reports run daily. Python preferred. | full |
| J2 | A | Structured Query Language required; no Python experience required. | full |
| J3 | B | JavaScript required; we use R for reports. | full |
| J4 | C | Java required; R preferred. | full |
| J5 | D | `""` | missing |
Estes rótulos não têm valores de scrapedAt nem valores de postedAt. Não atribua um mês de publicação a eles.
J1 e J2 usam o empregador A. Os textos deles diferem. Esta ficção mantém os dois anúncios. Ela não chama J2 de republicação de J1. Se uma revisão real removesse J2 como republicação, o denominador mudaria. Esta ficção não decide se J2 é uma republicação de J1.
J5 tem um rótulo conhecido e não tem texto completo. J5 fica fora da matriz. A contagem de lacunas é 1. A contagem de IDs incertos é 0 porque o rótulo é conhecido e o texto é a lacuna. Não invente texto para J5.
O registro de trechos é:
| Anúncio | Trecho | Chave de habilidade | Classe |
|---|---|---|---|
| J1 | SQL required. | SQL | obrigatório |
| J1 | SQL reports run daily. | SQL | contexto |
| J1 | Python preferred. | Python | preferencial |
| J2 | Structured Query Language required | SQL | obrigatório |
| J2 | no Python experience required | Python | explicitamente não obrigatório |
| J3 | JavaScript required | JavaScript | obrigatório |
| J3 | we use R for reports | R | contexto |
| J4 | Java required | Java | obrigatório |
| J4 | R preferred | R | preferencial |
| J5 | Sem texto completo | nenhuma | Não codificado |
Uma ocorrência é uma vez em que o texto da habilidade aparece. Presença é uma marca de anúncio para uma classe. Marque cada classe uma vez por anúncio. Uma segunda frase com a mesma chave e a mesma classe acrescenta uma ocorrência bruta. Ela não acrescenta uma segunda presença. Uma segunda frase com a mesma chave e uma classe diferente recebe a sua própria presença. Não descarte essa classe porque a chave também tem texto obrigatório.
A primeira frase de SQL em J1 recebe a classe chamada obrigatório. Ela é uma ocorrência da classe chamada obrigatório. A presença da classe chamada obrigatório para J1 é 1. A frase "SQL reports run daily." recebe a classe chamada contexto. Ela é uma ocorrência da classe chamada contexto. A presença da classe chamada contexto para J1 é 1. J2 conta como SQL porque Structured Query Language é um alias permitido. As palavras significam a linguagem, e a frase diz que essa linguagem é obrigatória. Esse alias é uma ocorrência da classe chamada obrigatório. A presença da classe chamada obrigatório para J2 é 1.
A matriz usa 1 e 0 só para os quatro textos completos. J5 não é uma linha aqui.
| Anúncio | Empregador | SQL obrigatório | SQL contexto | Python obrigatório | Python preferencial | Python explicitamente não obrigatório | R obrigatório | R contexto | R preferencial | Java obrigatório | JavaScript obrigatório |
|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | A | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| J2 | A | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| J3 | B | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| J4 | C | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| Contagem de anúncios | `""` | 2 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
Cada 0 em J1 a J4 significa que o texto completo foi lido e que essa classe estava ausente. Nenhum trecho codificado é indeterminado, então indeterminado é 0 de 4. Esse zero segue uma leitura. Ele não é a lacuna de J5. Nenhuma classe está em disputa, então a contagem de incerteza da codificação é 0.
As contagens brutas ficam em uma tabela separada.
| Anúncio | Chave de habilidade | Classe | Ocorrências brutas |
|---|---|---|---|
| J1 | SQL | obrigatório | 1 |
| J1 | SQL | contexto | 1 |
| J2 | SQL | obrigatório | 1 |
| J2 | SQL | contexto | 0 |
| J1 | Python | preferencial | 1 |
| J2 | Python | explicitamente não obrigatório | 1 |
| J2 | Python | obrigatório | 0 |
| J3 | R | contexto | 1 |
| J4 | R | preferencial | 1 |
| J3 | R | obrigatório | 0 |
| J4 | R | obrigatório | 0 |
| J3 | Java | obrigatório | 0 |
| J4 | Java | obrigatório | 1 |
| J3 | JavaScript | obrigatório | 1 |
| J4 | JavaScript | obrigatório | 0 |
Quatro anúncios válidos com texto completo formam o denominador. Os anúncios são J1, J2, J3 e J4. Os empregadores no denominador são A, B e C. Esse total de empregadores é 3. O empregador D fica de fora porque J5 não tem texto completo.
J1 tem 2 ocorrências brutas de SQL. A classe chamada obrigatório tem 1. A classe chamada contexto tem 1. J2 tem 1 ocorrência bruta de SQL, e essa classe é a classe chamada obrigatório. A contagem bruta de SQL obrigatório é 1 mais 1, o que é igual a 2. A contagem bruta de SQL contexto é 1. 2 mais 1 é igual a 3 ocorrências brutas de SQL. A contagem lexical total de SQL permanece 3. O total bruto de obrigatório é 2. A contagem de anúncios de obrigatório também é 2. O mesmo número não faz das duas medidas uma só medida. A ocorrência de contexto fica fora do total bruto de obrigatório. A contagem de anúncios de SQL obrigatório é 2. A proporção de SQL obrigatório é igual a 2 dividido por 4. Ela não é igual a 3 dividido por 4. Ela não é igual a 2 dividido por 5. A menção bruta extra pertence à classe chamada contexto. Ela não é um anúncio extra. J5 não entra no número de baixo.
A contagem de anúncios de SQL contexto é 1. A proporção de SQL contexto é igual a 1 dividido por 4. Não some o 1 anúncio de contexto aos 2 anúncios de obrigatório. J1 contaria duas vezes. As classes permanecem separadas.
Os dois anúncios de SQL obrigatório pertencem ao empregador A. A proporção de empregadores de SQL obrigatório é igual a 1 dividido por 3. O único anúncio de SQL contexto pertence ao empregador A. A proporção de empregadores de SQL contexto é igual a 1 dividido por 3. O empregador A também escreveu 2 dos 4 anúncios. Relate essa amplitude ao lado da proporção de anúncios. Nesta ficção, um empregador pode mover a proporção de SQL.
O texto de Python aparece em J1 e J2. São duas menções lexicais, e as duas permanecem no registro. Python preferencial é igual a 1 dividido por 4. Python explicitamente não obrigatório é igual a 1 dividido por 4. Python obrigatório é igual a 0 dividido por 4. Não some a menção preferencial à menção não obrigatória e chame a soma de obrigatório. A frase não obrigatória permanece uma menção lexical.
O texto de R aparece em J3 e J4. R contexto é igual a 1 dividido por 4. R preferencial é igual a 1 dividido por 4. R obrigatório é igual a 0 dividido por 4. A presença lexical de R é igual a 2 dividido por 4. Não relate esses dois anúncios como da classe chamada obrigatório.
Java obrigatório é só J4. Essa proporção é igual a 1 dividido por 4. JavaScript obrigatório é só J3. Essa proporção é igual a 1 dividido por 4. A contagem de Java em J3 é 0 porque JavaScript é uma chave diferente.
As proporções relatadas são:
| Classe | Anúncios | Proporção de anúncios | Empregadores | Proporção de empregadores |
|---|---|---|---|---|
| SQL obrigatório | J1, J2 | 2 de 4 | A | 1 de 3 |
| SQL contexto | J1 | 1 de 4 | A | 1 de 3 |
| Python obrigatório | nenhum | 0 de 4 | nenhum | 0 de 3 |
| Python preferencial | J1 | 1 de 4 | A | 1 de 3 |
| Python explicitamente não obrigatório | J2 | 1 de 4 | A | 1 de 3 |
| R obrigatório | nenhum | 0 de 4 | nenhum | 0 de 3 |
| R contexto | J3 | 1 de 4 | B | 1 de 3 |
| R preferencial | J4 | 1 de 4 | C | 1 de 3 |
| Java obrigatório | J4 | 1 de 4 | C | 1 de 3 |
| JavaScript obrigatório | J3 | 1 de 4 | B | 1 de 3 |
Um contador de palavras é uma ferramenta que encontra uma sequência de letras e soma um. Dois resultados de contador de palavras falham nesta regra fictícia. Use-os como testes da regra. Eles não são uma pontuação de um produto de software.
Um contador de palavras marca Java quando vê JavaScript. Ele marcaria J3 como Java. Essa marca não atende à regra de token. Java permanece 1 de 4, só de J4.
Um contador de palavras trata "no Python experience required" como demanda de Python ou como Python obrigatório. Essa marca não atende à regra de classe. Python obrigatório permanece 0 de 4. A frase de J2 permanece na classe chamada explicitamente não obrigatório.
Uma busca pelas letras SQL também deixa passar J2. A regra de alias ainda marca J2. A contagem de SQL obrigatório permanece 2 de 4.
Fontes e leituras adicionais
Por Chronometrica · Atualizado
Voltar ao topo ↑

